Optimisation code/strat de ma stratégie sur le DAX en UT 4 minutes
Forums › ProRealTime forum Français › Support ProOrder › Optimisation code/strat de ma stratégie sur le DAX en UT 4 minutes
- This topic has 4 replies, 2 voices, and was last updated 4 years ago by Yvan63.
-
-
09/27/2020 at 12:03 PM #145511
Bonjour,
Je joins ici un petit code polyvalent en UT 4 minutes (DAX30 uniquement sur CFD), l’idée et de prendre des positions en exploitant une MME100 et une stoc.
J’utilise un stop suiveur pour les longs et un TP fixe pour les shorts.
Cet algo a 62,66% de trade gagnants et un ration gains/pertes de 1,39% aujourd’hui.
Je ne l’ai pas optimisé avec les outils de PRT car je le veux le plus polyvalent possible, pour moi le challenge était de le faire traverser le mini crash de mars pour éprouver son comportement.
C’est pas trop mal mais je cherche des idées pour l’optimiser, peut-être pas dans l’idée de prendre plus de position mais plutôt supprimer des trades perdants (sans optimisation PRT), plutôt optimisation sur l’ajout de filtres etc…
Donc c’est une première, je pose le code ici et attends vos lumières 🙂
Autre chose: je souhaiterais pouvoir effectuer des statistiques sur les résultats de mes backtests, seulement comment peut-on exporter les datas du tableau de résultats ? (je suis sous PRT 10.3)
Par exemple, connaitre à quelles heures cet algo perd ou gagne le plus souvent m’intéresse…@+
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125// UT = 4 minutes// Versions 1.1 mercredi 16/09/20 à 21:11DEFPARAM CumulateOrders = False // Cumul des positions désactivé//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 = 081500////////// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"DEFPARAM FLATAFTER = 213000DEFPARAM Preloadbars = 1000Long1On = 1 // pas très efficace ?Long2ON = 1ShortON = 1 // Short activé ?ONCE TSL = 1 // Use TSL?// Evite l'ouverture de WSTemps1 = time >= 151500 and time < 160000MME100 = Average[100,1](close)sto = Stochastic[14,3](close)//signal = average[5](sto)If Long1On then//// LONG-1 //// Une bougie de part et autre de la EMA100c1 = high > MME100 and close > openc2 = close - open > 12// bougie de x point minimumc3 = high[1] < MME100 and open[1] < close[1] // bougie précédente verte également et inférieure à MME100c4 = sto < 60 // filtrage par STOc5 = 1C13 = c1 and c2 and c3 and c4 and c5 and not Temps1 and NOT LongOnMarketIF C13 THENBUY 1 CONTRACT AT MARKETSet Target pprofit 0SET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédenteENDIFEndifIf Long2On then//// LONG-2 //// Une bougie rebondit sur la MME100d1 = close > opend2 = open > MME100 and close > MME100d3 = open[1] > MME100 and close[1] > MME100d4 = low[1] < MME100 and low < MME100d5 = close[1] > open[1]D13 = d1 and d2 and d3 and d4 and d5 and not Temps1 and NOT LongOnMarketIF D13 THENBUY 1 CONTRACT AT MARKETSet Target pprofit 0If (close-low) < 11 thenSET STOP LOSS 11 // Stop LOSS passe partout si bougie trop petiteElseSET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédenteEndifENDIFEndifIF ShortON then///// SHORT ////---------------------------------------------------------------------c6 = close < MME100 and close < openc7 = open - close > 14// bougie de x point minimumc8 = low[1] > MME100 and open[1] > close[1]c9 = sto > 19 // filtrage par STOc10 = 1C14 = c6 and c7 and c8 and c9 and c10 and not Temps1 and NOT ShortOnMarketIF C14 THENSellshort 1 CONTRACT AT MARKETSET STOP LOSS (high-close) // SL sur le plus haut de la bougie précédenteSET Target Pprofit 19 // Pas de stop suiveur car mouvement de baisse trop rapideENDIFEndIf// *****************************IF TSL = 1 THEN//trailing stop functiontrailingstart = 8 //trailing will start @trailinstart points profittrailingstep = 6 // trailing step to move the "stoploss"//reset the stoploss valueIF NOT ONMARKET THENnewSL=0ENDIF//manage long positionsIF LONGONMARKET THEN//first move (breakeven)IF newSL=0 AND close-tradeprice(1)>=trailingstart THENnewSL = tradeprice(1)+trailingstepENDIF//next movesIF newSL>0 AND close-newSL>=trailingstep THENnewSL = newSL+trailingstepENDIFSell at newSL stop // Place un ordre de vente stop en guise de seuil de stopsuiveur//graph newSL coloured (0,255,255) as "newSL"ENDIFENDIF09/27/2020 at 12:41 PM #145517Edit, je n’ai pas mis la dernière version du code, la voici:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133// Versions 1.2 vendredi 18/09/20 à 22:38//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////DEFPARAM CumulateOrders = False // Cumul des positions désactivé//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 = 081500////////// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"DEFPARAM FLATAFTER = 213000DEFPARAM Preloadbars = 1000Long1On = 1 // pas très efficace ?Long2ON = 1ShortON = 1 // Short activé ?ONCE TSL = 1 // Use TSL?// Evite l'ouverture de WS//Temps1 = time >= 151500 and time < 160000Temps1 = 0 // neutralise ce filtreMME100 = Average[100,1](close)sto = Stochastic[14,3](close)//signal = average[5](sto)If Long1On then//// LONG-1 //// Une bougie de part et autre de la EMA100c1 = high > MME100 and close > openc2 = close - open > 12// bougie de x point minimumc3 = high[1] < MME100 and open[1] < close[1] // bougie précédente verte également et inférieure à MME100c4 = sto < 60 // filtrage par STOc5 = 1C13 = c1 and c2 and c3 and c4 and c5 and not Temps1 and NOT LongOnMarketIF C13 THENBUY 1 CONTRACT AT MARKETSet Target pprofit 0If (close-low) < 11 thenSET STOP LOSS 11 // Stop LOSS passe partout si bougie trop petiteElseSET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédenteEndifENDIFEndifIf Long2On then//// LONG-2 //// Une bougie rebondit sur la MME100d1 = close > open // bougie verted2 = open > MME100 and close > MME100d3 = open[1] > MME100 and close[1] > MME100d4 = low[1] < MME100 and low < MME100d5 = close[1] > open[1]D13 = d1 and d2 and d3 and d4 and d5 and not Temps1 and NOT LongOnMarketIF D13 THENBUY 1 CONTRACT AT MARKETSet Target pprofit 0If (close-low) < 11 thenSET STOP LOSS 11 // Stop LOSS passe partout si bougie trop petiteElseSET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédenteEndifENDIFEndifIF ShortON then///// SHORT ////---------------------------------------------------------------------c6 = close < MME100 and close < openc7 = open - close > 14// bougie de x point minimumc8 = low[1] > MME100 and open[1] > close[1]c9 = sto > 19 // filtrage par STOc10 = 1C14 = c6 and c7 and c8 and c9 and c10 and not Temps1 and NOT ShortOnMarketIF C14 THENSellshort 1 CONTRACT AT MARKETSET STOP LOSS (high-close) // SL sur le plus haut de la bougie précédenteSET Target Pprofit 19 // Pas de stop suiveur car mouvement de baisse trop rapideENDIFEndIf// *****************************IF TSL = 1 THEN//trailing stop functiontrailingstart = 8 //trailing will start @trailinstart points profittrailingstep = 6 // trailing step to move the "stoploss"//reset the stoploss valueIF NOT ONMARKET THENnewSL=0ENDIF//manage long positionsIF LONGONMARKET THEN//first move (breakeven)IF newSL=0 AND close-tradeprice(1)>=trailingstart THENnewSL = tradeprice(1)+trailingstepENDIF//next movesIF newSL>0 AND close-newSL>=trailingstep THENnewSL = newSL+trailingstepENDIFSell at newSL stop // Place un ordre de vente stop en guise de seuil de stopsuiveur//graph newSL coloured (0,255,255) as "newSL"ENDIFENDIF09/27/2020 at 1:53 PM #145539Ajout d’un filtre de volatilité
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151// UT = 4 minutes// Versions 1.3//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////DEFPARAM CumulateOrders = False // Cumul des positions désactivé//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 = 081500////////// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"DEFPARAM FLATAFTER = 213000DEFPARAM Preloadbars = 1000Long1On = 1 // pas très efficace ?Long2ON = 1ShortON = 1 // Short activé ?ONCE TSL = 1 // Use TSL?// Evite l'ouverture de WS//Temps1 = time >= 151500 and time < 160000Temps1 = 0 // neutralise ce filtreMME100 = Average[100,1](close)sto = Stochastic[14,3](close)ATR = AverageTrueRange[10](close)//signal = average[5](sto)If Long1On then//// LONG-1 //// Une bougie de part et autre de la EMA100c1 = high > MME100 and close > openc2 = close - open > 12// bougie de x point minimumc3 = high[1] < MME100 and open[1] < close[1] // bougie précédente verte également et inférieure à MME100c4 = sto < 60 // filtrage par STOc5 = ATR < 16C13 = c1 and c2 and c3 and c4 and c5 and not Temps1 and NOT LongOnMarketIF C13 THENBUY 1 CONTRACT AT MARKETSet Target pprofit 0If (close-low) < 11 thenSET STOP LOSS 11 // Stop LOSS passe partout si bougie trop petiteElseSET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédenteEndifENDIFEndifIf Long2On then//// LONG-2 //// Une bougie rebondit sur la MME100d1 = close > open // bougie verted2 = open > MME100 and close > MME100d3 = open[1] > MME100 and close[1] > MME100d4 = low[1] < MME100 and low < MME100d5 = close[1] > open[1] and close[1] - open[1] > 1d6 = ATR < 16D13 = d1 and d2 and d3 and d4 and d5 and d6 and not Temps1 and NOT LongOnMarketIF D13 THENBUY 1 CONTRACT AT MARKETSet Target pprofit 0If (close-low) < 11 thenSET STOP LOSS 11 // Stop LOSS passe partout si bougie trop petiteElseSET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédenteEndifENDIFEndifIF ShortON then///// SHORT ////---------------------------------------------------------------------c6 = close < MME100 and close < openc7 = open - close > 14// bougie de x point minimumc8 = low[1] > MME100 and open[1] > close[1]c9 = sto > 19 // filtrage par STOc10 = 1C14 = c6 and c7 and c8 and c9 and c10 and not Temps1 and NOT ShortOnMarketIF C14 THENSellshort 1 CONTRACT AT MARKETSET STOP LOSS (high-close) // SL sur le plus haut de la bougie précédenteSET Target Pprofit 19 // Pas de stop suiveur car mouvement de baisse trop rapideENDIFEndIf// *****************************IF TSL = 1 THEN//trailing stop functiontrailingstart = 8 //trailing will start @trailinstart points profittrailingstep = 6 // trailing step to move the "stoploss"//reset the stoploss valueIF NOT ONMARKET THENnewSL=0ENDIF//manage long positionsIF LONGONMARKET THEN//first move (breakeven)IF newSL=0 AND close-tradeprice(1)>=trailingstart THENnewSL = tradeprice(1)+trailingstepENDIF//next movesIF newSL>0 AND close-newSL>=trailingstep THENnewSL = newSL+trailingstepENDIFSell at newSL stop // Place un ordre de vente stop en guise de seuil de stopsuiveur//graph newSL coloured (0,255,255) as "newSL"ENDIF//manage short positions//IF SHORTONMARKET THEN////first move (breakeven)//IF newSL=0 AND tradeprice(1)-close>=trailingstart THEN//newSL = tradeprice(1)-trailingstep//ENDIF////next moves//IF newSL>0 AND newSL-close>=trailingstep THEN//newSL = newSL-trailingstep//ENDIF//Exitshort at newSL stop // Place un ordre d'achat stop en guise de seuil de stopsuiveur//graph newSL coloured (255,255,255) as "newSL SHORT"////ENDIFENDIF09/28/2020 at 8:26 AM #14561009/28/2020 at 6:37 PM #145746J’avais mieux que ça, tout était activé ? (Long1, Long2 et ShortON) ?
Bref, avec spread à 1,2 et sur 200000 units, tout activé mais sans le filtrage sur les plus BAS/plus haut J et mensuel que je n’arrive pas encore à coder 😉Version 1.3123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157// UT = 4 minutes, DAX30 uniquement// Versions 1.3 du 27/09/20//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////DEFPARAM CumulateOrders = False // Cumul des positions désactivé//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 = 081000////////// Annule tous les ordres en attente et ferme toutes les positions à l'heure "FLATAFTER"DEFPARAM FLATAFTER = 213000DEFPARAM Preloadbars = 1000Long1On = 1 // pas très efficace ?Long2ON = 1ShortON = 1 // Short activé ?ONCE TSL = 1 // Use TSL?// Evite l'ouverture de WS//Temps1 = time >= 151500 and time < 160000Temps1 = 0 // neutralise ce filtreMME110 = Average[110,1](close)sto = Stochastic[10,3](close)ATR = AverageTrueRange[10](close)If Long1On then//// LONG-1 //// Une bougie de part et autre de la EMA100c1 = high > MME110 and close > openc2 = close - open > 12// bougie de x point minimumc3 = high[1] < MME110 and open[1] < close[1] // bougie précédente verte également et inférieure à MME110c4 = sto < 60 // filtrage par STOc5 = ATR < 15Ctotal = c1 and c2 and c3 and c4 and c5 and not Temps1 and NOT LongOnMarketIF Ctotal THENBUY 1 CONTRACT AT MARKETSet Target pprofit 0If (close-low) < 11 thenSET STOP LOSS 11 // Stop LOSS passe partout si bougie trop petiteElseSET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédenteEndifENDIFEndifIf Long2On then//// LONG-2 //// Une bougie rebondit sur la MME110d1 = close > open // bougie verted2 = open > MME110 and close > MME110d3 = open[1] > MME110 and close[1] > MME110d4 = low[1] < MME110 and low < MME110d5 = close[1] > open[1] and close[1] - open[1] > 1d6 = ATR < 16Dtotal = d1 and d2 and d3 and d4 and d5 and d6 and not Temps1 and NOT LongOnMarketIF Dtotal THENBUY 1 CONTRACT AT MARKETSet Target pprofit 0If (close-low) < 11 thenSET STOP LOSS 11 // Stop LOSS passe partout si bougie trop petiteElseSET STOP LOSS (close-low) // SL sous le plus bas de la bougie précédenteEndifENDIFEndifIF ShortON then///// SHORT ////---------------------------------------------------------------------e4 = close > DLow(1)e4 = 1e5 = close < DHigh(1)e5 = 1e6 = close < MME110 and close < opene7 = open - close > 14// bougie de x point minimume8 = low[1] > MME110 and open[1] > close[1]e9 = sto > 21 // filtrage par STOe10 = (close-low)< (open-close)*0.9 // la mèche ne doit pas éxcéder 75% du corps de la bougieEtotal = e4 and e5 and e6 and e7 and e8 and e9 and e10 and not Temps1 and NOT ShortOnMarketIF Etotal THENSellshort 1 CONTRACT AT MARKETSET STOP LOSS (high-close) // SL sur le plus haut de la bougie de décisionSET Target Pprofit 19 // Pas de stop suiveur car mouvement de baisse trop rapideENDIFEndIf// *****************************IF TSL = 1 THEN//trailing stop functiontrailingstart = 8 //trailing will start @trailinstart points profittrailingstep = 6 // trailing step to move the "stoploss"//reset the stoploss valueIF NOT ONMARKET THENnewSL=0ENDIF//manage long positionsIF LONGONMARKET THEN//first move (breakeven)IF newSL=0 AND close-tradeprice(1)>=trailingstart THENnewSL = tradeprice(1)+trailingstepENDIF//next movesIF newSL>0 AND close-newSL>=trailingstep THENnewSL = newSL+trailingstepENDIFSell at newSL stop // Place un ordre de vente stop en guise de seuil de stopsuiveur//graph newSL coloured (0,255,255) as "newSL"ENDIF//manage short positions//IF SHORTONMARKET THEN////first move (breakeven)//IF newSL=0 AND tradeprice(1)-close>=trailingstart THEN//newSL = tradeprice(1)-trailingstep//ENDIF////next moves//IF newSL>0 AND newSL-close>=trailingstep THEN//newSL = newSL-trailingstep//ENDIF//Exitshort at newSL stop // Place un ordre d'achat stop en guise de seuil de stopsuiveur//graph newSL coloured (255,255,255) as "newSL SHORT"////ENDIFENDIF -
AuthorPosts
Find exclusive trading pro-tools on