Cette stratégie détermine les tendances du marché et les signaux d'entrée par le croisement de l'indicateur RSI et de deux moyennes mobiles (MA) de périodes différentes.
La stratégie utilise deux MA de 12 et 26 périodes. Lorsque la MA rapide de 12 périodes dépasse la MA lente de 26 périodes, elle signale une tendance à la hausse, et vice versa. La stratégie va long sur le croisement doré et court sur le croisement mortel des deux MA.
L'indicateur RSI est également utilisé pour déterminer les zones de surachat / survente. Seulement lorsque le RSI est supérieur à sa MA de 26 périodes, la stratégie ouvrira des positions longues sur le croisement doré. Et seulement lorsque le RSI est inférieur, il ouvrira des positions courtes sur le croisement de la mort. Cela évite les entrées forcées contre les situations de surachat / survente et contrôle donc les risques.
En combinant les MAs et le RSI pour l'analyse des tendances et du timing, cette stratégie peut suivre efficacement les tendances.
Sans stop-loss, les pertes peuvent s'amplifier sur les mauvais signaux. De grands mouvements d'écart peuvent également entraîner de lourdes pertes. De plus, des filtres RSI mal réglés peuvent entraîner des signaux d'entrée manquants.
Considérez l'utilisation d'un stop loss pour contrôler les pertes maximales. Ajustez les paramètres du RSI pour de meilleurs filtres. Pour les marchés volatils, utilisez des MAs plus lents pour juger de la tendance.
La stratégie peut être améliorée dans les domaines suivants:
Tester les combinaisons d'AM de différentes périodes pour trouver les paramètres les mieux adaptés aux conditions actuelles du marché.
Optimiser les périodes RSI et les logiques de filtrage pour un meilleur timing d'entrée.
Ajoutez d'autres indicateurs comme le volume pour une meilleure stabilité du système.
Optimiser les stratégies de stop loss pour équilibrer le suivi de la tendance et le contrôle des risques, par exemple, le stop de suivi, le stop en pourcentage, le stop dynamique, etc.
La stratégie est relativement simple et directe, en utilisant des croisements MA pour déterminer les tendances et RSI pour éviter les entrées forcées, suivant ainsi les tendances pour de bons rendements.
/*backtest start: 2023-02-13 00:00:00 end: 2024-02-19 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy(title = "EMA Cross Strategy", shorttitle = "EMA Cross",calc_on_order_fills=true,calc_on_every_tick =true, initial_capital=21000,commission_value=.25,overlay = true,default_qty_type = strategy.percent_of_equity, default_qty_value = 100) StartYear = input(2018, "Backtest Start Year") StartMonth = input(1, "Backtest Start Month") StartDay = input(1, "Backtest Start Day") UseStopLoss = input(false,"UseStopLoss") //rsiLong = true rsi1 = rsi(close, 14) window() => true stopLoss = input(20, title = "Stop loss percentage(0.1%)") //stopLoss = input(200, title = "Stop loss percentage(0.1%)") maFastSource = input(defval = open, title = "Fast MA Source") maFastLength = input(defval = 12, title = "Fast MA Period", minval = 1) // long ma maSlowSource = input(defval = open, title = "Slow MA Source") maSlowLength = input(defval = 26, title = "Slow MA Period", minval = 1) maFast = ema(maFastSource, maFastLength) maSlow = ema(maSlowSource, maSlowLength) //12 and 26=9%; 3 and8=2%; 26 and 55=2%; when selling on a cross under //maFastRSI = ema(rsi1, 12) //maSlowRSI = ema(rsi1, 26) fast = plot(maFast, title = "Fast MA", color = #7a8598, linewidth = 2, style = line, transp = 50) slow = plot(maSlow, title = "Slow MA", color = #e08937, linewidth = 2, style = line, transp = 50) longEMA = crossover(maFast, maSlow) exitLong = crossunder(maFast, maSlow) // 5% in 2018 //exitLong = crossunder(close, maFast) // 15% in 2018 //exitLong = crossunder(rsi1, maFastRSI) // 13% shortEMA = crossover(maSlow, maFast) exitShort = crossover(maFast, maSlow) //if (rsi1 < ema(rsi1,7)) //rsiLong = false //if (longEMA and (rsi1 >= highest(rsi1,10))) //if (longEMA) if (longEMA and (rsi1 > ema(rsi1,26))) //RSI ema values optimal from 19 to 35 strategy.entry("LongId", strategy.long, when=window()) //strategy.close_all(when = rsi1 > 60) // 80=26%, 90=n/a, 70=15%, 60=16% long only //strategy.close_all(when = (shortEMA and (rsi1 <= ema(rsi1,26)))) //10% gain in 2018 long only //strategy.close_all(when = (rsi1 <= ema(rsi1,120))) //26=17% 14=2% 42=15% //strategy.close_all(when = (shortEMA)) // 5% gain in 2018 long only //strategy.close_all(when = exitLong) //if (shortEMA and not(rsiLong)) //if (shortEMA) if (shortEMA and (rsi1 <= ema(rsi1,26))) strategy.entry("ShortId", strategy.short, when=window()) if (UseStopLoss) strategy.exit("StopLoss", "LongId", loss = close * stopLoss / 1000 / syminfo.mintick) strategy.exit("StopLoss", "ShortId", loss = close * stopLoss / 1000 / syminfo.mintick)