Bein alors non.
C’est bien cette partie:
if strategyprofit <> strategyprofit[1] then
if positionperf(1) >= 0 then //si dernière position perdante
nblot = nblot + 0.2 //alors on incrémente la quantité de perte
else //si elle est positive
nblot = 1.2 //alors le compte est remis à zéro
endif
endif
Quand je commente j’ai le même résultat peu importe le TF.
Si je décommente, les résultats sont différents. Pourquoi ?
J’ai entouré en rouge quelques différences au niveau des positions.
Uniquement entre 1 min et 5 min puisque 15 min ne ressemble pas du tout à cela.
Tout simplement parce que tu recalcules ta taille de position à chaque lecture de code et peu importe si tu entres en position ou pas ! D’où un incrément qui continue sans cesse si ton profit a augmenté. Ce genre de calcul de taille de lot devrait être placé juste avant l’entrée en position, dans le bloc conditionnel qui va déclencher celle-ci.
Ah ok merci, je vais corriger tout cela 😉
Comme ça ?
defparam cumulateorders=false
timeframe(15 minutes,updateonclose)
TimeTrade = TIME > 090000 AND TIME < 171500
indicator1 = Average[7](close)
indicator2 = Average[15](close)
ONCE nblot = 1.2
CA1 = indicator1 CROSSES OVER indicator2
if TimeTrade AND CA1 then
// Modifier quantite en fonction des gains
if strategyprofit <> strategyprofit[1] then
if positionperf(1) >= 0 then //si dernière position perdante
nblot = nblot + 0.2 //alors on incrémente la quantité de perte
else //si elle est positive
nblot = 1.2 //alors le compte est remis à zéro
endif
endif
BUY nblot SHARES AT MARKET
endif
timeframe(5 minutes,updateonclose)
CA2 = indicator1 CROSSES UNDER indicator2
IF CA2 THEN
SELL AT MARKET
ENDIF
timeframe(15 minutes,updateonclose)
set stop ploss 15
Je crois pas parce que ça ne fonctionne pas…
Je n’arrive pas à comprendre à quel endroit j’ai fait une erreur. ca doit être trop simple 🙂
A la ligne 11, ajouter une condition pour tester que l’on est pas au marché (NOT ONMARKET) sinon le code sera lu et l’incrément effectué, même si on ouvre pas d’ordre grace au cumulateorders=false.
Merci de la réponse Nicolas, mais ça ne fonctionne toujours pas:
defparam cumulateorders=false
timeframe(15 minutes,updateonclose)
TimeTrade = TIME > 090000 AND TIME < 171500
indicator1 = Average[7](close)
indicator2 = Average[15](close)
ONCE nblot = 1.2
CA1 = indicator1 CROSSES OVER indicator2
if TimeTrade AND CA1 AND NOT ONMARKET then
//Modifier quantite en fonction des gains
if strategyprofit <> strategyprofit[1] then
if positionperf(1) >= 0 then //si dernière position perdante
nblot = nblot + 0.2 //alors on incrémente la quantité de perte
else //si elle est positive
nblot = 1.2 //alors le compte est remis à zéro
endif
endif
BUY nblot SHARES AT MARKET
endif
timeframe(5 minutes,updateonclose)
CA2 = indicator1 CROSSES UNDER indicator2
IF CA2 THEN
SELL AT MARKET
ENDIF
timeframe(15 minutes,updateonclose)
set stop ploss 15
En 5 min les gains sont négatifs et en 1 min ils sont positifs. Or le résultat devrait être identique…
Une autre idée svp ?
La quantité d’ordres est différente, la date de début des backtests est-elle exactement la même ? (sur le graphique pas dans les paramètres de ProBacktest).
Bonjour Nicolas,
Oui le début est exactement à la même date sur les graphiques.
Et en changeant d’ordinateur je reproduit exactement la même erreur.
Je ne comprends pas cette erreur et ça me bloque pour la suite de mes tests.
J’ai cherché d’autres code multi frame avec des stratégies pour comparer mais j’ai pas trouvé.
As-tu la même chose si tu lances mon code chez toi ?
Changer d’ordinateur ne changera rien aux résultats des backtests, ceux-ci sont exécutés côté serveur.
J’ai exactement les mêmes résultats si je spécifie bien la même date et heure de début en 1-minute ou en UT 5-minutes, en v11.
Les mêmes résultats que moi ou bien les mêmes résultats en 1min et en 5min ?
car moi les résultats n’ont rien à voir.
je fais mes tests en version live IG.
Sur ma dernière capture d’écran on voit bien que les dates de début et fin sont identiques .
Encore un autre test de réalisé… les 2 résultats n’ont absolument rien à voir…
Même date de début et même date de fin. Revoici mon code:
defparam cumulateorders=false
timeframe(15 minutes,updateonclose)
TimeTrade = TIME > 090000 AND TIME < 171500
indicator1 = Average[7](close)
indicator2 = Average[15](close)
ONCE nblot = 1.2
CA1 = indicator1 CROSSES OVER indicator2
if TimeTrade AND CA1 AND NOT ONMARKET then
// Modifier quantite en fonction des gains
if strategyprofit <> strategyprofit[1] then
if positionperf(1) >= 0 then //si dernière position perdante
nblot = nblot + 0.2 //alors on incrémente la quantité de perte
else //si elle est positive
nblot = 1.2 //alors le compte est remis à zéro
endif
endif
BUY nblot SHARES AT MARKET
endif
timeframe(5 minutes,updateonclose)
CA2 = indicator1 CROSSES UNDER indicator2
IF CA2 THEN
SELL AT MARKET
ENDIF
timeframe(15 minutes,updateonclose)
set stop ploss 15
Je comprends pas pourquoi… Les résultats n’ont absolument rien à voir y a qu’à voir les graphiques.