Pour moi le temps varie assez peu avec les conditions, le plus gros est toujours de balayer les données ticks même si optimisé
Je fais tous mes backtests en python et au tick par tick,
Je monte ma base de donnée en mémoire vive ( je crée un dictionnaire avec le strict minimum d'information. mais je conseille 32 Go de ram pour les 5 années de ticks )
Récemment fait 4500 boucles sur 5 ans d'historiques au tick par tick. Environ 5 millions de trade. 560 milliards de tick lu. cela m'a pris 88 heures. Le processeur n'est plus vraiment important pour moi, j'ai un i7 7700k, mais c'est surtout ma ram qui fait le taff.
Donc en détail : 88 heures pour 4500 boucles, dont environ 1mn pour 1 boucle sur 5 ans, et pour être précis 14 secondes pour lire une année et simuler les trades.
Je monte ma base de donnée en mémoire vive ( je crée un dictionnaire avec le strict minimum d'information. mais je conseille 32 Go de ram pour les 5 années de ticks )
Récemment fait 4500 boucles sur 5 ans d'historiques au tick par tick. Environ 5 millions de trade. 560 milliards de tick lu. cela m'a pris 88 heures. Le processeur n'est plus vraiment important pour moi, j'ai un i7 7700k, mais c'est surtout ma ram qui fait le taff.
Donc en détail : 88 heures pour 4500 boucles, dont environ 1mn pour 1 boucle sur 5 ans, et pour être précis 14 secondes pour lire une année et simuler les trades.
A oui quand même ! 5* plus vite que moi , bien sur tout dépend du prog en lui même.
Tu parles sur un seul thread pas en parallèle ?
Tu parles sur un seul thread pas en parallèle ?
Les backtests c'est vraiment le cas d'école de la parallélisation. Typiquement j'ai toujours pour un set donné de x scénarion sur les y jours de tick testés. Je parallélise soit :
- au sein d'un même jour. Pratique si on veut vraiment voir un jour en particuliers
- actifs par actifs (je le fais plutot avec le Forex et les actions)
- le plus souvent : je fais un pool avec x y. Plus rapide
Jai un 7940x avec 64gb. Je parallélise en général sur 20 threads (20/28 maxi. Ne jamais le.faire à bloc c'est innefivient. Viser lax 90% de ratio). Ce qui me pompe le plus de ram ce sont plutot les tests sur actions car là les matrices sont vite énormes.
Jai aussi expérimenté la distribution des calculs sur plusieurs machines. Javais un serveur dédié 64 coeurs mais je n'en ai plus besoin donc vendu.
Les bonnes pratiques c'est vraiment calcul matriciel + parallele + éviter au maxi les boucles + mise en mémoire que tu strict minimum nécessaire (modulo contexte compléxité).
On me joindre via mon outil sur les PP mais le mieux c'est peut être de poser ta question ici. De toute façon je partage toujours les échanges que jai eu en off.
- au sein d'un même jour. Pratique si on veut vraiment voir un jour en particuliers
- actifs par actifs (je le fais plutot avec le Forex et les actions)
- le plus souvent : je fais un pool avec x y. Plus rapide
Jai un 7940x avec 64gb. Je parallélise en général sur 20 threads (20/28 maxi. Ne jamais le.faire à bloc c'est innefivient. Viser lax 90% de ratio). Ce qui me pompe le plus de ram ce sont plutot les tests sur actions car là les matrices sont vite énormes.
Jai aussi expérimenté la distribution des calculs sur plusieurs machines. Javais un serveur dédié 64 coeurs mais je n'en ai plus besoin donc vendu.
Les bonnes pratiques c'est vraiment calcul matriciel + parallele + éviter au maxi les boucles + mise en mémoire que tu strict minimum nécessaire (modulo contexte compléxité).
On me joindre via mon outil sur les PP mais le mieux c'est peut être de poser ta question ici. De toute façon je partage toujours les échanges que jai eu en off.
Moi j'ai un i7 6700, il commence à saturer à 5-6 thread , mais je trouve que c'est déjà incroyable de pouvoir parraleliser comme ça. C'est surtout moi qui ne suis pas bien organisé pour ça. Mais à quoi bon des matrices ???


Je pense que c'est très probablement possible en VB6 aussi. Soit nativement soit via des dll.
Prenons un exemple lambda avec disons 1 mois de tick dans une meme matrice (ça implique que tu scales tes séries, disons sur une ut 1 SEC pour simplifier).
Ensuite tu met un timer, et tu fais les calculs suivants
- cas 1 boucle classique : for i=1 to n, MaxDD(serie i)
- cas 2 matrice : MaxDD(directement sur ta matrice de i series)
Tu met un timer dans chaque cas.
Dans le cas 1, lalgo boucle en appelans la fonction max dd i fois. Dans le cas 2, lalgo appelle 1 seule fois la fonction max dd. Ce ne sera pas i fois plus rapide car le max dd (matrice globale) sera plus lent que pour une seule series. Mais tu va quand meme gagner beaucoup.
Tu peux prendre dautres exemples. Une fois que tu auras compris la logique et vu le gain démentiel, tu ne pourras plus t'en passer !
Prenons un exemple lambda avec disons 1 mois de tick dans une meme matrice (ça implique que tu scales tes séries, disons sur une ut 1 SEC pour simplifier).
Ensuite tu met un timer, et tu fais les calculs suivants
- cas 1 boucle classique : for i=1 to n, MaxDD(serie i)
- cas 2 matrice : MaxDD(directement sur ta matrice de i series)
Tu met un timer dans chaque cas.
Dans le cas 1, lalgo boucle en appelans la fonction max dd i fois. Dans le cas 2, lalgo appelle 1 seule fois la fonction max dd. Ce ne sera pas i fois plus rapide car le max dd (matrice globale) sera plus lent que pour une seule series. Mais tu va quand meme gagner beaucoup.
Tu peux prendre dautres exemples. Une fois que tu auras compris la logique et vu le gain démentiel, tu ne pourras plus t'en passer !
Tu peux faire des tests avec des cas beaucoup plus simples.
Désolé, je ne comprends pas pourquoi et comment les matrices..... Je réfléchis beaucoup à mon algo en testant des variations. C'est toujours des calculs en série itératives. Je devrais certainement automatiser le parallélisme.....
Attention tout n'est pas parallélisable. Dès linstant où tu commences à avoir des conditions etc.. tu es obligé de faire dans l'itératif et donc de boucler.
Un autre truc à faire cest un profiler de ton code. Lidée est de déterminer quest ce qui prends vraiment du temps dans tes calculs. Et ensuite de te focus là dessus pour rendre l'ensemble plus rapide.
Un autre truc à faire cest un profiler de ton code. Lidée est de déterminer quest ce qui prends vraiment du temps dans tes calculs. Et ensuite de te focus là dessus pour rendre l'ensemble plus rapide.
Autre bonne pratique : tous les calculs qui ne sont pas dépendants d'un scénario du BT doit être fait en amont. Ca parait évident pour certains mais c'est loin d'être le cas pour tous.
Bien sur, mais disons que j'arrive à tester chaque hypothèse assez rapidement (en quelques minutes- 20minutes) et donc en restant devant mon pc en faisant ou regardant autre chose…
Ce n'est pas tous les jours que je fais 3000 passes , sinon c'est que je reprends tout à zéro et même moins que zéro.
Là je vais faire des stats sur les délais d'open/sell réels mesurés en ticks pour les transposer et rendre plus réels mes backtests pour voir si ça change les résultats.
En même temps, j'ai du mal à digérer que ma strat actuelle (sur bollinger) marche bien sur le DAX (au moins sur le passé) et moins bien sur USD/JPY ou autres …. pourquoi ? faut il passer à chaque fois en revue toutes les valeurs, tous les indices pour se diversifier ?
Ce n'est pas tous les jours que je fais 3000 passes , sinon c'est que je reprends tout à zéro et même moins que zéro.
Là je vais faire des stats sur les délais d'open/sell réels mesurés en ticks pour les transposer et rendre plus réels mes backtests pour voir si ça change les résultats.
En même temps, j'ai du mal à digérer que ma strat actuelle (sur bollinger) marche bien sur le DAX (au moins sur le passé) et moins bien sur USD/JPY ou autres …. pourquoi ? faut il passer à chaque fois en revue toutes les valeurs, tous les indices pour se diversifier ?
Sujets similaires
Configuration PC avec une grande puissance de calcul
Fichier(s) joint(s) par ChefCuistot30 » 23 févr. 2016 10:44 (17 Réponses)
Fichier(s) joint(s) par ChefCuistot30 » 23 févr. 2016 10:44 (17 Réponses)
Tester votre rapidité au Scalping
Fichier(s) joint(s) par DarthTrader » 20 janv. 2016 12:25 (31 Réponses)
Fichier(s) joint(s) par DarthTrader » 20 janv. 2016 12:25 (31 Réponses)
Remarque rapidité rafraîchissement affichage du prix
Fichier(s) joint(s) par Richard » 04 févr. 2016 19:30 (4 Réponses)
Fichier(s) joint(s) par Richard » 04 févr. 2016 19:30 (4 Réponses)
Ameliorer la rapidite de ProRealTime
Fichier(s) joint(s) par Arnaud_vh » 12 avr. 2018 06:43 (9 Réponses)
Fichier(s) joint(s) par Arnaud_vh » 12 avr. 2018 06:43 (9 Réponses)
Rapidité de connexion internet mondial - Janvier 2021
Fichier(s) joint(s) par ChristelleP » 08 sept. 2021 14:10 (4 Réponses)
Fichier(s) joint(s) par ChristelleP » 08 sept. 2021 14:10 (4 Réponses)