Эта стратегия сочетает в себе индикаторы MACD, EMA и RSI для реализации следующей тренду и обратной торговли. Она генерирует сигналы покупки, когда MACD поднимается через линию сигнала и цена закрытия выше EMA; и сигналы продажи, когда MACD падает ниже линии сигнала и цена закрытия ниже EMA, чтобы улавливать тенденции. Между тем, она торгует обратными движениями, когда RSI достигает уровня перекупления или перепродажи.
Вычислить дифференциации MACD и EMA.
fastMA = ema(close, fast)
slowMA = ema(close, slow)
macd = fastMA - slowMA
signal = sma(macd, 9)
ema = ema(close, input(200))
Стройте сигнал покупки: MACD diff (macd - сигнал) выходит выше 0 и цена закрытия выше EMA.
delta = macd - signal
buy_entry= close>ema and delta > 0
Сгенерировать сигнал продажи: дифференциация MACD падает ниже 0, а цена закрытия ниже EMA.
sell_entry = close<ema and delta<0
Торговые реверсии, когда RSI достигает уровня перекупленности или перепроданности.
if (rsi > 70 or rsi < 30)
reversal := true
Решения:
Эта стратегия сочетает в себе MACD, EMA и RSI для органической реализации следующего тренда и реверсионной торговли. MACD оценивает направления тренда, EMA фильтрует шум, а RSI фиксирует точки реверсии. Такая комбинация мультииндикаторов может лучше определять движения рынка, улучшая прибыльность при снижении ложных сигналов.
/*backtest start: 2023-11-17 00:00:00 end: 2023-12-17 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/ // © mbuthiacharles4 //Good with trending markets //@version=4 strategy("CHARL MACD EMA RSI") fast = 12, slow = 26 fastMA = ema(close, fast) slowMA = ema(close, slow) macd = fastMA - slowMA signal = sma(macd, 9) ema = ema(close, input(200)) rsi = rsi(close, input(14)) //when delta > 0 and close above ema buy delta = macd - signal buy_entry= close>ema and delta > 0 sell_entry = close<ema and delta<0 var bought = false var sold = false var reversal = false if (buy_entry and bought == false and rsi <= 70) strategy.entry("Buy",true , when=buy_entry) bought := true strategy.close("Buy",when= delta<0 or rsi > 70) if (delta<0 and bought==true) bought := false //handle sells if (sell_entry and sold == false and rsi >= 30) strategy.entry("Sell",false , when=sell_entry) sold := true strategy.close("Sell",when= delta>0 or rsi < 30) if (delta>0 and sold==true) sold := false if (rsi > 70 or rsi < 30) reversal := true placing = rsi > 70 ? high :low label.new(bar_index, placing, style=label.style_flag, color=color.blue, size=size.tiny) if (reversal == true) if (rsi < 70 and sold == false and delta < 0) strategy.entry("Sell",false , when= delta < 0) sold := true reversal := false else if (rsi > 30 and bought == false and delta > 0) strategy.entry("Buy",true , when= delta > 0) bought := true reversal := false