Bonjour,
La stratégie que j’utilise en manuel consiste à prendre une position d’achat au moment où le prix casse la MM50 à la hausse et la fermer au moment où il casse à la baisse la MM50. Or, ProOrder va toujours exécuter mon code à la clôture de la bougie et donc placer un ordre sur un prix déjà loooin de la MM50. Pour palier à ça je me suis dit que j’allais utiliser le MTF pour utiliser l’UT M1 mais faire en sorte que mon programme s’exécute toutes les secondes afin d’avoir plus de réactivité.
Ci-dessous la partie du programme avec ouverture/fermeture dans le cas où la MM50 est à la hausse :
// UT d’une minute
timeframe (default)
c1 = summation[4](mm50 > mm50[1]) = 4 and summation[4](mm200 > mm200[1]) = 4
buyc = mm50>mm200 and close crosses over mm50 and c1 and c3 and c5
// la condition de fermeture et d’ouverture qui devrait se mettre à jour chaque seconde afin que le prix soit au plus proche de la MM50
timeframe (1 second)
if longonmarket and close crosses under mm50 then
sell at market
endif
if not onmarket and buyc then
buy taille contract at market
endif
Mais voici le message d’erreur que j’obtiens :
“Toutes les unités de temps appelées dans le code doivent être des multiples de l’unité de temps dans laquelle vous exécutez votre stratégie.”
(A noter que si j’utilise l’UT M1 pour exécuter le programme et l’UT M5 comme condition ça ne résout pas le problème d’écart entre le prix d’ouverture et de fermeture, ça l’aggrave même certaines fois)
Si quelqu’un avait la solution pour ouvrir une position pile au croisement à la hausse et fermer pile au croisement à la baisse (sans la commande TIMEFRAME), ou si quelqu’un sait pourquoi 1 seconde n’est pas un multiple de 60 seconde (avec la commande TIMEFRAME), je suis plus que preneur.
Merci à vous.
Ci-joint un exemple pour illustrer le décalage entre le trading manuel et ProBacktest ou ProOrder
Je pense qu’il faut écrire : au lieu de Timeframe (par défaut) doit être Timeframe (1minute, updateonclose) et plutôt Timeframe(1second) doit être timeframe(default). Et puis commencez dans le graphique 1 seconde.
En effet, il faut toujours lancer la stratégie dans le timeframe le plus petit déclaré (ou celui “default” qui signifie l’UT actuelle du graphique).
Tout d’abord merci pour vos réponses, effectivement il faut lancer le graphique dans la plus petite UT pour ne pas avoir d’erreur. Maintenant si je veux un backtest sur plusieurs jours il me faut 60x plus de temps de calcul, c’est le gros revers de la médaille.
J’ai passé la journée à peaufiner mon programme avec ces nouveaux paramètres mais les résultats me laissent perplexes. Ma démarche était elle la bonne ou vous voyez une autre solution pour fermer une position juste au croisement du prix et d’un indicateur ?
Mais si le programme se lance à chaque fermeture de bougie, si le prix traverse l’indicateur au milieu de l’UT (par exemple sur une UT H1 il traverse au bout de 30 mins) le programme ne sera pas en fonctionnement.