Debug backtest avant passage en prod

Forum sur le trading automatique et algorithmique : systèmes, backtests, robots de trading, résultats et limites, code à l'appui.
Avatar du membre
X@vi3r
Membre du Conseil Jedi
Messages : 8068
Enregistré le : 26 avr. 2021 14:13

Re: Debug backtest avant passage en prod

Message non lu par X@vi3r »

Je me ballade dans le coin, j'arrive un peu tard :lol:

Pas de pb non plus pour faire du manuel en meme temps que l'auto ;)

Et pour le GRAPH :top:
En revanche déçu de voir que ça n'est pas possible en proorder, j'ai justement un decalage d'entré et sortie entre backtest et reel...
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

Je relance un peu la file, car j'ai eu (enfin) le temps de faire du Trapise73 sur un algo.

Je décris la méthode et vous corrigez svp.

J'ai fait un premier backtest avec des idées assez simple de signal.
Signaux d'entrées sont : Un corps de bougie > à 75% du True-range; un True-Range 1,8x plus élevé que la EMA(7) appliqué au True-Range (vous me suivez toujours ?).
Dit autrement faut une bougie avec un coprs très grand et une bougie très "grande" par rapport à la volat du moment.

J'ai limité les trades sur la session cash US, avec une permière appxoimation entre 14h30 et 22h00 (flatbefore et flatafter).
Un seul lot par trade, pas de cumulative trade.

ensuite j'ai rajouté un TP fixe, pas de SL. (Peu importe c'est pour une premier jet).

C'est là que commence le travail de recherche et d'amélioration :
J'ai fait tourné sur différentes UT (4H, 1H, 30m, 15min, 2min 10s) avec le maximum de jeu de donnée.
Je vous les quelques "tours" pour arriver à un premier affinement : TP2, UT2, Bougie >75% et facteur de 1,8 entre TR et EMA(7)[TR] semblent avoir de très bon candidats.
A ce stade je suis très loin des 100% de trade gagnant mais j'ai un premier setup à explorer.

