Voici comment je procède pour ma part:
Prémisse: si un algo est structurellement gagnant, alors il devrait par définition toujours l'être, quelque soit l'espace temporel exploré.
Que je le lance le 1er février, ou le 17
mars ou le 21 juin etc d'une année n, il est en mesure de toujours sortir un résultat positif au bout d'un temps t (Plus t est court et meilleure est la perspective).
Il doit également être en mesure d'enchaîner des combinaisons variables de configurations (d'amplitude et fréquence également variables), telles que évolution sinusoidale, rampe, échelon, quasi droite etc
Cette dernière contrainte est en lien direct avec la notion de max DD . En effet, un algo sera plus efficace dans l'une ou l'autre de ces configurations et c'est l'enchaînement de configurations moins favorables qui créera le DD.
Pour moi, il me faut donc un système de test qui multiplie ces enchaînements, on pourrait faire une analogie partielle avec un système de Monte Carlo.
Comme un algo évolue toujours avec des contraintes de
volumes (nombre d'ordres, volume engagé max), en prenant le cas le plus simple on peut dire qu'à un temps t1 dans une configuration C1 un ordre O1 est pris et qu'il peut être en mesure d'empêcher de prendre à t2,C2 un ordre O2. OK?
C'est tout à fait similaire à ce que l'on voit sur les vidéos présentant les systèmes chaotiques (par exemple billard, cascades de Feigenbaum etc)
Ainsi les conditions initiales, donc le moment où le test est lancé peuvent avoir de l'importance sur le résultat (cela dépendra bien sûr des algos). Pas tellement sur le résultat sur une durée longue mais sur l'identification de Max DDs. Notre ennemi commun
Maintenant dans la pratique, il y a une façon très simple de mettre en oeuvre cela.
Il suffit donc de relancer l'algo à des dates aléatoires.
Pour se faire on peut tout simplement mettre en place un module qui coupe toutes les positions dès que l'equity a atteint une valeur X (X% de l'equity ou une valeur fixe de N euros). En faisant varier cette valeur lors de campagnes de tests on obtiendra des centaines de redémarrage de l'algo, à chaque fois différents pour chaque valeur de X). X doit être suffisamment grand pour valider que l'algo est bien profitable, mais pas trop non plus afin d'initier un nombre suffisant de redémarrage.
Cette façon de procéder est moins consommatrice de temps que de relancer manuellement et a l'avantage d'avoir un caractère aléatoire.
Sur ma file du robot imparfait, je vous montrerai pour l'illustrer les résultats d'une campagne en cours (dès que j'aurai suffisamment avancé pour montrer un set de résultats variés) et la façon dont je les lis.