Bonjour,
J’ai un code qui fonctionne bien en UT 5 minutes et que j’aimerais transférer en UT 1 min pour rajouter des conditions de fermeture d’ordre en 1 minute (les différents timeframes utilisés devant être des multiples de l’UT utilisées pour la stratégie)
La stratégie est basée sur un break out du plus haut atteint le matin entre 8h00 et 9h25 sur le Dax (1 seul ordre par jour)
Ma question est: quand je transfère mon code en UT 1 min en rajoutant l’indication du timeframe, je n’obtiens pas du tout le même nombre d’ordres passés. Voir le code ci-joint. J’aimerais conserver les conditions d’achat en UT 5 min.
J’obtiens 71 ordres passés en UT 5 min sur les 5 derniers mois, contre 3 ordres seulement quand j’utilise le même code en UT 1 min avec indication du timeframe.
Je n’arrive pas à comprendre pourquoi.
// Définition des paramètres du code
DEFPARAM CumulateOrders = False // Cumul des positions désactivé
// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position avant l'heure spécifiée
noEntryBeforeTime = 092500
timeEnterBefore = time >= noEntryBeforeTime
// Empêche le système de placer des ordres pour entrer sur le marché ou augmenter la taille d'une position après l'heure spécifiée
noEntryAfterTime = 213000
timeEnterAfter = time < noEntryAfterTime
// Empêche le système de placer de nouveaux ordres sur les jours de la semaine spécifiés
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
// Conditions pour ouvrir une position acheteuse
timeframe(5 minute, updateonclose)
if time = 092500 then
Maxbox = highest[17](High)
endif
Jour = barindex - intradaybarindex
if tradeindex(1) < Jour then
achat = 1
elsif tradeindex(1) >= Jour then
achat = 0
endif
if close > maxbox and timeEnterBefore and timeEnterAfter and not daysForbiddenEntry and achat = 1 THEN
BUY 2 CONTRACT AT market
endif
// Stops et objectifs
nb = barindex - tradeindex
maxprice = highest[nb+1](High)
trailingstop = 25
StopdistanceBreakeven = 22
if not onmarket then
MAXPRICE = 0
priceexit = 0
endif
If longonmarket then
priceexit = maxprice - trailingstop
endif
if longonmarket then
If maxprice >= tradeprice + StopdistanceBreakeven and maxprice < tradeprice + trailingstop then
sell at tradeprice stop
elsif maxprice >= tradeprice + trailingstop then
sell at priceexit stop
endif
endif
set target pprofit 77
SET STOP pLOSS 68
Auriez-vous une explication?
Merci!
Pour débugger sous ProBacktest, il faut utiliser l’instruction GRAPH :
graph close > maxbox and timeEnterBefore and timeEnterAfter and not daysForbiddenEntry and achat = 1
ici je graph la condition qui lance un ordre au marché dans la stratégie, on constate qu’il n’y a en effet que peu d’ordres en timeframe 1 minute (voir image).
Une des variables booléennes de cette chaîne conditionnelle doit bloquer la condition complète. Je te rejoins dans le fait que cette différence notable est incohérente à première vue. Je te laisse regarder qu’elle est la variable qui bloque en les graphant une à une (un peu de pédagogie 😉 )