Extratrend stratégie en un indicateur
Forums › ProRealTime forum Français › Support ProBuilder › Extratrend stratégie en un indicateur
- This topic has 28 replies, 8 voices, and was last updated 2 years ago by plbourse.
-
-
06/24/2022 at 6:27 PM #196048
J’avais tenté de marquer cela comme suit, mais il me dit qu’il y a une erreur à la ligne 86. Je suis un peu bloqué :
capitalinitial=10000
risque=1
exitstrategy=1
profitfactor=6
stopfactor=1.5
partialprofit=1
partialprofitfactor=3
ratchetfactor=7
// PULLBACK CONDITIONS
SMA20= Average[20](close)
PB = (close <= SMA20)// Appel des valeurs d’ExtraTrend
myTrend, ignored, ignored, myReDyn, ignored = CALL “ExtraTrend”[0,0,0,0,0](close)// Tendance ExtraTrend
if myTrend>myTrend[1] then
tendance=1
endif
if myTrend<myTrend[1] then
tendance=0
endif// Break Résistance Dynamique ExtraTrend
if myReDyn>myReDyn[1] then
ReDyn=1
endif
if myReDyn<myReDyn[1] then
ReDyn=0
endif// score Metascore
myScore, ignored, ignored = CALL “MetaScore”[80, 0, 0](close)//STRATEGIES OF BUY
// Entrée début de tendance
if tendance and not tendance[1] and not ionmarket and myscore>80 and ReDyn=1 THEN
drawarrowup(barindex,low-AverageTrueRange[14](close)/2) coloured(“black”)
istoploss = close-stopfactor*averagetruerange[20]
//set stop loss stopfactor*averagetruerange[20]
if exitstrategy=0 then
itakeprofit = close+profitfactor*averagetruerange[20]
//set target profit profitfactor*averagetruerange[20]
endif
flag=0
ionmarket=1
endif// Pullback dans tendance
if tendance[1] and not ionmarket and myScore>80 and PB THEN
drawarrowup(barindex,low-AverageTrueRange[14](close)/2) coloured(“black”)
istoploss = close-stopfactor*averagetruerange[20]
//set stop loss stopfactor*averagetruerange[20]
if exitstrategy=0 then
itakeprofit = close+profitfactor*averagetruerange[20]
//set target profit profitfactor*averagetruerange[20]
endif
flag=0
ionmarket=1
endifif ionmarket and close>=myTrend+partialprofitfactor*averagetruerange[20] and flag=0 and partialprofit=1 then
drawtext(“X”,barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured(“green”)
flag=1
endifif ionmarket and exitstrategy=1 and close<lowest[30](highest[55](high)-ratchetfactor*averagetruerange[20])then
drawtext(“OUT”,barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured(“black”)
ionmarket=0
endif//test stoploss & takeprofit
if ionmarket then
if high >= itakeprofit and exitstrategy=0 then
drawtext(“TP”,barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured(“black”)
ionmarket=0
elsif low <= istoploss then
drawtext(“SL”,barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured(“red”)
ionmarket=0
endif
endifreturn itakeprofit style(dottedline2) coloured(“green”), istoploss style(dottedline3) coloured(“black”)
//STRATEGIES OF SELL
IF tendance[0] and not sonmarket and myScore<20 and not ionmarket then
drawarrowdown(barindex,low-AverageTrueRange[14](close)/2) coloured(“red”)
sstoploss = close-stopfactor*averagetruerange[20]
//set stop loss stopfactor*averagetruerange[20]
IF exitstrategy=0 then
stakeprofit = close+profitfactor*averagetruerange[20]
//set target profit profitfactor*averagetruerange[20]
endif
flag=0
sonmarket=1
endifif sonmarket and close>=myTrend+partialprofitfactor*averagetruerange[20] and flag=0 and partialprofit=1 then
drawtext(“X”,barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured(“green”)
flag=1
endifif sonmarket and exitstrategy=1 and close<lowest[30](highest[55](high)-ratchetfactor*averagetruerange[20])then
drawtext(“OUT”,barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured(“black”)
sonmarket=0
endif//test stoploss & takeprofit
if sonmarket then
if high >= stakeprofit and exitstrategy=0 then
drawtext(“TP”,barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured(“black”)
sonmarket=0
elsif low <= sstoploss then
drawtext(“SL”,barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured(“red”)
sonmarket=0
endif
endifreturn stakeprofit style(dottedline2) coloured(“green”), sstoploss style(dottedline3) coloured(“black”)
06/25/2022 at 3:35 PM #196091Bonjour Nicolas,
Merci beaucoup pour le code, cependant il reste un point que je n’arrive à comprendre et je n’arrive pas à avoir de réponse de Christophe.
En mettant exitstrategy=0, je ne trouve jamais une occurence de “TP” pour laquelle on aurait donc le Take profit total et non pas partiel.
As tu un exemple sur lequel on peut voir le “TP”? qui déclencherait donc le drawtext(“TP”,barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured(“green”)
Merci,
06/26/2022 at 3:54 AM #196121Bonjour à tous.
J’ai humblement essayé différentes stratégies avec Extratrend, et les résultats que j’obtiens sont radicalement différents d’un Timeframe à l’autre. De ce que j’ai compris ca marche mieux sur les UT longues genre daily, car les tendances sont plus claires, car logiquement beaucoup moins de faux signaux, de bruits, de gaps, etc… Ca devient beaucoup plus compliqué quand on descend les UT genre 15 min, la performance est anéantie par des titres en range pleins de faux signaux, et même en utilisant des gardes fous genre Metascore + multi timeframe pour être sûr d’être en tendance en Journalier & 1 heure, avant de prendre une position en 15 min quand metascore au-dessus de 90, les résultats sont peu convaincants, je vous partage ici le dernier code a ce sujet inspiré de ce qu’a proposé Christophe et d’autres participants de ce file ( que je remercie).
En bref je suis toujours en recherche d’une stratégie efficace en UT courte pour avoir la meilleure performance en un minimum de temps.
J’ai aussi testé une stratégie de sortie de position via un stop inspiré des Tortues, ca marche mieux que le stop ratchet de Christophe dans quelques cas, mais le plus souvent le stop de Christophe est plus efficace, tout depends du titre tradé…123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106DEFPARAM CumulateOrders=Falsecapitalinitial=10000risque=3profitfactor=6stopfactor=1.5partialprofit=1partialprofitfactor=3ratchetfactor=7META=90Sortie=1p=20TIMEFRAME (1 DAY)//APPEL VALEUR EXTRATREND DAILYmyTrendD, ignored, ignored, ignored, ignored = CALL "ExtraTrend"[0,0,0,0,0](close)// Tendance ExtraTrend DAILYif myTrendD>myTrendD[1] thentendanceD=1endifif myTrendD<myTrendD[1] thentendanceD=0endifTIMEFRAME (1 HOUR)//APPEL VALEUR EXTRATREND HOURmyTrendH, ignored, ignored, ignored, ignored = CALL "ExtraTrend"[0,0,0,0,0](close)// Tendance ExtraTrend HOURif myTrendH>myTrendH[1] thentendanceH=1endifif myTrendH<myTrendH[1] thentendanceH=0endifTIMEFRAME (15 MINUTES)//APPEL VALEUR EXTRATRENDmyTrend, ignored, ignored, ignored, ignored = CALL "ExtraTrend"[0,0,0,0,0](close)// Tendance ExtraTrendif myTrend>myTrend[1] thentendance=1endifif myTrend<myTrend[1] thentendance=0endif// score MetascoremyScore, ignored, ignored = CALL "MetaScore"[META, 0, 0](close)IF myScore > META THENINDIC=1ELSEINDIC=0ENDIF//PRISE DE POSITIONif tendance and tendanceD and tendanceH and INDIC=1 and not longonmarket THENpositionsize=round(((capitalinitial)*(risque/100))/(stopfactor*averagetruerange[20]))BUY positionsize shares AT MARKETset stop loss stopfactor*averagetruerange[20]flag=0endif// PROFIT PARTIELif longonmarket and close>=myTrend+partialprofitfactor*averagetruerange[20] and flag=0 and partialprofit=1 thensell round(positionsize/2) shares at marketflag=1endif//SORTIE DE POSITION 1if sortie=1 and longonmarket and close<lowest[30](highest[55](high)-ratchetfactor*averagetruerange[20])thensell at marketendif// CALCUL STOP TORTUE (ATRx)ATRx = AverageTrueRange[p](close) * 3//ATRs = ATR Trailing Stop ou Stop TortuesIF close crosses over ATRts THENATRts = close - ATRxELSIF close crosses under ATRts THENATRts = close + ATRxENDIF// Clalcul del'ATRts lors de la meme tendanceIF close > ATRts THENATRnew = close - ATRxIF ATRnew > ATRts THENATRts = ATRnewENDIFELSIF close < ATRts THENATRnew = close + ATRxIF ATRnew < ATRts THENATRts = ATRnewENDIFENDIF//SORTIE DE POSITION 2if sortie=2 and longonmarket and close<atrts thenSELL AT MARKETendif06/26/2022 at 4:25 AM #196122J’ai aussi testé une autre stratégie basée sur la cassure de la resistance dynamique, et dans le meme esprit que la précédente les résultats sont bons quand la tendance est belle longue et bien établie, mais dès qu’on descend les unités de Temps avec un graphique sans tendance clair, alors rien ne va plus… (Voir screenshot)
Pas facile de trouver le meilleur des 2 mondes.1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677capitalinitial=10000risque=3stopfactor=1.5partialprofit=1partialprofitfactor=3p =20// ATRxATRx = AverageTrueRange[p](close) * 3//ATRs = ATR Trailing Stop ou Stop TortuesIF close crosses over ATRts THENATRts = close - ATRxELSIF close crosses under ATRts THENATRts = close + ATRxENDIF// Clalcul del'ATRts lors de la meme tendanceIF close > ATRts THENATRnew = close - ATRxIF ATRnew > ATRts THENATRts = ATRnewENDIFELSIF close < ATRts THENATRnew = close + ATRxIF ATRnew < ATRts THENATRts = ATRnewENDIFENDIF//APPEL VALEUR EXTRATRENDmyTrend, ignored, ignored, myReDyn, ignored = CALL "ExtraTrend"[0,1,0,0,0](close)//APPEL MMmm200 = average[200]mm50 = average[50]mm20 = average[20]//CONDITION MMIF MM50>MM200 THENCOND1=1ELSECOND1=0ENDIFIF MM20>MM50 THENCOND2=1ELSECOND2=0ENDIF//CASSURE RES DYNIf myTrend[1]<>myReDyn[1] and close>myReDyn[1] and close>mm200 THENCassure=1elsecassure=0endif//PRISE DE POSITIONif Cassure=1 and cond1=1 and not longonmarket THENpositionsize=round(((capitalinitial)*(risque/100))/(stopfactor*averagetruerange[20]))BUY positionsize shares AT MARKETset stop loss stopfactor*averagetruerange[20]flag=0endif// PROFIT PARTIELif longonmarket and close>=myTrend+partialprofitfactor*averagetruerange[20] and flag=0 and partialprofit=1 thensell round(positionsize/2) shares at marketflag=1endif//SORTIE DE POSITIONif longonmarket and close<atrts thenSELL AT MARKETendif06/26/2022 at 4:30 AM #196125Bonjour,
Ce n’est peut-être pas le but de l’indicateur Extratrend d’entrer sur des positions “short” lorsqu’une nouvelle tendance baissière s’amorce (bande grise sans bande bleue), mais est-ce que quelqu’un aurait déjà essayer d’ajouter un bout de code pour essayer ?
06/26/2022 at 5:52 AM #19612606/30/2022 at 9:44 AM #196447Bonjour à tous,
Je vous partage ma version actuelle de stratégie long/short qui fait appel à Extratrend :
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134DEFPARAM CumulateOrders=Falsecapitalinitial=100000risque=0.25exitstrategy=1profitfactor=6stopfactor=1.5partialprofit=1partialprofitfactor=3ratchetfactor=7// PULLBACK CONDITIONSSMA50= Average[50](close)SMA20= Average[20](close)PB = (close <= SMA20)// THROWBACK CONDITIONSSMA20= Average[20](close)TB = (close >= SMA20)//myTrend, ignored, ignored = CALL "ExtraTrend v2" [0,0,0,0,0](close)myTrend, ignored, ignored, myReDyn, ignored = CALL "ExtraTrend"[0,0,0,0,0](close)// Tendance ExtraTrendif myTrend>myTrend[1] thentendance=1endifif myTrend<myTrend[1] thentendance=0endif// MetascoremyScore, ignored, ignored = CALL "MetaScore"[0,0,0](close)//STRATEGIES OF IRIMI BUY// Début tendanceif tendance and not tendance[1] and not longonmarket and not shortonmarket and myScore>80 THEN//if not longonmarket thenpositionsize=round(((capitalinitial+STRATEGYPROFIT)*(risque/100))/(stopfactor*averagetruerange[20]))//positionsize=round(((capitalinitial+STRATEGYPROFIT)/close)BUY positionsize shares AT MARKETset stop loss stopfactor*averagetruerange[20]if exitstrategy=0 thenset target profit profitfactor*averagetruerange[20]endifflag=0endif// Pullback dans tendanceif tendance[1] and not longonmarket and not shortonmarket and myScore>80 and PB THEN//if not longonmarket thenpositionsize=round(((capitalinitial+STRATEGYPROFIT)*(risque/100))/(stopfactor*averagetruerange[20]))//positionsize=round(((capitalinitial+STRATEGYPROFIT)/close)BUY positionsize shares AT MARKETset stop loss stopfactor*averagetruerange[20]if exitstrategy=0 thenset target profit profitfactor*averagetruerange[20]endifflag=0endif// SORTIE LONG// Sell in strenghtif longonmarket and close>=myTrend+partialprofitfactor*averagetruerange[20] and flag=0 and partialprofit=1 thensell round(positionsize/2) shares at marketflag=1endif// Sell outif longonmarket and exitstrategy=1 and close<lowest[30](highest[55](high)-ratchetfactor*averagetruerange[20])thensell at marketendif//STRATEGIES OF IRIMI SELL// Début shortif tendance[0] and not longonmarket and not shortonmarket and myScore<20 THEN//if not ShortOnMarket thenpositionsize=round(((capitalinitial+STRATEGYPROFIT)*(risque/100))/(stopfactor*averagetruerange[20]))//positionsize=round(((capitalinitial+STRATEGYPROFIT)/close)SELLSHORT positionsize shares AT MARKETset stop loss stopfactor*averagetruerange[20]if exitstrategy=0 thenset target profit profitfactor*averagetruerange[20]endifflag=0endif// Throwback dans shortif tendance[0] and not longonmarket and not shortonmarket and myScore<20 and TB THEN//if not longonmarket thenpositionsize=round(((capitalinitial+STRATEGYPROFIT)*(risque/100))/(stopfactor*averagetruerange[20]))//positionsize=round(((capitalinitial+STRATEGYPROFIT)/close)SELLSHORT positionsize shares AT MARKETset stop loss stopfactor*averagetruerange[20]if exitstrategy=0 thenset target profit profitfactor*averagetruerange[20]endifflag=0endif// RENFORCEMENT SHORTif tendance[0] and shortonmarket and myScore<20 and TB THEN//if not longonmarket thenpositionsize=round(((capitalinitial+STRATEGYPROFIT)*(risque/100))/(stopfactor*averagetruerange[20]))//positionsize=round(((capitalinitial+STRATEGYPROFIT)/close)SELLSHORT (positionsize/2) shares AT MARKETset stop loss stopfactor*averagetruerange[20]if exitstrategy=0 thenset target profit profitfactor*averagetruerange[20]endifflag=0endif// SORTIE SHORTif shortonmarket and close>=myTrend+partialprofitfactor*averagetruerange[20] and flag=0 and partialprofit=1 thensell round(positionsize/2) shares at marketflag=1endifif shortonmarket and exitstrategy=1 and close<lowest[30](highest[55](high)-ratchetfactor*averagetruerange[20])thenexitshort at marketendifJ’ai fait comme j’ai pu pour transformer cette stratégie en indicateur pour l’utiliser en temps réel sur mes graphiques. Je ne suis pas certain de la partie “Renforcement Short” :
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145capitalinitial=10000risque=1exitstrategy=1profitfactor=6stopfactor=1.5partialprofit=1partialprofitfactor=3ratchetfactor=7// PULLBACK CONDITIONSSMA20= Average[20](close)PB = (close <= SMA20)// THROWBACK CONDITIONSSMA20= Average[20](close)TB = (close >= SMA20)// Appel des valeurs d'ExtraTrendmyTrend, ignored, ignored, myReDyn, ignored = CALL "ExtraTrend"[0,0,0,0,0](close)// Tendance ExtraTrendif myTrend>myTrend[1] thentendance=1endifif myTrend<myTrend[1] thentendance=0endif// score MetascoremyScore, ignored, ignored = CALL "MetaScore"[80, 0, 0](close)//STRATEGIES OF BUY// Entrée début de tendanceif tendance and not tendance[1] and not ionmarket and not sonmarket and myscore>80 THENdrawarrowup(barindex,low-AverageTrueRange[14](close)/2) coloured("black")istoploss = close-stopfactor*averagetruerange[20]//set stop loss stopfactor*averagetruerange[20]if exitstrategy=0 thenitakeprofit = close+profitfactor*averagetruerange[20]//set target profit profitfactor*averagetruerange[20]endifflag=0ionmarket=1endif// Pullback dans tendanceif tendance[1] and not ionmarket and not sonmarket and myScore>80 and PB THENdrawarrowup(barindex,low-AverageTrueRange[14](close)/2) coloured("black")istoploss = close-stopfactor*averagetruerange[20]//set stop loss stopfactor*averagetruerange[20]if exitstrategy=0 thenitakeprofit = close+profitfactor*averagetruerange[20]//set target profit profitfactor*averagetruerange[20]endifflag=0ionmarket=1endif// LONG Take Profitif ionmarket and close>=myTrend+partialprofitfactor*averagetruerange[20] and flag=0 and partialprofit=1 thendrawtext("X",barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured("green")flag=1endif// LONG Exitif ionmarket and exitstrategy=1 and close<lowest[30](highest[55](high)-ratchetfactor*averagetruerange[20])thendrawtext("OUT",barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured("black")ionmarket=0endif// LONG stoploss & takeprofitif ionmarket thenif high >= itakeprofit and exitstrategy=0 thendrawtext("TP",barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured("black")ionmarket=0elsif low <= istoploss thendrawtext("SL",barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured("red")ionmarket=0endifendif//STRATEGIES OF SELL// Initiation Shortif tendance[0] and myScore<20 and not sonmarket and not ionmarket thendrawarrowdown(barindex,low-AverageTrueRange[14](close)/2) coloured("black")sstoploss = close+stopfactor*averagetruerange[20]//set stop loss stopfactor*averagetruerange[20]if exitstrategy=0 thenstakeprofit = close-profitfactor*averagetruerange[20]//set target profit profitfactor*averagetruerange[20]endifflag=0sonmarket=1endif// Throwback Shortif tendance[0] and myScore<20 and not sonmarket and not ionmarket and TB thendrawarrowdown(barindex,low-AverageTrueRange[14](close)/2) coloured("black")sstoploss = close+stopfactor*averagetruerange[20]//set stop loss stopfactor*averagetruerange[20]if exitstrategy=0 thenstakeprofit = close-profitfactor*averagetruerange[20]//set target profit profitfactor*averagetruerange[20]endifflag=0sonmarket=1endif// Renforcement short//if tendance[0] and sonmarket and not ionmarket and myScore<20 and TB THEN//drawarrowdown(barindex,low-AverageTrueRange[14](close)/2) coloured("blue")//sstoploss = close+stopfactor*averagetruerange[20]//set stop loss stopfactor*averagetruerange[20]//if exitstrategy=0 then//stakeprofit = close-profitfactor*averagetruerange[20]//set target profit profitfactor*averagetruerange[20]//endif//flag=0//sonmarket=1//endif// SHORT Take Profitif sonmarket and close<=myTrend-partialprofitfactor*averagetruerange[20] and flag=0 and partialprofit=1 thendrawtext("X",barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured("green")flag=1endif// SHORT Exitif sonmarket and exitstrategy=1 and close>lowest[30](highest[55](high)+ratchetfactor*averagetruerange[20])thendrawtext("OUT",barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured("black")sonmarket=0endif// SHORT stoploss & takeprofitif sonmarket thenif low <= stakeprofit and exitstrategy=0 thendrawtext("TP",barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured("black")sonmarket=0elsif high >= sstoploss thendrawtext("SL",barindex,high+AverageTrueRange[14](close)/2,dialog,bold,20) coloured("red")sonmarket=0endifendifreturn itakeprofit style(dottedline2) coloured("green"), istoploss style(dottedline3) coloured("black"), stakeprofit style(dottedline2) coloured("green"), sstoploss style(dottedline3) coloured("red")Je suis vraiment très débutant en codage sur PRT. Donc si des personnes clémentes acceptent de vérifier mes codes, je leur en serai gré. Ils doivent sans doute comporter des erreurs.
Au plaisir d’échanger ensemble.
1 user thanked author for this post.
06/30/2022 at 9:55 AM #19644906/30/2022 at 9:57 PM #19649608/24/2022 at 7:51 AM #199503Bonjour
J’ai codé une stratégie longue en utilisant ExtraTrend et Metascore avec les caractéristiques suivantes
- Entrée avec Stop Loss, pour la définition de la taille de position
- 2 possibilités de pyramidage avec le même nombre de titres
- Cloture sur StopSuiveur dans toute la durée de trade
Il y a une conditon supplémentaire, attente d’au minimum 20 barres après la clôture avant de reprendre un position
Cette stratégie est globalement gagnante (de très beaux ^rofits lorsque l’on prend une tendance) mais elle est impactée par les éléments suivants
- Trop de trades proposés
- le pourcentage de trades perdants est beaucoup trop important
Je cherche donc à filtrer mieux mes entrées, dans l’espoir de réduire le % de trades perdants.
L’un de vous aurait-il une bonne idée pour filtrer les entrées ?
Au plaisir de vous lire et bons trades… à tous
1 user thanked author for this post.
08/24/2022 at 9:33 PM #199546Bonsoir,
votre post a suscité mon intérêt, je serai intéressé pour jeter un oeil à votre code 🙂
Concernant votre question, difficile de répondre mais peut-être qu’en filtrant avec le metascore pourrait être intéressant.
On pourrait imaginer par exemple :
- ne prendre que les signaux pour lesquels le metascore est au-dessus d’un seuil
- ou bien ne prendre que les signaux pour lesquels le metascore est en hausse par rapport à la période précédente
- ou bien le metascore est supérieur à la moyenne des metascore des x dernières périodes
Dans tous les cas, il est certain que faire des backtests pour tester les config profitable est une bonne approche 🙂
Bonne continuation.
08/25/2022 at 5:27 PM #199635Oups j’ai vu que mon message n’était pas en “reply” du tien mais c’etait bien une réponse à ton message …. https://www.prorealcode.com/topic/extratrend-strategie-en-un-indicateur/page/2/#post-199546
08/26/2022 at 9:38 AM #199660Bonjour
Je suis loin d’être un programmeur averti et mon code est assez compliqué. J’ai eu en particulier des difficultés pour réaliser les pyramidages, les reconnaitre et limiter leur nombre.
Le code est prévu pour un investissement avec un risque de 250 € (capital initial de 100 k€, risque 0,25 % sur la position initiale, au minimum de 0,8 % si les 2 pyramidages sont réalisés
L’objectif est de faire tourner ce backtest sur les principales Action Euronext, Allemagne, Nyse, Nasdaq, d’obtenir un portefeuille de trades classés par date de prise de position sur 10 ans du 1/01/2011 au 31/12/2020 (clôture des trades en cours imposée au 30/6/2021)
Pour la simulation de portefeuille j’ai développé (encore en cours de modification pour étudier les options de Money Management) un programme Visual Basic 2019 qui réalise la simulation de portefeuille (positions, frais de bourse, calcul des taux de changes USD/EUR et frais de change).
Sortie
- liste détaillée des positions
- capital final trades fermés
- DrawDown maxi en % et absolu, date du DrawDown et Capital théorique maxi
Tous les commentaires, simplifications, améliorations sont les bienvenus.
Au plaisir de lire les réponses
BackTest PRC 2123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169// Nouveau backtest selon ProRealCode GillesPetitBal// Post du 27/06/2022// idem 1, mais recherche pour supprimer le trop grand nombre de pyramidage// on a rajouté// Conditon sur le CA tradé par jour//Conditon sur les volumes pour l'entrée en position// UpTrendWeekly[1] en Hausse// Bilan,// malheureusement, on pyramide jsuqu'à 3 ou 4 fois, bug à corriger// Trop de trades sur 2 ou 3 barres, ce qui laisse supposer que le Stop Initial est trop serré//Conditions pour ouvrir une position acheteuse// 1.1 le titre est en zone de force sur son unité classique// 1.2 Close est > MM200 en weekly// 1.3 Close est > MM7 dans l'unité du Trade// Pas de conditoin initialement sur les volumes// Prise de position sur 1/2 Position avec 1,5 ATR de Stop// Stop suiveur à 3 ATR// 1er pryramidage de 1/2 Position si le cours atteint Cours d'entrée + 4 ATR// 2ième pyramidage de 1/2 Position si le cours casse sa résistance dynamique// Vente sur Stop Loss, pas de vente partielle// Pas de condition sur ExtraTrend// Parametres// On intyroduit dans cette section les paramètres généraux du Tradingonce DateDebut = 20110101once DateFin = 20201231once DateClotureTrade = 20210630once NbATRStop = 3once CoefVolumes = 2.5once DurMinEntreTrade = 20once SeuilMetascore = 85// Définition des valeurs en WeeklyTimeframe(weekly)Cond2 = close > Average[200](close)myTrendWeekly, ignored, myExpansionWeekly, myResDynWeekly, ignored = CALL "ExtraTrend"[0, 1, 0, 0, 1, 0](close)UptrendWeekly = myExpansionWeekly > myTrendWeeklyCond4 = UpTrendWeekly[1]// Fin des conditions en weekly// on revient en deailytimeframe(daily)// condition sur les datesCondDate = (Date >= DateDebut) and (Date < DateFin)// Condition sur les volumes trades par jourmoyvolTradeCT = average[5](volume)*average[5](close)CondVolTrade = moyvolTradeCT >= 100000// Condition sur l'évolution des volumesCondTrendVol = Volume >= CoefVolumes*Average[20](Volume)[10]// Traitement de UpTrend en dailymyTrendDaily, ignored, myExpansionDaily, myResDynDaily, ignored = CALL "ExtraTrend"[0, 1, 0, 0, 1, 0](close)UptrendDaily = myExpansionDaily > myTrendDailyCond1 = UpTrendDailyCond3 = Close > Average[7](close)// Condition sur MetascoremyMetaScore, ignored, ignored = CALL "MetaScore"[0,0,20](close)CondMetascore = myMetascore >= SeuilMetascore// Dimensionnement de la positionif Not LongonMarket thenStopLossIni = Close - 3 * AverageTRueRange[14](Close)TaillePos = 250/(Close -StopLossIni)TaillePos = Round(TaillePos-0.5)TaillePos = TaillePos - (TaillePos MOD 2)StopLoss = StopLossIniif NbPos <> 0 thenNbPos = 0endifEndif// Condition sur le dernier Trade// Condition depuis la dernière sortieCondLastTrade = 1For j = 1 to DurMinEntreTradeif LongonMarket[j] thenCondLastTrade = 0endifnext// fin de la boucle ForCondAch = CondDateCondAch = CondAch and Cond1CondAch = CondAch and Cond2CondAch = CondAch and Cond3CondAch = CondAch and Cond4CondAch = CondAch and CondVolTradeCondAch = CondAch and CondTrendVolCondAch = CondAch and CondLastTradeCondAch = CondAch and CondMetascore// Vente sur StopLossif LongonMarket and longonmarket[1] thensell at Stoploss StopEndif// Définition de ATRRefIf LongonMarket and Not LongonMarket[1] thenATRRef = AverageTrueRange[14](Close)[1]Entryprice = PositionpriceEndif// Réevaluation du StopLossif LongOnMarket and Close- 3*ATRRef > StopLoss thenStoploss = Close-3*ATRRefEndif// Reconnaissance de Pyramidage 1// il faut mettre la reconnaissance du Pyramidage avant le pyramidage pour ne pas doubler le pyramidageif LongonMarket and LongonMarket[1] and CountofPosition <> CountofPosition[1] and High[1] >= (EntryPrice + 4*ATRRef) and CondPyram1 = 0 then// Le Pyramidage 1 a été réaliséCondPyram1 = 1endifif LongonMarket and CountofPosition <> CountofPosition[1] thenNbPos = NbPos + 1endif// Pyramidage 1if LongOnMarket and CondPyram1 = 0 and CondPyram2 = 0 and NbPos <= 2 thenBuy TaillePos Shares at EntryPrice + 4*ATRRef Stopendif// Reconnaissance de Pyramidae 2, également à mettre avantIf LongOnMarket and LongonMarket[1] and CountOfPosition <> CountOfPosition[1] and Close[1] crosses over myResDynDaily[1] and CondPyram2 = 0 thenCondPyram2 = 1Endif// Pyramidage 2if LongonMarket and CondPyram1 = 1 and CondPyram2 = 0 and Close crosses over myResDynDaily and NbPos <= 2 thenBuy TaillePos Shares at MarketEndif// REmise à 0 des Pyramidages après venteif Not LongonMarket and LongonMarket[1] thenCondPyram1 = 0CondPyram2 = 0endif// Achatif CondAch and Not longonmarket thenBuy TaillePos shares at marketCondPyram1 = 0CondPyram2 = 0Endifif OnMarket and Date >= DateClotureTrade thenSell at marketendif// fin de if Longonmarket and Date > DateClotureTrade// Sortie après la période de Trade1 user thanked author for this post.
10/12/2022 at 11:43 AM #202369Bonjour à tous
je vous annonce avoir crée un nouveau sujet dans le forum Discussion Generale sur le Trading, sujet nommé
Backtests et Screeners Base TrendFrance (Monsterstock, ExtraTrend, Metascore) #202362
Merci par avance pour vos contributions
Bons trades à tous
plbourse
1 user thanked author for this post.
-
AuthorPosts
Find exclusive trading pro-tools on