Cette stratégie est un système de moyenne mobile basé sur 4 SMMA (Smoothed Moving Average) avec des périodes différentes et 1 indicateur EMA. Elle combine plusieurs outils d'analyse technique pour former une stratégie de trading par jugement de tendance. Cette stratégie est principalement adaptée pour les transactions intraday des obligations à 15 minutes EURUSD à fort effet de levier.
L'indicateur EMA détecte les tendances à long terme. La logique de négociation spécifique est la suivante:
Lorsque la moyenne mobile à court terme (comme SMMA à 3 périodes) dépasse la moyenne mobile à plus longue période (comme EMA à 200 périodes), un signal d'achat est généré. Lorsque la moyenne mobile à court terme dépasse la moyenne mobile à plus longue période, un signal de vente est généré. En jugeant l'agencement de plusieurs moyennes mobiles, la direction de la tendance est déterminée.
En outre, la stratégie fixe également des points d'arrêt des bénéfices et des points d'arrêt des pertes pour contrôler les risques.
La stratégie présente les avantages suivants:
La structure de moyenne mobile à plusieurs niveaux peut déterminer efficacement la direction de la tendance et réduire les faux signaux.
L'indicateur SMMA filtre efficacement le bruit du marché et l'indicateur EMA détecte les tendances à long terme.
Il convient aux comptes à effet de levier élevé pour amplifier les bénéfices commerciaux.
Les points d'arrêt des bénéfices et de cessation des pertes sont définis pour contrôler efficacement les risques.
Optimise les variétés de négociation (EURUSD) et les cycles (15 minutes) pour le rendre plus avantageux.
La stratégie comporte également les risques suivants:
Le grand nombre de moyennes mobiles peut manquer des opportunités d'inversion à court terme.
Un effet de levier élevé amplifie les pertes tout en amplifiant les profits.
Lorsque la moyenne mobile génère un signal, la tendance à court terme peut déjà s'être inversée.
Le taux de change EURUSD peut connaître de violentes fluctuations, ce qui entraîne des risques plus importants.
En réponse à ces risques, nous pouvons ajuster de manière appropriée le ratio de levier, optimiser les paramètres de la moyenne mobile, introduire d'autres indicateurs pour juger de l'inversion de tendance, etc. pour optimisation.
Les principales orientations d'optimisation de cette stratégie sont les suivantes:
Évaluer les performances des différentes variétés et cycles et choisir les paramètres optimaux.
Testez différentes combinaisons et quantités de moyennes mobiles.
Augmenter les indicateurs de volume ou de volatilité pour déterminer les points d'inversion à court terme.
Augmenter l'ajustement dynamique de la fourchette de stop profit et de stop loss.
Ajouter l'indicateur ENU pour déterminer le point de retour.
Grâce à des essais et une optimisation à multiples facettes, la stabilité et la rentabilité de la stratégie peuvent être grandement améliorées.
Cette stratégie de moyenne mobile intègre les avantages des indicateurs de moyenne mobile pour former un système de jugement de tendance robuste. Elle optimise les variétés et les cycles de trading et est très adaptée au trading intraday à fort effet de levier.
/*backtest start: 2023-10-24 00:00:00 end: 2023-11-23 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © SoftKill21 //@version=4 strategy("Money maker EURUSD 15min" ) fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2000, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 8, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2021, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) len = input(3, minval=1, title="Length") src = input(hl2, title="Source") smma = 0.0 sma1 = sma(src, len) smma := na(smma[1]) ? sma1 : (smma[1] * (len - 1) + src) / len len2 = input(6, minval=1, title="Length") src2 = input(hl2, title="Source") smma2 = 0.0 sma2 = sma(src2, len2) smma2 := na(smma2[1]) ? sma2 : (smma2[1] * (len2 - 1) + src2) / len2 len3 = input(9, minval=1, title="Length") src3 = input(hl2, title="Source") smma3 = 0.0 sma3 = sma(src3, len3) smma3 := na(smma3[1]) ? sma3 : (smma3[1] * (len3 - 1) + src3) / len3 len4 = input(50, minval=1, title="Length") src4 = input(close, title="Source") smma4 = 0.0 sma4 = sma(src4, len4) smma4 := na(smma4[1]) ? sma4 : (smma4[1] * (len4 - 1) + src4) / len4 len5 = input(200, minval=1, title="Length") src5 = input(close, title="Source") out5 = ema(src5, len5) timeinrange(res, sess) => time(res, sess) != 0 london=timeinrange(timeframe.period, "0300-1045") londonEntry=timeinrange(timeframe.period, "0300-0845") extraEntry =timeinrange(timeframe.period, "0745-1030") time_cond = true //time_cond2 = time >= startDate and time <= finishDate and extraEntry // longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond //longCond = close > out5 and close > smma4 and close > smma3 and close > smma2 and close > smma and smma > smma2 and smma2>smma3 and smma3>smma4 and smma4>out5 and time_cond2 //shortCond = close < out5 and close < smma4 and close < smma3 and close < smma2 and close < smma and smma < smma2 and smma2<smma3 and smma3<smma4 and smma4<out5 and time_cond2 //longCond2 = crossover(close,out5) and crossover(close,smma4) and crossover(close,smma3) and crossover(close,smma2) and crossover(close,smma) and time_cond //shortCond2 = crossunder(close,out5) and crossunder(close,smma4) and crossunder(close,smma3) and crossunder(close,smma2) and crossunder(close,smma) and time_cond tp=input(300,title="tp") sl=input(300,title="sl") strategy.initial_capital = 50000 //MONEY MANAGEMENT-------------------------------------------------------------- balance = strategy.netprofit + strategy.initial_capital //current balance floating = strategy.openprofit //floating profit/loss risk = input(1,type=input.float,title="Risk %")/100 //risk % per trade //Calculate the size of the next trade temp01 = balance * risk //Risk in USD temp02 = temp01/sl //Risk in lots temp03 = temp02*100000 //Convert to contracts size = temp03 - temp03%1000 //Normalize to 1000s (Trade size) if(size < 1000) size := 1000 //Set min. lot size dataL = (close-out5)*100000 dataS = (out5-close)*100000 minDistanceL = (smma4 - out5)*100000 minDistanceS= (out5 - smma4)*100000 strategy.entry("long",1,1,when=longCond ) strategy.exit("closelong","long", profit=tp,loss=sl) strategy.entry("short",0,1,when=shortCond ) strategy.exit("closeshort","short", profit=tp,loss=sl) strategy.close_all(when = not london, comment="london finish") //strategy.close_all(when = not extraEntry, comment="london finish") // maxEntry=input(2,title="max entries") // strategy.risk.max_intraday_filled_orders(maxEntry)