Bonjour,
J’ai écrit le code suivant avec une stratégie sur le 5 minutes et l’application sur le 1 minutes. Je pense avoir tout fait comme dans les exemples, mais il semble que le robot prenne plusieurs ordres alors qu’il ne devrait en prendre qu’un …. et je ne trouve pas ce qui ne vas pas. Je l’ai testé sur une période ou il a fonctionné en live et le résultat de prise de position est totalement différent. Les prises de position devraient être les mêmes, il n’y a juste que la mise à BE qui devrait être différente … ou est ce que je me trompe ?
Merci d’avance pour votre aide.
// Définition des paramètres du code
DEFPARAM CumulateOrders = True // Cumul des positions activé
// Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 090000
// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 220000
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
//-------- Stratégie sur le 5 minutes --------
timeframe(5 minute, updateonclose)
//Définition de la pénétration ou de l'avalement d'une bougie
TBP = high[1]-low[1] // taille de la bougie précédente mèches comprises
PenetrationAchat = close > low[1]+1*TBP
PenetrationVente = close < high[1]-1*TBP
//Définition du RSI
RSIA = RSI[7](close)crosses over 70
RSIV = RSI[7](close)crosses under 30
//Définitions des MM
MM50 = average[50](close)
//Conditions pour un signal d'achat --------
ca1 = RSIA
ca2 = PenetrationAchat
ca3 = MM50 > MM50 [1]
Buycondition = ca1 and ca2 and ca3
//Conditions pour un signal de vente --------
cv1 = RSIV
cv2 = PenetrationVente
cv3 = MM50 < MM50 [1]
Sellcondition = cv1 and cv2 and cv3
//-------- Définition de l'unité de temps principale d'action pour la mise à Break Even
timeframe(1 minute, default)
//Définition du stop à BE (break-even)
startBEA = 12 //Nombre de point pour activer le stopBE
startBEV = 12
PointsToKeepA = 2 //Nombre de point de mise en place du stop par rapport au point d'entrée afin d'être stopé non pas à 0 mais un peu en postif
PointsToKeepV = 2
//-------- condition d'achat
if Buycondition and not daysForbiddenEntry then
buy 1 contract at market
SET STOP pLOSS 30
SET TARGET pPROFIT 30
endif
//On remet le niveau de mise à BE à 0 losque l'on n'est pas en position
if not onmarket then
breakeven=0
endif
//on regarde si le trade actuel à fait au moins x pips
if longonmarket and high-tradeprice>=startBEA then
breakeven=1
endif
//placer stoploss au prix d'entrée + x points
if breakeven=1 then
sell at tradeprice+PointsToKeepA stop
endif
//-------- Condition de vente
if Sellcondition and not daysForbiddenEntry then
sell 1 contract at market
SET STOP pLOSS 30
SET Target pProfit 30
endif
//On remet le niveau de mise à BE à 0 losque l'on n'est pas en position
if not onmarket then
breakeven=0
endif
//on regarde si le trade actuel à fait au moins x pips
if shortonmarket and tradeprice-low>=startBEV then
breakeven=1
endif
//placer stoploss au prix d'entrée + x points
if breakeven=1 then
buy at tradeprice+PointsToKeepV stop
endif
Plusieurs ordres en même temps ? Normal avec :
DEFPARAM CumulateOrders = True
Il faut interdire le cumul des positions en forçant à “false”.
Je n’ai pas testé la stratégie, mais pourquoi délocaliser la prise des ordres en dehors du timeframe qui les conditionne ? (lignes 55 à 59 et lignes 77 à 81).
Le MTF est utile pour déplacer ton stop rapidement à breakeven, sans attendre la fin d’une bougie M5, donc ne laisser uniquement que la gestion des ordres dans le timeframe le plus petit.
Pour mémoire, l’instruction SELL ferme une position acheteuse, et n’ouvre pas de position de VAD (vente à découvert), pour cela utiliser l’instruction SELLSHORT.
EDIT: merci de choisir un titre plus explicite la prochaine fois, sinon on va vite se retrouver avec plein de sujets “stratégie MTF” sur le forum ! 😉
Pour prendre une seule commande, vous devez mettre “FALSE” sur la ligne 2.
De plus, la stratégie est exécutée à la minute, les conditions d’achat et de vente sont donc valables pour 5 barres.
Si la stratégie atteint le SL ou le TP avant 5 barres, une autre opération peut également commencer. Si vous ne le souhaitez pas, vous devez mettre une variable dans le TF de 1 minute qui, lors de votre première entrée, en achat ou en vente, ou les deux à la fois, NE FAITES AUCUNE autre opération avant une nouvelle barre de 5 minutes ou jusqu’à une certaine heure, etc …
Nicolas, tu es trop rapide!
d’accord mais il arrivera ou sur le 5 minutes un deuxième signal sera donné alors que je serais encore en position avec le premier. Le fait de mettre False empêchera la prise de position de ce deuxième signal sur le 5 minutes non ?
Ce que je veux dire en fait c’est que là j’ai l’impression qu’il prend chaque croisement de la zone 70 du rsi dans une même bougie 5 minutes, et ça je ne veux pas. Je ne désire prendre qu’une position par signal 5 minutes. Mais je ne veux pas m’empêcher de prendre un deuxième signal 15 minutes plus tard si le premier trade est toujours en cours.
Ce que je veux dire en fait c’est que là j’ai l’impression qu’il prend chaque croisement de la zone 70 du rsi dans une même bougie 5 minutes, et ça je ne veux pas. Je ne désire prendre qu’une position par signal 5 minutes.
J’ai répondu à cette question. Merci de LIRE et d’attendre un peu que ça grimpe tout la haut 🙂
pourquoi délocaliser la prise des ordres en dehors du timeframe qui les conditionne ? (lignes 55 à 59 et lignes 77 à 81). Le MTF est utile pour déplacer ton stop rapidement à breakeven, sans attendre la fin d’une bougie M5, donc ne laisser uniquement que la gestion des ordres dans le timeframe le plus petit.
Mais je ne veux pas m’empêcher de prendre un deuxième signal 15 minutes plus tard si le premier trade est toujours en cours.
Ok donc laisser le cumul à true. Le problème c’est que tu prends tes ordres à chaque fermeture de barre dans le TF 1-Minute, alors que ta stratégie est bien en M5, donc l’ouverture des ordres doit rester dans ce TF.
Ok merci ça semble mieux fonctionner comme ça effectivement 🙂
Grand merci
ha non quand je laisse “true” il me remet la plein d’ordre sur le même signal 🙁
Merci de reposter le code modifié pour constater.
Voici le code
// Définition des paramètres du code
DEFPARAM CumulateOrders = true // Cumul des positions activé
// Annule tous les ordres en attente et ferme toutes les positions à 0:00, puis empêche toute création d'ordre avant l'heure "FLATBEFORE".
DEFPARAM FLATBEFORE = 090000
// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"
DEFPARAM FLATAFTER = 220000
daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0
//-------- Stratégie sur le 5 minutes --------
timeframe(5 minute, updateonclose)
//Définition de la pénétration ou de l'avalement d'une bougie
TBP = high[1]-low[1] // taille de la bougie précédente mèches comprises
PenetrationAchat = close > low[1]+1*TBP
PenetrationVente = close < high[1]-1*TBP
//Définition du RSI
RSIA = RSI[7](close)crosses over 70
RSIV = RSI[7](close)crosses under 30
//Définitions des MM
MM50 = average[50](close)
//Conditions pour un signal d'achat --------
ca1 = RSIA
ca2 = PenetrationAchat
ca3 = MM50 > MM50 [1]
//-------- condition d'achat
if ca1 and ca2 and ca3 and not daysForbiddenEntry then
buy 1 contract at market
SET STOP pLOSS 30
SET TARGET pPROFIT 30
endif
//Conditions pour un signal de vente --------
cv1 = RSIV
cv2 = PenetrationVente
cv3 = MM50 < MM50 [1]
//-------- Condition de vente
if cv1 and cv2 and cv3 and not daysForbiddenEntry then
sellshort 1 contract at market
SET STOP pLOSS 30
SET Target pProfit 30
endif
//-------- Définition de l'unité de temps principale d'action pour la mise à Break Even
timeframe(1 minute, default)
//Définition du stop à BE (break-even)
startBEA = 12 //Nombre de point pour activer le stopBE
startBEV = 12
PointsToKeepA = 2 //Nombre de point de mise en place du stop par rapport au point d'entrée afin d'être stopé non pas à 0 mais un peu en postif
PointsToKeepV = 2
//On remet le niveau de mise à BE à 0 losque l'on n'est pas en position
if not onmarket then
BELvAchat=0
endif
//on regarde si le trade actuel à fait au moins x pips
if longonmarket and high-tradeprice>=startBEA then
BELvAchat=1
endif
//placer stoploss au prix d'entrée + x points
if BELvAchat=1 then
sell at tradeprice+PointsToKeepA stop
endif
//On remet le niveau de mise à BE à 0 losque l'on n'est pas en position
if not onmarket then
BELvVente=0
endif
//on regarde si le trade actuel à fait au moins x pips
if shortonmarket and tradeprice-low>=startBEV then
BELvVente=1
endif
//placer stoploss au prix d'entrée + x points
if BELvVente=1 then
buy at tradeprice+PointsToKeepV stop
endif
Voilà ce qu’il a fait en test live sur la première bougie 5 minutes (je voulais voir si ça serait différent du backtest ou pas).
Il a pris au total 4 positions sur ce robot.
Détail des ordres
Acaht 25735.6 – sortie 25705.6 (SL de 30 pts touché)
Achat 25727.6 – 25726.6 – 25724.6 – Sortie à 25706 pour les trois positions (ils ont été stoppé entre 22 et 19 pts –> pourquoi le stop a t il remonté de 10 pts ? on dirait que la procédure de mise à BE à fait relevé le stop alors que ça ne devrait pas).
Merci pour l’aide
Je n’ai pas testé le code, voir à la ligne 95: l’instruction BUY achète au marché. Pour sortir d’une position de VAD, il faut utiliser l’instruction EXITSHORT.
J’ai changer la ligne 95 mais toujours la même chose qui se produit pour la prise de position multiple.