InleidingEr zijn vele boeken volgeschreven over technische analyse. Ik heb echter problemen met de manier waarop technische analyse meestal wordt gebruikt.
1) Het wordt imo onnodig ingewikkeld gemaakt. Vele esoterische koerspatronen en begrippen passeren de revu: steunen, weerstanden, kop-en-schouder patronen, kop en schotel, tradingranges, fibonacci retracements, Elliot-Wave analyse, etc. Dit kan veel eenvoudiger.
2) Er zijn geen eenduidige definities waardoor het onmogelijk is om de methodiek te testen en zinnige discussies te voeren over of iets in de praktijk werkt of niet.
3) Waarschijnlijk om die reden wordt bijna nooit statistiek gepresenteerd. Hoe betrouwbaar is bijvoorbeeld zo’n kop en schouder patroon?
4) De mooie patronen die je in TA-boeken vindt zijn meestal achteraf in de koersgrafieken getekend. Maar we moeten in real-time beslissingen nemen! Veel van de "voorspellende waarde" berust op visuele illusies.
In dit topic beschrijf ik een methode om koerspatronen te analyseren door ze op te breken in gestandaardiseerde brokjes waaruit uiteindelijk elk koerspatroon is samen te stellen. Dit is toepasbaar in real-time en objectief testbaar. Daarna test ik een paar eenvoudige basis patronen op 5 valuta paren om te zien of ze iets kunnen onthullen de toekomstige prijsontwikkeling.
MethodeEen koersgrafiek heeft een fractal structuur: je kunt kun inzoomen of uitzoomen maar de grafiek blijft er (binnen bepaalde grenzen) ongeveer hetzelfde uitzien. Of je nu een daggrafiek hebt, een weekgrafiek, een uurgrafiek of een minuten grafiek.
Voordat je een patroon kunt analyseren moet je dus eerst bepalen op welke resolutie je gaat kijken. Hoe groot moet een beweging zijn voordat je hem meetelt?
We beginnen daarom met het vereenvoudigen van het koerspatroon met behulp van een zigzag functie. De parameter hier is de grootte die een beweging minimaal moet hebben voordat je hem meetelt. Zoals je in Fig.1 ziet krijg je verschillende patronen als functie van deze parameter.
Fig.1: Vereenvoudig een koerspatroon met behulp van een zigzag functieNu zul je misschien denken: hier verlies je toch informatie? Zelfs als je alleen geïnteresseerd bent in grote bewegingen, kan het niet zo zijn dat bewegingen op kleinere schaal ook belangrijke clues bevatten die relevant kunnen zijn voor de analyse?
Dat is waar, maar je kunt dezelfde analyses natuurlijk doen op verschillende resoluties en die met elkaar combineren. Zo zie je bijvoorbeeld dat de grote opgaande beweging in de bovenste grafiek op zichzelf ook weer een complexer patroon is (zie de twee grafieken eronder) en die analyses kun je met elkaar combineren als je dat nuttig lijkt. Voor een computer is het een fluitje van een cent om analyses parallel uit te voeren op een hele reeks van resoluties en verbanden te onderzoeken.
Echter, een dergelijke complexe analyse is alleen nuttig als je al had vastgesteld dat een bepaald basis patroon op een lagere of hogere resolutie überhaupt een voorspellende waarde heeft. Daarom richt ik me in dit topic alleen op een paar simpele basispatronen. Bij positieve resultaten kun je dit altijd uitbreiden.
Okee. Nu we het koerspatroon hebben vereenvoudigd middels een zigzag functie is de vraag hoe we dit verder kunnen analyseren. De methode die ik heb bedacht is het opbreken van de grafiek in atomaire eenheden van twee golfjes L1 en L2 zoals in Fig.2.
Fig.2: Het koerspatroon wordt opgesplitst in een reeks van atomaire eenheden, waarbij de atomaire eenheid bestaat uit een combinatie van twee golfjes L1 en L2: een actie en een reactie.Elke eenheid bestaat uit een actie (L1) en een reactie (L2). Eenheden overlappen: L1 is de L2 van de vorige eenheid en L2 is de L1 van de volgende eenheid.
De afzonderlijke eenheden kunnen we karakteriseren met een set parameters, waarbij de belangrijkste is aangegeven in Fig.3:
Retracement.
Fig.3: Karakterisatie van een eenheid d.m.v. retracementJe ziet dat L2 altijd een reactie is op L1. De prijsrelatie tussen L1 en L2 kunnen we uitdrukken in een simpel getalletje: retracement = L2/L1.
Retracement is een bekend concept uit de technische analyse. Maar het gaat natuurlijk verder dan dat. Bij een retracement > 1 is er sprake van een "uitbraak" (breken van de steun of weerstand die wordt gevormd door de voorgaande bodem of top) of in Elliot-Wave termen: een extension. Deze simpele basiseenheid gevormd door L1-L2 bevat dus al de belangrijkste TA concepten. Het gebruiken van retracement als een parameter in de karakterisatie van een koerspatroon is dus niet alleen maar praktisch; intuïtief is het ook een goede keuze. Veel traders handelen immers op uitbraken, steunen en weerstanden en bepaalde Fibonacci niveaus.
Naast de prijs-as is er nog een andere as: de tijd-as. Maar omdat ik de resolutie (Fig.1) als parameter gebruik in mijn analyses is het handiger en interessanter om te kijken naar de verhouding tussen de prijsbeweging en de verstreken tijd, met andere woorden:
MomentumFig.4: Karakterisatie d.m.v. momentumDe situaties in Fig.4 zijn identiek op de prijs-as maar verschillend op de tijd-as. In het eerste plaatje heeft L1 weinig momentum en L2 veel, in het tweede plaatje is dat omgekeerd. Implicaties in een trading situatie zullen dus ook verschillend kunnen zijn.
Een complex koerspatroon zoals een tradingrange, "head & shoulder" patroon, "Cup & handle", "Elliot-Wave", etc is niets anders dan een serie van basis eenheden zoals ik die hier heb beschreven en waarbij de parameters van elke eenheid binnen een bepaalde range vallen. Fluitje van een cent voor een PC en objectief testbaar (en automatiseerbaar).
Hoe te analyseren?De reden voor mij om dit project te starten was omdat ik een aantal eenvoudige verbanden wou onderzoeken. Zelf heb ik in het verleden nooit voorspellende waarde gevonden in complexere patronen maar die zijn gemakkelijk te testen met deze methode mocht een onderzoek naar eenvoudige verbanden succes hebben. Daarom test ik in dit topic alleen een paar hele basale verbanden.
Hoe heb ik de voorspellende waarde van bepaalde geometrie getest?
Fig.5: Het gebruik van "targets" Waar we in zijn geïnteresseerd is wat de prijs gaat zijn in de toekomst. Zo verdienen we immers geld met trading! Stel, ik wil testen in hoeverre de mate van retracement iets zegt over de kans dat de prijs een bepaalde kant op gaat. Om dit te testen creëer ik virtuele trades op verschillende retracement niveaus die ik vind in de prijsdata. Hierbij zet ik een "profit target" op een gelijk percentage onder en boven de actuele prijs (zie Fig 5). Dit zijn "set-and-forget" targets: uiteindelijk wordt één van de twee geraakt en het niet geraakte target vervalt. Als ik dit vaak genoeg doe dan kan ik statistiek verzamelen over welk target de meeste kans heeft om te worden geraakt. En dat zegt dus iets over de voorspelbare waarde die het patroon heeft.
Maar hoe ver moet ik de targets van de actuele koers plaatsen? Dit is natuurlijk ook een zeer relevante parameter. Immers, stel dat steun- en weerstandsniveaus daadwerkelijk relevant zijn... Bij hoge waardes van de target ligt die misschien boven een weerstandsniveau en bij lage niveaus net daaronder! Verder is het de vraag in hoeverre de markt "geheugen" heeft. Als een target verder weg ligt, is het voorafgaande patroon dan nog wel relevant? Vragen, vragen.... en precies dat is waarom ik deze testen doe.
Zoals gezegd doen we hier niet aan "hindsight" analyses en moeten we in real-time een zich ontwikkelend patroon analyseren. Om de analyse te kunnen volgen en te zien of het nergens fout gaat zorg ik altijd dat het proces grafisch wordt weergegeven (Fig 6).
Fig 6: Grafische weergave van de analyse. Hier zie je meteen hoe messy het is in real-time, maar misschien kun je het volgen. De groene L1-L2 eenheden beschrijven een opwaartse reactie op een daling, de rode een neerwaartse reactie op een stijging. Je ziet dat er als een bepaald retracement niveau wordt bereikt er targets worden geplaatst boven en onder dat niveau. Daarbij is het witte bolletje een target in de richting van L2 en het zwarte bolletje in de richting tegengesteld aan L2. Logischerwijs zijn de targets van de rode eenheden dus tegengesteld aan de groene.
Te analyseren instrumentenDe testen heb ik uitgevoerd op 5 valuta paren: EURUSD, GBPEUR, GBPUSD, JPYUSD en AUDUSD over een periode van 5 jaar (1 jan 2008 - 31 dec 2012) op een resolutie van 1 minuut. Uiteraard kun je dezelfde analyses doen op andere instrumenten maar dit keer koos ik voor deze valuta paren om de volgende redenen:
1) Makkelijk intraday data te verkrijgen voor lange periode
2) Deze instrumenten zijn liquide en in de praktijk makkelijk te traden met lage spreads via currency brokers of (beter imo) via futures. Dat maakt testresultaten makkelijker vertaalbaar naar de praktijk.
3) 24 uur handel maakt analyse makkelijker
4) Valuta paren hebben een bepaalde symmetrie. In aandelenmarkten bijvoorbeeld hebben dalingen een andere dynamiek dan stijgingen. Maar in valutamarkten is dat in mindere mate het geval omdat bijv een opwaartse beweging in EURUSD het gevolg kan zijn zowel een bullmarket in EUR als een bearmarket in USD. In de meeste analyses behandel ik dalingen daarom op dezelfde manier als stijgingen en tel de resultaten gewoon bij elkaar op.
Enkele kanttekeningen:1) De gebruikte data is de bied koers. Dit kan in principe een bepaalde bias geven, maar doordat ik de resultaten van opgaande en neergaande bewegingen combineer verwacht je dat een eventuele bias uitmiddelt. Evengoed iets om in je achterhoofd te houden.
2) De prijs beweegt in discrete stapjes. Dit is geen probleem als je grote bewegingen analyseert, maar wel bij kleine bewegingen. Als je de kleinste golfjes op 20 pips zet dan is een retracement van 0,2 een beweging van maar 4 pips! Je kunt je dan afvragen hoe relevant zo'n resultaat is. Het is belangrijk om dit in je achterhoofd te houden als je de resultaten bekijkt. Ik heb de parameter range expres ruim gekozen (van hele kleine, wellicht te "korrelige" bewegingen tot bewegingen die zo groot zijn dat je nauwelijks genoeg trades krijgt om voldoende statistiek te verkrijgen)
3) Alle geteste valutaparen op één na (EURGBP) bevatten USD als component en alleen al daardoor is er een correlatie tussen de verschillende paren.
Resultaten:De volgende verbanden heb ik onderzocht:
1) Toekomstige prijs vs Retracement en Target op verschillende resoluties
2) Toekomstige prijs vs Retracement, Momentum L2 en Target op verschillende resoluties
3) Toekomstige prijs vs Retracement, Momentum L1 en Target op verschillende resoluties
4) Toekomstige prijs vs Retracement, Time L1 en Target op verschillende resoluties
5) Toekomstige prijs vs Retracement, L1/W0 en Target op verschillende resoluties
Resultaten: 1) Prijs vs Retracement en Target op verschillende resoluties (ZZDev)Voordat we naar de resultaten gaan is het goed om even na te denken over wat je eigenlijk zou verwachten. We hebben altijd geleerd dat oude toppen weerstand geven en oude bodems steun. Als dit waar is, dan zouden we dat dus terug moeten zien in de resultaten.
Als bijvoorbeeld m'n retracement parameter 0,8 is en m'n target parameter 0,4, dan leidt dat tot een opwaarts target van 0,8+0,4+1,2 en een neerwaarts target van 0.8-0,4=0,4. De eerste loopt tegen een weerstand op dus je zou denken dat het minder waarschijnlijk is dat dat target wordt gehaald.
Als m'n retracement parameter 0,2 is en m'n target parameter 0,4, dan krijg ik -0,2 en +0,6 als targets. De eerste loopt tegen een steun op (bodem L1) dus is minder waarschijnlijk dan de tweede, die immers nog ver onder de weerstand ligt. Zie fig 7.
Fig 7: ligging van steun en weerstand in retracement vs target diagramDaarnaast zijn er nog allerlei theorieën over Fibonacci niveaus, zoals bijvoorbeeld dat als de retracement verder gaat dan 61,8% dat de beweging dan waarschijnlijk wordt voortgezet. Als dit waar is dan zou dat leiden tot de tegenovergestelde conclusie in het eerste voorbeeld, namelijk dat de opwaartse target een hogere waarschijnlijkheid heeft dan de neerwaartse.
Goed, laten we we eens kijken wat de simulaties opleverden bij de valutaparen! Deze eerste simulatie heb ik apart opgesplitst in opwaartse en neerwaartse beweging en tenslotte de som van beiden. Je verwacht sowieso verschillen tussen opwaarts en neerwaarts omdat als een valutapaar per saldo stijgt over de geteste periode opwaartse targets een hogere waarschijnlijkheid hebben om te worden geraakt dan de neerwaartse. Maar door de som te nemen zou dat ongeveer moeten uit middelen. De interessantste resultaten zijn natuurlijk als we zouden vinden dat de opwaartse en neerwaartse met elkaar overeenstemmen.
Hoe moet je de plaatjes hieronder interpreteren? Helemaal rechts zie je een legenda met de kleurtjes. Dit drukt de Win/Loss ratio uit van de test die ik eerder heb beschreven. Langs de x-as staat Retracement, langs de y-as de Target parameter en ZZ is de zigzag parameter die bepaalt wat de resolutie van de golfjes is (zoals eerder uitgelegd in Fig 1). ZZ is niet een percentage maar een absolute waarde. Dus 0.0040 op EURUSD is 40 pips (dus een minimale beweging van bijvoorbeeld 1.3500 naar 1.3540). Stel dat de Retracement parameter 0,2 is dan impliceert dat dat L2 minimaal 0,2x40 = 8 pips is.
Tsja, wat kunnen we hier nu uit halen? De interessantste en meest consistente resultaten vinden we op USDJPY. Er is daar een sterke correlatie tussen de opwaartse en neerwaartse resultaten. Verder vinden we vooral op USDJPY (maar ook op een aantal andere valutaparen) een hint van de in Fig 7 geschetste
rode diagonaal, maar op een andere manier dan verwacht. Het suggereert namelijk dat je beter kunt speculeren op het breken van een weerstand dan op afketsen. Dit is wel interessant omdat ik een paar jaar geleden al hetzelfde constateerde op de daggrafiek van de S&P500 (zie dit topic:
AEX / TA: Steun en weerstandsniveaus, werken ze echt?). Geen idee of ik hier naar rare artefacten van de testmethode zit te kijken of dat hier echt iets zit. Wie het weet mag het zeggen.... Verder is er een suggestie dat het traden van een uitbraak inderdaad werkt.
Verbanden lijken over het algemeen slechter te worden naarmate golfjes groter worden. Dit is wellicht een hint naar een korte termijn geheugen in de markt, maar het is ook enigszins verdacht omdat kleine golfjes "korreliger" zijn (discrete stappen - PIPS).
Resultaten: 2) Prijs vs Retracement, Target en Momentum L2 op verschillende resoluties (ZZDev)Fig 8: L2 MomentumHier kijken we in hoeverre het momentum van L2 een rol speelt. Je zou denken dat een heftige beweging (veel momentum) wellicht meer relevant is dan een minder heftige beweging omdat er waarschijnlijk een meer fundamentele vraag-aanbod verschuiving aan ten grondslag ligt en minder random noise.
Ik kan helaas niet zeggen dat ik hier een consistent resultaat zie. Het vliegt alle kanten op. Daarbij moet ik wel opmerken dat het momentum een zeer grote range bestrijkt. Je ziet hier en daar de grafieken ook de schaal overschrijden, vooral op extreme punten. Meestal komt dat omdat er niet voldoende situaties waren met deze (meestal extreme) parameters en je dus domweg te weinig samples hebt om goede statistiek toe te passen.
Resultaten: 3) Prijs vs Retracement, Target en Momentum L1 op verschillende resoluties (ZZDev)Hier kijken we in hoeverre het momentum van L1 een rol speelt. Net als bij de vorige analyse van L2 zou je denken dat een heftige beweging (veel momentum) meer relevant zou kunnen zijn dan een minder heftige beweging en daarom wellicht een hint geeft of L2 zich voortzet of dat het waarschijnlijker is dat we verder gaan in de richting van L1.
Fig 9 : L1 MomentumOok hier zie ik weinig consistentie in de resultaten.
Resultaten: 4) Prijs vs Retracement, Target en Time L1 op verschillende resoluties (ZZDev)Dit keer kijk ik niet naar het momentum van L1 maar naar de verstreken tijd (de schaal van de grafiek geeft het aantal bars in L1 en elke bar duurt 1 minuut). Het zou namelijk kunnen dat de tijd die een golf duurt ook een belangrijke factor is. Is een beweging van 240 minuten (dus 240 bars) belangrijker dan één van 30 minuten?
Fig 10: Time L1Ook hier zie ik geen duidelijk resultaat. Geen duidelijke "sweet spot" of een verloop van hoog naar laag of zoiets.
Resultaten: 5) Prijs vs Retracement, Target en L1/W0 op verschillende resoluties (ZZDev)Hier zien we een uitbreiding naar een iets complexere beweging, namelijk een patroon van drie golfjes. Wat ik hier eigenlijk probeer te testen is een bekend principe uit de technische analyse, namelijk of de diepte van een correctie iets zegt over de kans op voortzetting van de beweging.
Je zou hier verwachten dat lage waarden van L1/W0 (dus een ondiepe correctie) vaker leidt tot een voortzetting van de beweging in de richting van W0 (en dus ook van L2).
Fig 11: N-WaveOok hier zie ik vooralsnog geen duidelijk en consistent resultaat.
ConclusieOp de eerste test (Prijs vs Retracement en Target) zie ik iets wat zo op het eerste gezicht niet random lijkt, met name op USDJPY maar ook op andere valutaparen zie ik dit patroon. Het suggereert dat je beter kunt speculeren op het breken van een weerstand/ steun dan op de handhaving daarvan. Tevens suggereert het dat traden op uitbraken werkt.
Of dit echt is of dat we naar een vals effect zitten te kijken van de testmethode (bijv kwantisatie effecten) daar is verder onderzoek voor nodig. Als het echt is dan is de edge waarschijnlijk nog steeds te klein voor een op zichzelf staande trading strategie maar wellicht is het de moeite waard om ernaar te kijken binnen een ruimere context.
Op de overige relaties zie ik weinig consistentie. Dit trekt wat mij betreft de werking van complexere patronen ernstig in twijfel.
Door de veelheid aan parameters en variaties is het echter goed mogelijk dat er in deze plaatjes juweeltjes zitten verborgen die ons recht in ons gezicht staren maar waar ik nu domweg overheen kijk. Maar het harde werk is al gedaan en nu ligt de data ligt voor ons in de vorm van deze plaatjes. Ik nodig iedereen uit om er met een kritisch oog naar te kijken!