Bonjour à tous,
Pour vous ce jour, j’ai choisi de vous montrer qu’il n’est pas toujours aisé (et même très difficile !) de mettre en place une stratégie efficace en automatique, même avec un indicateur simple.
Prenons l’exemple des points pivot.
En apparence, il s’agit d’un indicateur simple à coder (ce qui est vrai), et on devrait pouvoir réaliser des stratégies simples et efficaces avec.
Je vous en présente une.
Nous considérons le point pivot journalier, et le point pivot hebdomadaire.
Nous jouons les rebonds entre ces 2 points pivot.
En effet :
– si le cours est > PP hebdo et < PP journalier, on entre short au PP journalier
– si le cours est < PP hebdo et > PP journalier, on entre long au PP journalier
On entre donc avec un ordre « limit ».
take profit réduit : 6 pips.
stop loss 30 pips.
clôture des trades à 22 heures.
C’est tout.
Voici le code d’un premier BACKTEST :
Defparam cumulateorders = false n = 3 // POINT PIVOT HEBDOMADAIRE IF dayofweek < dayofweek[1] THEN weekhigh = prevweekhigh weeklow = prevweeklow weekclose = prevweekclose prevweekhigh = high prevweeklow = low ENDIF prevweekhigh = max(prevweekhigh, high) prevweeklow = min(prevweeklow, low) prevweekclose = close PPWeek = (weekhigh + weeklow + weekclose) / 3 // POINT PIVOT JOURNALIER IF dayofweek = 1 THEN dayhigh = DHigh(2) daylow = DLow(2) dayclose = DClose(2) ENDIF IF dayofweek >=2 and dayofweek < 6 THEN dayhigh = DHigh(1) daylow = DLow(1) dayclose = DClose(1) ENDIF PPDay = (dayhigh + daylow + dayclose) / 3 Ctime = time >= 070000 and time <= 180000 IF Ctime and PPDay > PPWeek and close < PPDay and not shortonmarket THEN sellshort n shares at PPDay limit ENDIF IF Ctime and PPDay < PPWeek and close > PPDay and not longonmarket THEN buy n shares at PPDay limit ENDIF set target profit 0.0006 IF time >= 200000 or time < 070000 THEN sell at market exitshort at market ENDIF
Voici le résultat du backtest
(avec spread de 1.2 point, pour la paire EUR/USD) :
En apparence, la stratégie paraît « parfaite », effectivement.
Lorsque vous observez une telle courbe « flawless, trop parfaite », vous devez immédiatement penser qu’il y a anguille sous roche !!
En effet, si vous regardez de plus près, le backtest n’est pas fiable.
En effet, sur certaines bougies, le stop loss et le take profit sont touchés en même temps.
Ou alors, le take profit est touché alors que la bougie est en sens contraire !
Et pour l’instant ProRealTime ne peut déterminer si le SL ou le TP est touché avant, ou même si le sens de la bougie est inapproprié, il compte donc toujours le take profit.
Voici un exemple : qui me dit que sur ce trade à l’achat le take profit aurait été touché, étant donné que la bougie est orientée vers le mauvais sens
Donc le résultat du backtest est complètement faussé !!
Pour ne pas le fausser, nous allons mettre en route une autre condition.
On ne peut sorti de condition QUE après au moins une bougie suivant la bougie d’entrée.
Voici le code du BACKTEST :
(le code est le même, sauf au niveau de ce qui a été mis en rouge)
Defparam cumulateorders = false n = 3 // POINT PIVOT HEBDOMADAIRE IF dayofweek < dayofweek[1] THEN weekhigh = prevweekhigh weeklow = prevweeklow weekclose = prevweekclose prevweekhigh = high prevweeklow = low ENDIF prevweekhigh = max(prevweekhigh, high) prevweeklow = min(prevweeklow, low) prevweekclose = close PPWeek = (weekhigh + weeklow + weekclose) / 3 // POINT PIVOT JOURNALIER IF dayofweek = 1 THEN dayhigh = DHigh(2) daylow = DLow(2) dayclose = DClose(2) ENDIF IF dayofweek >=2 and dayofweek < 6 THEN dayhigh = DHigh(1) daylow = DLow(1) dayclose = DClose(1) ENDIF PPDay = (dayhigh + daylow + dayclose) / 3 Ctime = time >= 070000 and time <= 180000 IF Ctime and PPDay > PPWeek and close < PPDay and not shortonmarket THEN sellshort n shares at PPDay limit ENDIF IF Ctime and PPDay < PPWeek and close > PPDay and not longonmarket THEN buy n shares at PPDay limit ENDIF
IF onmarket and barindex - tradeindex >= 1 THEN exitshort at tradeprice - 0.0006 limit sell at tradeprice + 0.0006 limit ENDIF IF time >= 200000 or time < 070000 THEN sell at market exitshort at market ENDIF
Et voici le résultat :
Tout de suite, ça fait mal…
Le rêve s’est envolé bien vite !
Vous comprenez pourquoi il est si difficile de mettre en place une stratégie de day trading, sur des petites unités de temps…
C’est beaucoup plus facile sur les unités 4H ou Daily.
D’ailleurs mes propres algorithmes s’exécutent en graphiques journaliers ; et honnêtement je me demande on arrivera un jour à faire plus performant qu’eux, sur les petites unités de temps…
Car il ne faut pas non plus oublier le spread, qui a beaucoup plus d’impact sur les petites unités de temps.
CONCLUSION :
Vous observez ici un des exemples de difficultés qu’on peut avoir à mettre au point une stratégie de trading efficace.
Alors, de là à passer en automatique…
HEUREUSEMENT, mieux vaut backtester une stratégie auparavant, plutôt que de se lancer dedans à corps perdu, et d’y laisser toutes ses plumes… ou son porte-monnaie.
En tout cas, si vous pensez avoir des stratégies performantes à me soumettre, ou des idées intéressantes, n’hésitez pas à me contacter.
A bientôt,
MISE A JOUR du 20/11/17
L’article suivant vous montrera un exemple concret de backtest surestimé et faussé…
.
.
NOTE (2019)
A l’époque où j’ai écrit cet article, la possibilité de backtests en TICK PAR TICK n’existait pas.
Désormais c’est possible, et cela corrige les défauts de backtests.