Et là je commence à faire du trapiste73 (en tout cas j'essaye).
J'essaye d'optimiser les variables une par une.
Puis je scrole dans le backtest pour regarder si il y a des facteurs commun aux "grosses" pertes et ou aux drawdown.

Et là plusieurs bingo :
Un j'élimine les jours fériés (fermé aux USA), deux j'élimine les semaine type noël. Hop grosse amélioration.

Re-bingo.

Pas la peine d'attendre 22h00, suffit de couper à 18h00 et déjà on élimine 75% de mauvais trade.
"
Puis re-re- bingo, en faisant tourner l'optimisation sur le "temps de présence sur le marché". Je coupe le ticket si il est toujours vivant après x bougie.

Et là j'arrive à un backtest qui est très proche des 100%, avec un profit factor de 3.

Je vous poste le code initial et le code affiné après mes réunions pour voir si j'ai fait trop ou pas d'optimisation dans la recherche du bon algo.
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

Mince j'avais oublié que PRT ne gère pas d'historique de version.

Bon en résumé je vous met la version finale.
J'ai mis les commentaires de chaque "bloc" de code.

J'ai fait tourner sur NDX en UT2 avec 200K bougies d'historique, et spread à 1point.

Code : #

defparam Flatbefore=143000
defparam Flatafter=220000

once tp=2
once duree = 15
once triger = 75
once multiplicateur = 1.8
once evalpos=1

// Eval décalage heure Hiover/Eté USA/EU
openingbell = 153000
closingbell = 180000
flatafterebell = 220000
decalage = 0
if (month = 3) then
if (Day > 10) and (day < 32) then
decalage = 1
endif
elsif (month = 10)then
if (day > 29) and (day < 32) then
decalage = 1
endif
elsif (month =11) then
if (day > 0) and (day < 5) then
decalage = 1
endif
endif
if decalage then
openingbell = 143000
closingbell = 170000
flatafterebell = 210000
endif

if (time >= openingbell) then
opentrade = 1
else
opentrade = 0
endif

if (time >= closingbell) then
closetrade = 0
else
closetrade = 1
endif

//Eval jour férié USA
if (date = 20240219) or (date = 20240115) or (date = 20240527) or (date = 20240326) or (date = 20230102) or (date = 20230116) or (date = 20230220) or (date = 20230407) or (date = 20230529) or (date = 20230619) or (date = 20230704) or (date = 20230904) or (date = 20231123) or (date = 20231124) or (date = 20231225) or (date = 20231229) or (date = 20231226) or (date = 20231227) or (date = 20231228) or (date = 20231229) then
daytrade = 0
else
daytrade = 1
endif

//Sens de la bougie
vert = close > Open
rouge = Close < Open

//pourcentage taille corps
corps = abs(close-open)
truerange = abs(high-low)
p = 100*corps/truerange
percentagecorps = p > triger

//Facteur de taille de la bougie
atr = AverageTrueRange[1](close)
ema = ExponentialAverage[7](atr) * multiplicateur
grandebougie = atr > ema


buylong = daytrade and  opentrade and closetrade and vert and percentagecorps and grandebougie
short = daytrade and opentrade and closetrade and rouge and percentagecorps and grandebougie
// Conditions pour ouvrir une position acheteuse
IF NOT LongOnMarket AND buylong THEN
BUY evalpos CONTRACTS AT MARKET
SET TARGET PPROFIT tp
ENDIF

IF NOT Shortonmarket and short then
sellshort evalpos contracts at market
SET TARGET PPROFIT tp
endif

// Stops et objectifs : entrez vos stops et vos objectifs ici
IF OnMarket and (time >= flatafterebell) THEN
sell evalpos contracts at market
exitshort evalpos contract at market
ENDIF

//coupe si trade dure plus de bar (200minutes en UT2)
if OnMarket and ((barindex - tradeindex) > duree) then
sell evalpos contracts at market
exitshort evalpos contract at market
endif
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

et je n'ai pas fait de MTF ;-)
Avatar du membre
trappiste73
Membre du Conseil Jedi
Messages : 5208
Enregistré le : 08 déc. 2016 11:38

Re: Debug backtest avant passage en prod

Message non lu par trappiste73 »

:bravo:
Avatar du membre
trappiste73
Membre du Conseil Jedi
Messages : 5208
Enregistré le : 08 déc. 2016 11:38

Re: Debug backtest avant passage en prod

Message non lu par trappiste73 »

Et oui de faire variable par variable, c'est une des clés. On peut comprendre ce qui se passe dans le backtest. Après, en fin d'analyse, pourquoi pas repasser par 2 variables à la fois, pour réouvrir le champs des possibles.

Dès que j'aurai un peu de temps, début juin j'espère, je vais le travailler sur l'unité 10s et je te dirai si, et dans ce cas comment, j'ai réussi à trouver quelque chose. ;)
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

J'suis en plein dans le 10s, avec pour objectif, un maximum de trade et un mode "mitraillette", sinon ça ne sert à rien.

Tjrs pas de MTF, ça viendra ;-)
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

Mais en un mot (comme en plusieurs) c'est la méthode qui est le plus important pour pouvoir suivre le chemin.

Merci pour tout.
Avatar du membre
trappiste73
Membre du Conseil Jedi
Messages : 5208
Enregistré le : 08 déc. 2016 11:38

Re: Debug backtest avant passage en prod

Message non lu par trappiste73 »

bah ... :bravo: ;)
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

Grrr le 10s me donne vraiment du fil à tordre.

Pourtant je suis sur que c'est là qu'il y a le plus de potentiel pour un robot scalpeur.

Seul bémol avec 200K bougie on a à peine un mois d'historique. Quelle confiance accorder à ce genre de backtest pour une mise en prod ?
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

