Stratégie MTF, besoins d'explications sur le comportement de ma stratégie
Forums › ProRealTime forum Français › Support ProOrder › Stratégie MTF, besoins d'explications sur le comportement de ma stratégie
- This topic has 21 replies, 3 voices, and was last updated 5 years ago by Nicolas.
-
-
03/18/2019 at 10:04 AM #93930
Ok, après quelques tests de mon côté, je m’aperçois qu’il existe un comportement curieux avec le cumul d’ordres activé, tu avais raison Geoffrey. Même en “updateonclose”, les ordres lancés en timeframe 5-minutes se cumulent en timeframe 1-minute. Je viens de faire répertorier ce soucis chez ITF, j’attends des informations, merci d’être patient 🙂
Voici le code en question, en essayant de tester le dernier barindex du dernier ordre, le cumul se fait tout de même .. 😕
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111// Définition des paramètres du codeDEFPARAM 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 = 220000daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0//-------- Stratégie sur le 5 minutes --------timeframe(5 minutes, updateonclose)//Définition de la pénétration ou de l'avalement d'une bougieTBP = high[1]-low[1] // taille de la bougie précédente mèches comprisesPenetrationAchat = close > low[1]+1*TBPPenetrationVente = close < high[1]-1*TBP//Définition du RSIRSIA = RSI[7](close)crosses over 70RSIV = RSI[7](close)crosses under 30//Définitions des MMMM50 = average[50](close)//Conditions pour un signal d'achat --------ca1 = RSIAca2 = PenetrationAchatca3 = MM50 > MM50 [1]//-------- condition d'achatachat= ca1 and ca2 and ca3if achat thenbuysignalbar=barindexendifif not daysForbiddenEntry and buysignalbar>lastbuysignalbar thenbuy 1 contract at marketSET STOP pLOSS 30SET TARGET pPROFIT 30lastbuysignalbar=buysignalbarendif//Conditions pour un signal de vente --------cv1 = RSIVcv2 = PenetrationVentecv3 = MM50 < MM50 [1]//-------- Condition de ventevente= cv1 and cv2 and cv3if vente thensellsignalbar=barindexendifif not daysForbiddenEntry and sellsignalbar>lastsellsignalbar thensellshort 1 contract at marketSET STOP pLOSS 30SET Target pProfit 30lastsellsignalbar=sellsignalbarendif//-------- Définition de l'unité de temps principale d'action pour la mise à Break Eventimeframe(1 minute)//Définition du stop à BE (break-even)startBEA = 12 //Nombre de point pour activer le stopBEstartBEV = 12PointsToKeepA = 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 postifPointsToKeepV = 2//On remet le niveau de mise à BE à 0 losque l'on n'est pas en positionif not onmarket thenBELvAchat=0endif//on regarde si le trade actuel à fait au moins x pipsif longonmarket and high-tradeprice>=startBEA thenBELvAchat=1endif//placer stoploss au prix d'entrée + x pointsif BELvAchat=1 thensell at tradeprice+PointsToKeepA stopendif//On remet le niveau de mise à BE à 0 losque l'on n'est pas en positionif not onmarket thenBELvVente=0endif//on regarde si le trade actuel à fait au moins x pipsif shortonmarket and tradeprice-low>=startBEV thenBELvVente=1endif//placer stoploss au prix d'entrée + x pointsif BELvVente=1 thenexitshort at tradeprice+PointsToKeepV stopendifgraph cv1 and cv2 and cv3 coloured(200,0,0)graph ca1 and ca2 and ca3 coloured(0,200,0)//graph buysignalbar03/18/2019 at 2:32 PM #93953Bonjour,
J’ai refais des tests pendants le wkd et en live en essayant des changements dans le code mais au final rien n’y fait. J’ai systématiquement des prises de positions multiple durant la même bougie horaire alors qu’à première vue tout est bien clair dans le timeframe horaire, tout est déclaré en (close). L’objectif étant de pouvoir avoir un seul trade par signal horaire mais pouvoir cumuler plusieurs trades à chaque fois qu’un signal horaire se présente.
Je remet la version du code de base et une image d’un exemple d’une multitude de trades pris durant la bougie horaire . Si vous pouviez le tester et m’aider, car je suis complètement bloqué.
Merci d’avance.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140// Définition des paramètres du codeDEFPARAM 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 = 221500daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0// ---------------- Stratégie en horaire ----------------timeframe(1 hour, 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 comprisesPenetrationAchat = close > low[1]+0.7*TBPPenetrationVente = close < high[1]-0.7*TBP// -------- Définition du RSI --------RSIA = RSI[7](close)crosses over 70RSIV = RSI[7](close)crosses under 30// ---------- Définitions des MM --------MM50 = average[50](close)// -------- Définition des Bandes de Bollinger --------BBhaute = Average[20](close)+2.5*std[20](close)BBbasse = Average[20](close)-2.5*std[20](close)if close > (BBhaute+20*pipsize) thenBBexclusionAchat =1elseBBexclusionAchat =0endifif close < (BBbasse-20*pipsize) thenBBexclusionVente =1elseBBexclusionVente =0endif// -------- Conditions pour un signal d'achat --------ca1 = RSIAca2 = PenetrationAchatca3 = MM50 > MM50 [1]ca4 = BBexclusionAchat = 0If ca1 and ca2 and ca3 and ca4 and not daysForbiddenEntry thenBUY 1 CONTRACT AT MARKETSET STOP pLOSS 150SET TARGET pPROFIT 1200ENDIF// ------ Conditions pour un signal de vente --------cv1 = RSIVcv2 = PenetrationVentecv3 = MM50 < MM50 [1]cv4 = BBexclusionVente = 0If cv1 and cv2 and cv3 and cv4 and not daysForbiddenEntry thenSELLSHORT 1 CONTRACT AT MARKETSET STOP pLOSS 130SET Target pProfit 1000endif// ---------------- Gestion du trade en 5 minutes ----------------timeframe (5 minute,default)// -------- Fonction de mise à BE et déplacement du stop en cours de trade - Trailing stop --------//1/TRAILING STOP//////////////////////////////////////////////////////once trailinstop = 0 //1 on - 0 offstartBreakevenAchat = 70 //how much pips/points in gain to activate the breakeven function?startBreakevenVente = 70PointsToKeep = 2 //how much pips/points to keep in profit above of below our entry price when the breakeven is activated (beware of spread)trailingstart1 = 200 //trailing will start @trailinstart points profittrailingstep1 = 100 //trailing step to move the "stoploss"trailingstart2 = 400 //trailing will start @trailinstart points profittrailingstep2 = 250 //trailing step to move the "stoploss"trailingstart3 = 700 //trailing will start @trailinstart points profittrailingstep3 = 500 //trailing step to move the "stoploss"//1 trailing stop function (ici l'effet trainant est suprimé et remplacé par un stopwin qui reste fixe)if trailinstop>0 then//reset the stoploss valueIF NOT ONMARKET THENnewSL=0ENDIF//manage long positionsIF LONGONMARKET THEN//first move (breakeven)IF newSL=0 AND high-tradeprice(1)>=startBreakevenAchat*pipsize THENnewSL = tradeprice(1)+PointsToKeep*pipsizeENDIF//next movesIF newSL>0 AND high-tradeprice(1)>=trailingstart1*pipsize THENnewSL = tradeprice(1)+trailingstep1*pipsizeENDIF//next movesIF newSL>0 AND high-tradeprice(1)>=trailingstart2*pipsize THENnewSL = tradeprice(1)+trailingstep2*pipsizeENDIF//next movesIF newSL>0 AND high-tradeprice(1)>=trailingstart3*pipsize THENnewSL = tradeprice(1)+trailingstep3*pipsizeENDIFENDIF//manage short positionsIF SHORTONMARKET THEN//first move (breakeven)IF newSL=0 AND tradeprice(1)-low>=startBreakevenVente*pipsize THENnewSL = tradeprice(1)-PointsToKeep*pipsizeENDIF//next movesIF newSL>0 AND tradeprice(1)- low>=trailingstart1*pipsize THENnewSL = tradeprice(1)-trailingstep1*pipsizeENDIF//next movesIF newSL>0 AND tradeprice(1)- low>=trailingstart2*pipsize THENnewSL = tradeprice(1)-trailingstep2*pipsizeENDIF//next movesIF newSL>0 AND tradeprice(1)- low>=trailingstart3*pipsize THENnewSL = tradeprice(1)-trailingstep3*pipsizeENDIFENDIF//stop order to exit the positionsIF newSL>0 THENSELL AT newSL STOPEXITSHORT AT newSL STOPENDIFendif03/18/2019 at 2:34 PM #93955Ok merci désolé on a posté en même temps 🙂
Je serais donc patient 🙂
Un tout grand merci
03/19/2019 at 2:29 PM #94026J’ai été confronté au même problème ce matin avec un client, j’aurai du y penser avant, mais j’ai trouvé cette solution : 😉
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115// Définition des paramètres du codeDEFPARAM 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 = 220000daysForbiddenEntry = OpenDayOfWeek = 6 OR OpenDayOfWeek = 0//-------- Stratégie sur le 5 minutes --------timeframe(5 minutes, updateonclose)//Définition de la pénétration ou de l'avalement d'une bougieTBP = high[1]-low[1] // taille de la bougie précédente mèches comprisesPenetrationAchat = close > low[1]+1*TBPPenetrationVente = close < high[1]-1*TBP//Définition du RSIRSIA = RSI[7](close)crosses over 70RSIV = RSI[7](close)crosses under 30//Définitions des MMMM50 = average[50](close)//Conditions pour un signal d'achat --------ca1 = RSIAca2 = PenetrationAchatca3 = MM50 > MM50 [1]//-------- condition d'achatachat= ca1 and ca2 and ca3if achat thenbuysignalbar=barindexendif//Conditions pour un signal de vente --------cv1 = RSIVcv2 = PenetrationVentecv3 = MM50 < MM50 [1]//-------- Condition de ventevente= cv1 and cv2 and cv3if vente thensellsignalbar=barindexendif//-------- Définition de l'unité de temps principale d'action pour la mise à Break Eventimeframe(1 minute)if not daysForbiddenEntry and buysignalbar>lastbuysignalbar thenbuy 1 contract at marketSET STOP pLOSS 30SET TARGET pPROFIT 30lastbuysignalbar=buysignalbarendifif not daysForbiddenEntry and sellsignalbar>lastsellsignalbar thensellshort 1 contract at marketSET STOP pLOSS 30SET Target pProfit 30lastsellsignalbar=sellsignalbarendif//Définition du stop à BE (break-even)startBEA = 12 //Nombre de point pour activer le stopBEstartBEV = 12PointsToKeepA = 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 postifPointsToKeepV = 2//On remet le niveau de mise à BE à 0 losque l'on n'est pas en positionif not onmarket thenBELvAchat=0endif//on regarde si le trade actuel à fait au moins x pipsif longonmarket and high-tradeprice>=startBEA thenBELvAchat=1endif//placer stoploss au prix d'entrée + x pointsif BELvAchat=1 thensell at tradeprice+PointsToKeepA stopendif//On remet le niveau de mise à BE à 0 losque l'on n'est pas en positionif not onmarket thenBELvVente=0endif//on regarde si le trade actuel à fait au moins x pipsif shortonmarket and tradeprice-low>=startBEV thenBELvVente=1endif//placer stoploss au prix d'entrée + x pointsif BELvVente=1 thenexitshort at tradeprice+PointsToKeepV stopendif//graph cv1 and cv2 and cv3 coloured(200,0,0)//graph ca1 and ca2 and ca3 coloured(0,200,0)//graph buysignalbarJ’enregistre le barindex du signal en M5 et je l’utilise en M1 pour vérifier si il est différent du dernier. Cela contourne le “problème”, qui n’en ai plus vraiment un au final .. Mais si on ne le sait pas, on tourne en rond comme on vient de le faire ! 😎
03/19/2019 at 3:06 PM #94032Un tout grand merci, je vais continuer les tests en réel sur base de ceci.
04/16/2019 at 10:16 AM #96573Pour information, une nouvelle instruction (de type defparam) va être ajouté, nous permettant de choisir dans quel TF les ordres peuvent être lancés, sans avoir à faire des manips comme j’ai pu le faire avec ma dernière version du code.
07/08/2019 at 4:24 PM #102183Finalement, il n’y aura pas de nouvelle instruction.
Désormais, pour un ordre dans un timeframe (x, updateonclose), on ne passe l’ordre qu’une seule fois, lorsque le calcul de ce timeframe est fait et que les conditions sont réunies, et non pas a chaque chandelier du timeframe de base.
Ce qui est logique AMHA 😀
-
AuthorPosts
Find exclusive trading pro-tools on