Re-bonjour,
Merci pour la réponse, j’utilise je pense la bonne quantité d’unités sur le graphique. D’ailleurs cela peut jouer sur le comportement de ProBackTest mais cela n’a pas d’effet sur le ProOrder qui lui est en direct.
En effet, le paramètre ‘DEFPARAM PreLoadBars’ est très important pour le ProBackTest pour avoir assez d’information pour la première bougie de calcul de la date du début du BackTest. Et surtout cela est très important pour le ProOrder pour la même raison.
Comme mon problème sur le code de ma statégie apparait en ProOrder et non en ProBackTest pour une même action et pour une même période d’analyse, je me trompe peut-être, mais je suppose qu’il vient de cette problématique :
=> Dans ma liste d’action que je souhaite utiliser pour ma stratégie, j’ai quelques actions qui n’ont pas assez d’historique, non pas parce que le nombre de PreLoadBars chargées n’est pas assez suffisant mais plutôt à cause de l’inverse. L’action elle-même n’a pas assez d’historique par rapport au nombre de bougies préchargées et à mon nombre maximum d’incrément de la boucle.
Prenons par exemple, cette situation :
- Cas ok pour ProBackTest et ProOrder
- Action utilisée dans le ProBackTest et le ProOrder : marché NASDAQ ‘MU’ (micron technology), il y a largement plus que 2000 jours d’historiques disponible pour cette action
- Besoin de 2000 Jours d’historiques pour ma stratégie donc nombre de bougie dans le graphique 2000, nombre de bougies pré-chargées 2000, nombre d’incrément max dans la boucle ‘WHILE’ : 2000
- Lancement du ProBackTest pour la journée en cours (le BackTest est en “live”), tout comme le ProOrder
- TOUT SE PASSE BIEN
- Cas KO pour ProOrder et Ok pour ProBackTest
- Action utilisée dans le ProBackTest et le ProOrder : marché NYSE ‘DOCN’ (digitalocean), il n’y a pas 2000 jours d’historiques disponible pour cette action (première valeurs pour le 25 Mars 2021 soit aujourd’hui 1346 jours)
- Besoin des 1346 Jours d’historiques pour ma stratégie donc nombre de bougie dans le graphique 2000 et nombre de bougies pré-chargées 2000, nombre d’incrément max dans la boucle ‘WHILE’ : 2000
- Lancement du ProBackTest pour la journée en cours (le BackTest en en “live”), tout comme le ProOrder
- Pour le ProBackTest, la boucle while s’arrête avec l’incrément 1346 car pour l’incrément suivant DOPEN(1347) = n/d
- Pour le ProOrder, la boucle while crée une erreur car pour l’incrément juste après la dernière valeur de l’action (jour 1346 correspondant au 25 Mars 2021) la variable DOPEN(1347) renvoie une erreur et non ‘n/d’ => le fameux message pas assez d’historique pour calculer une variable apparait.
- CONSEQUENCE : pas de pb sur le backtest et par contre ProOrder qui s’arrête dès le début du lancement du ProOrder pour l’action ‘DOCN’.
Pour ma stratégie, je n’ai pas besoin de 2000 jours d’historique pour chaque action, si l’action n’a pas de cotation au bout de 1346 jours c’est ok pour mes calculs de plus haut et plus bas ainsi que les supports et résistances principaux sur cette période.
Par contre c’est assez fastidieux de, tous les jours, regarder la quantité d’historique disponible pour chaque action pour lesquelles je souhaite lancer le ProOrder pour adapter le nombre d’incréments max de la boucle afin de ne pas déclencher l’erreur et avoir ma stratégie qui tourne sur l’action.
Pensez-vous qu’il y a une solution qui marche sans à avoir besoin d’adapter manuellement la valeur qui arrête la boucle ou devoir mettre une valeur faible pour être sur de ne pas avoir l’erreur ?
Voici le code pour simuler le comportement avec un indicateur dans un graphique d’unité de temps inférieur à 1 jour comme par exemple 1min. Ma stratégie étant sur une unité de temps 1min ou 10s.
joursAnalyse1MinMax = 0
plusBasHistorique = DLow(1)
plusHautHistorique = DHigh(1)
WHILE DOpen(joursAnalyse1MinMax) > 0 AND joursAnalyse1MinMax <= 2000 DO
joursAnalyse1MinMax = joursAnalyse1MinMax + 1
IF DHigh(joursAnalyse1MinMax) > plusHautHistorique THEN
plusHautHistorique = DHigh(joursAnalyse1MinMax)
ENDIF
IF DLow(joursAnalyse1MinMax) < plusBasHistorique THEN
plusBasHistorique = DLow(joursAnalyse1MinMax)
ENDIF
WEND
PRINT joursAnalyse1MinMax
PRINT DOpen(joursAnalyse1MinMax - 1)
PRINT DOpen(joursAnalyse1MinMax)
return plusBasHistorique, plusHautHistorique
Merci pour ‘vo- trade’ 😉