Autre constat "amusant" : la première partie de séance étant toujours la plus volatile c'est là où mes essais d'hier et aujourd'hui on le mieux performé. Après 18h00 ça ne donne plus grand chose.
Avatar du membre
trappiste73
Membre du Conseil Jedi
Messages : 5208
Enregistré le : 08 déc. 2016 11:38

Re: Debug backtest avant passage en prod

Message non lu par trappiste73 »

Ah oui, chez prt : 1 million.

Sur les restrictions horaires, je ne suis pas fan : ça ressemble à de la sur optimisation. À part jours fériés et week-ends bien sûr.
Avatar du membre
kelly
Maître Jedi
Messages : 4956
Enregistré le : 17 mai 2016 16:43

Re: Debug backtest avant passage en prod

Message non lu par kelly »

Temps ultra-courts : rarement trouvé de systèmes performants à terme. Au mieux du 5 ou 15 minutes et c'est ce que je retrouve en lisant les habitués de PRT. Il y'a sans doute une raison vu les cadors qui en causent.
Ca ne veut pas dire que c'est impossible mais on doit sans doute trop chargé en degré de liberté : j'ai remarqué que plus tu diminues le recours aux MM, indics,trucs avec calculs etc et plus les scores sont corrects.
donc résultats en UT courtes = f("complexité" calculs) ?
Et peut être tout simplement que le langage de PRT n'est pas adapté pour.
Simple avis.
Avatar du membre
kelly
Maître Jedi
Messages : 4956
Enregistré le : 17 mai 2016 16:43

Re: Debug backtest avant passage en prod

Message non lu par kelly »

@trappiste : 100% OK pour les horaires , faut faire le plus standard possible. D'autant que plus tu mets des restrictions , plus il est difficile d'analyser les résultats.
Parfois le mieux est l'ennemi du bien.
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

Ok pour vos remarques.

Je suis quand même surpris par le "pas fan" des restrictions horaires. C'est pourtant en suivant le chemin et comprendre comment éliminer chaque perte que j'en suis arrivé là, une simple remarque que presque tous les trades perdants était après 18h00 sur le premier algo publié.

Je vais allez méditer tout ça avec mon ami petitbambou (c) ;-)
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

@kelly, quand tu parles des cadors de prt, tu fais allusions aux forum prorealcode ?
Avatar du membre
trappiste73
Membre du Conseil Jedi
Messages : 5208
Enregistré le : 08 déc. 2016 11:38

Re: Debug backtest avant passage en prod

Message non lu par trappiste73 »

Moi je crois ce que je vois : le 1s et le 10s sont mes 2 ut préférées. Et aucun algo au-delà de la minute. Attention, j’y suis arrivé en venant du 4h et très probablement, on ne peut pas faire l’économie du chemin … ;)
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

Avatar du membre
kelly
Maître Jedi
Messages : 4956
Enregistré le : 17 mai 2016 16:43

Re: Debug backtest avant passage en prod

Message non lu par kelly »

@falex :
- oui j'évoquais prorealcode mais il y'a des sites US qui causent du sujet avec d'autres programmes.
- pour les restrictions , je pensais aux multiples changements intraday entre autres : "tant entre 9.00 et 10.30 puis rien entre 10.31 et 12.30 etc....." va t en analyser après :hein:
Perso l'algo UT15 (en prod) tourne uniquement en cours de séance : donc limitation oui mais une seule (et puis si tu laisses hors séance , il faut modifier le spread selon, bref compliqué ). Le UT4H (timing long) tournait non stop y compris en overnight mais tests faits , vu la longueur de l'UT ça ne change quasi rien. donc 8.30 17.29.

ps : pas possible de voir la vidéo
Avatar du membre
falex
Le Gladiateur
Messages : 34275
Enregistré le : 12 févr. 2013 15:41

Re: Debug backtest avant passage en prod

Message non lu par falex »

Ah oui mince pour la vidéo ! C'était "on the road again" de Bernard Lavilliers.