Bonjour,
Ce week-end, j’ai placé un système contenant ce bout de code :
If c1 And Not (OnMarket Or DayOfWeek=0 And Hour>=22 and Minute>=00 Or DayOfWeek=1 And Hour<06 and Minute>=00 Or DayOfWeek=5 And Hour>=22 and Minute>=00) Then ...
J’espérais ainsi que le système ne rentre pas en position le dimanche soir dès 22h00 ou le lundi jusqu’à 05h59 ou le vendredi soir dès 22h00.
Mais à ma grande surprise, le système a ouvert une position ce lundi à 00:00:01.
Avez-vous une idée pourquoi ?
Et comment y remédier ?
Merci et bonne journée,
Claudio
Possible qu’il y ait d’autres bugs, mais la première chose qui vient à l’esprit en lisant cette ligne de code est la possibilité de parenthèses manquantes dans la condition not( … and… or… and… or…) à tester avec une structure de prenthèses: not(… or (…and…) or (…and…) or (…and…))
Merci pour la suggestion. Malheureusement, cela ne fonctionne toujours pas.
Une autre idée ?
Chose suivante une fois les parenthèses corrigées, dans le cas d’un actif côté h24 (cfd par exemple), ce qui semble être le cas si on parle de position à minuit 1, sans savoir quel timeframe a été utilisé, opendayofweek (jour de la semaine à l’ouverture de la bougie) sera souvent un meilleur choix que dayofweek (jour de la semaine à la cloture de la bougie). Eventuellement se servir de la fonction “GRAPH” en fin de code pour visualiser dans le backtest combien valent dayofweek et opendayofweek entre minuit et 1h du matin la nuit de dimanche à lundi, ou pendant toute autre plage horaire ou aucun ordre n’est désiré, pour constater la différence (le mot-clé Graph est un must à connaitre pour visualiser les valeurs en débuguant les stratégies).
Essayez le premier ou le deuxième exemple (ils devraient donner le même résultat):
// ------ premier exemple
//
// If c1 And Not OnMarket and
// not (
// (DayOfWeek=0) Or
// (DayOfWeek=1 And Hour<6) Or
// (DayOfWeek=5 And Hour>=22)
// )
// Then
If c1 And Not OnMarket and not ((DayOfWeek=0) Or (DayOfWeek=1 And Hour<6) Or (DayOfWeek=5 And Hour>=22)) Then
buy at market
// ------ deuxième exemple
//
c2 = DayOfWeek=0
c3 = DayOfWeek=1 And Hour<6
c4 = DayOfWeek=5 And Hour>=22
//
// If c1 And Not OnMarket and
// not (
// c2 Or
// c3 Or
// c4
// )
// Then
If c1 And Not OnMarket and not (c2 or c3 Or c4) Then
Merci beaucoup Roberto, cela fonctionne parfaitement.