- Elle peut être sur-optimiser sur les données de tests
- Le comportement du marché peut avoir changer au moment de la mise en réel vs la période de test
- Il peu rester des bugs lié a des situations non vu en test qui peuvent la faire dérailler
- Même si la stratégie est profitable un temps, elle peut ne plus être adaptée au comportement de marché après quelques temps d'utilisation.
- La stratégie peut être profitable sur certaines phase de marché, et pas sur d'autres, sans qu'on ai trouvé un filtre permettant de supprimer les trades des périodes non profitable.
Pour toutes ces raisons, j'ai chercher un système de sécurité permettant de limiter la casse si l'un de ses événement arrive.
Et j'ai fini par mettre au point un système assez efficace de contrôle du drawdown sans trop impacter les performances de la stratégie.
Ce système est assez complexe à mettre en oeuvre dans la mesure ou quand il s'active, il faut pouvoir simuler les ordres pour calculer de statistiques, ce qui n'est pas forcement faisable sur toutes les plateformes, je précise que je programme sur NinjaTrader 7 (bientôt 8) en C#, et que par ce langage, il n'y a pas de limite à la complexité de ce que l'on peu programmer, NinjaTrader permettant de charger des DLL externe pour ajouter des interfaces/API/fonctionnalités.
J'ai donc écrit un simulateur d'ordre qui permet de gérer les entrée en position suivant les différent type d'ordre, les stop lost, stop suiveur et objectifs, et permet de savoir si un ordre (non prit) aurait été gagnant ou perdant, et de combien, de la même façon que si il avait été prit en réel (au différences de filling prêt), le résultats étant assez précis par rapport à l'objectif.
Ensuite la stratégie a des variables qui indique la perte maximummum avant d’enclencher le système, ainsi que d'autres variables indiquées plus bas.
Quand la perte MAX est atteinte => le système s'active, les ordres de la stratégie sont alors prit en simulation.
Le système calcul les drawdown courant, max et de combien on à remonté vs le DD max.
Quand le DD a été remonté d'une valeur RecoveryMini (pas la totalité du drawdown, enfin par forcement), alors les trades repassent en réel, et on autorise un dépassement du Max d'un DDIncrement, qui devient le nouveau DD MAX.
Si la stratégie échoue et atteins de nouveau le nouveau DD Max, on repasse ne simulation, le Recovery nécessaire pour redémarrer en réel augmente d'un incrément et on recommence le process.
Si la stratégie remonte tout le drawdown, alors les valeurs des DDMAX, incrément etc repasse aux valeurs initiales.
Ce système permet:
- Chaque fois que la stratégie échoue à redémarrer et touche sont DDMAX courant, la quantité de recovery (gain) a faire augmente, donc une stratégie qui n'arrive pas a remonter son DD et s'enfonce fini par en plus fonctionner qu'en simulation, car il est de plus en plus difficile pour la stratégie de repasser en réel.
Si la stratégie bug et encaisse des pertes a cause de ces bugs, elle ne fonctionne assez rapidement qu'en simulation.
Si une stratégie gagne pendant certaine période et perds pendant, d'autre, elle peu devenir rentable grâce a se système qui va limiter les pertes.
Sur une stratégie gagnant environ 12000$ en trois mois (600 trades) avec un DD MAX de 4000$, ce système a permis de conserver 10500$ de gains, avec une réduction du drawdown à 1200$, ceci avec des paramètres de DDMAX Initiaux/Seuils de recovery, incrément de drawdown de 400/400/400.
Il m'a aussi permis de rendre rentable des stratégie qui ont des période de gains et des période de pertes suivant le marchés, sans que je ne trouve de critère permettant de gérer les périodes de pertes au niveau de la stratégie.
Je suis bien conscient que cela est assez complexe, pas réalisable dans toutes les plateformes. En Contrepartie, couplé a un bon monnaie management, ce système est redoutable d'efficacité.
Qu'en pensez-vous, d'autres ont-ils mis en place un système similaire de contrôle des pertes ? et de qu'elle façon ?
Je suis intéresse par l’échange d’expérience et idée autour de ce thème.