Эта стратегия объединяет скользящие средние, индекс относительной силы (RSI) и скользящую среднюю дивергенцию конвергенции (MACD), три основных технических показателя, для автоматического открытия и закрытия длинных и коротких позиций.
Стратегия в основном оценивает направление тренда путем сравнения двух скользящих средних значений и сочетает в себе индикатор RSI, чтобы избежать упущенных возможностей для обратного движения. В частности, стратегия использует EMA или SMA для расчета быстрой линии и медленной линии. Быстрая линия, пересекающая поверх медленной линии, является сигналом покупки, а быстрая линия, пересекающая ниже, - сигналом продажи. Для фильтрации ложных прорывов стратегия также устанавливает логику индикатора RSI, только когда индикатор RSI также отвечает условию, будет задействован торговый сигнал.
Кроме того, индикатор MACD также интегрирован в стратегию для принятия торговых решений. Когда разница между индикатором MACD пересекает ось 0, это сигнал покупки, а когда он пересекается ниже, это сигнал продажи.
Наибольшее преимущество этой стратегии заключается в интеграции нескольких индикаторов для фильтрации сигналов, что может эффективно уменьшить ложные сигналы и улучшить качество сигнала.
Быстрые и медленные линии в сочетании с индикатором RSI могут избежать ложных прорывов, вызванных использованием скользящих средних.
Интеграция индикатора MACD позволяет определить, изменилась ли тенденция преждевременно, чтобы избежать ошибочных сигналов в переломный момент.
Выбор между EMA и SMA позволяет выбрать индикаторы, которые лучше подходят для различных характеристик рынка.
Выбор схем управления денежными средствами позволяет контролировать размер отдельных заказов для эффективного контроля рисков.
Поддержка стоп-лосса и получения прибыли позволяет зафиксировать прибыль и избежать увеличения потерь.
К основным рискам этой стратегии относятся:
Неправильная оптимизация параметров может привести к плохой эффективности стратегии. Необходимо тратить время на тестирование различных комбинаций параметров.
Вероятность того, что индикатор будет выдавать неверные сигналы, все еще существует.
Использование одного символа является нестабильным, необходимо расширить его на другие сорта.
В этот день, стратегия будет действовать в будущем.
К основным аспектам оптимизации этой стратегии относятся:
Испытывать различные комбинации параметров показателей, чтобы найти оптимальные параметры.
После того, как цена проходит определенное расстояние, она может остановиться, чтобы заблокировать прибыль.
Увеличьте показатели оценки основного тренда, чтобы избежать торговли против тренда.
Посмотрите на модуль управления деньгами для лучшего управления рисками.
Фуген Sie Filter für fundamentale Faktoren wie Nachrichten hinzu. Смотрите фильтр для основных факторов, которые влияют на новости.
Эта стратегия реализует поиск и фильтрацию длинных и коротких позиций путем интеграции нескольких технических индикаторов, таких как скользящие средние, RSI и MACD. Ее преимущество заключается в том, что она может эффективно отфильтровывать ложные сигналы и улучшать качество сигнала. Основными недостатками являются выбор параметров и вероятность того, что индикаторы выдают неправильные сигналы. Будущие направления оптимизации включают оптимизацию параметров, оптимизацию стоп-лосса, фильтрацию трендов и т. Д. В целом эта стратегия эффективна как многопоказательная стратегия и нуждается в дальнейшей оптимизации и проверке в будущем.
/*backtest start: 2023-11-04 00:00:00 end: 2023-12-04 00:00:00 period: 2h 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/ // © fikira //@version=4 strategy("Strategy Tester EMA-SMA-RSI-MACD", shorttitle="Strat-test", overlay=true, max_bars_back=5000, default_qty_type= strategy.percent_of_equity, calc_on_order_fills=false, calc_on_every_tick=false, pyramiding=0, default_qty_value=100, initial_capital=100) Tiny = "Tiny" Small = "Small" Normal = "Normal" Large = "Large" cl = "close" , op = "open" , hi = "high" , lo = "low" c4 = "ohlc4" , c3 = "hlc3" , hl = "hl2" co = "(E)MA 1 > (E)MA 2" cu = "(E)MA 3 < (E)MA 4" co_HTF = "(E)MA 1 (HTF) > (E)MA 2 (HTF)" cu_HTF = "(E)MA 3 (HTF) < (E)MA 4 (HTF)" L_S = "Long & Short" , _L_ = "Long Only" , _S_ = "Short Only" cla = "Close above (E)MA 1" clu = "Close under (E)MA 3" cla_HTF = "Close above (E)MA 1 (HTF)" clu_HTF = "Close under (E)MA 3 (HTF)" rsi = "RSI strategy" none = "NONE" mch = "macd > signal" , mcl = "macd < signal" mch0 = "macd > 0" , mcl0 = "macd < 0" sgh0 = "signal > 0" , sgl0 = "signal < 0" mch_HTF = "macd (HTF) > signal (HTF)" , mcl_HTF = "macd (HTF) < signal (HTF)" mch0HTF = "macd (HTF) > 0" , mcl0HTF = "macd (HTF) < 0" sgh0HTF = "signal (HTF) > 0" , sgl0HTF = "signal (HTF) < 0" EMA = "EMA" , SMA = "SMA" s = input(cl, "Source" , options=[cl, op, hi, lo, c4, c3, hl]) src = s == cl ? close : s == op ? open : s == hi ? high : s == lo ? low : s == c4 ? ohlc4 : s == c3 ? hlc3 : s == hl ? hl2 : close __1_ = input(false, ">=< >=< [STRATEGIES] >=< >=<") Type = input(_L_, "Type Strategy", options=[L_S, _L_, _S_]) _1a_ = input(false, ">=< >=< [BUY/LONG] >=< >=<") ENT = input(co, "Pick your poison:", options=[co, cla, rsi, mch, mch0, sgh0]) EH = input(0, " if RSI >") EL = input(100, " if RSI <") EH_HTF = input(0, " if RSI (HTF) >") EL_HTF = input(100, " if RSI (HTF) <") EX = input(none, " Extra argument", options=[none, mch, mch0, sgh0]) EX2 = input(none, " Second argument", options=[none, mch_HTF, mch0HTF, sgh0HTF, co_HTF, cla_HTF]) _1b_ = input(false, ">=< [(E)MA settings (Buy/Long)] >=<") ma1 = input(SMA, " (E)MA 1", options=[EMA, SMA]) len1 = input(50, " Length" ) ma2 = input(SMA, " (E)MA 2", options=[EMA, SMA]) len2 = input(100, " Length" ) ma1HTF = input(SMA, " (E)MA 1 - HTF", options=[EMA, SMA]) len1HTF = input(50, " Length" ) ma2HTF = input(SMA, " (E)MA 2 - HTF", options=[EMA, SMA]) len2HTF = input(100, " Length" ) _2a_ = input(false, ">=< >=< [SELL/SHORT] >=< >=<") CLO = input(cu, "Pick your poison:", options=[cu, clu, rsi, mcl, mcl0, sgl0]) CH = input(0, " if RSI >") CL = input(100, " if RSI <") CH_HTF = input(0, " if RSI (HTF) >") CL_HTF = input(100, " if RSI (HTF) <") CX = input(none, " Extra argument", options=[none, mcl, mcl0, sgl0]) CX2 = input(none, " Second argument", options=[none, mcl_HTF, mcl0HTF, sgl0HTF, cu_HTF, clu_HTF]) _2b_ = input(false, ">=< [(E)MA settings (Sell/Short)] >=<") ma3 = input(SMA, " (E)MA 3", options=[EMA, SMA]) len3 = input(50, " Length" ) ma4 = input(SMA, " (E)MA 4", options=[EMA, SMA]) len4 = input(100, " Length" ) ma3HTF = input(SMA, " (E)MA 3 - HTF", options=[EMA, SMA]) len3HTF = input(50, " Length" ) ma4HTF = input(SMA, " (E)MA 4 - HTF", options=[EMA, SMA]) len4HTF = input(100, " Length" ) __3_ = input(false, ">=< >=< [RSI] >=< >=< >=<") ler = input(20 , " RSI Length") __4_ = input(false, ">=< >=< [MACD] >=< >=< >=<") fst = input(12, " Fast Length") slw = input(26, " Slow Length") sgn = input(9 , " Signal Smoothing") sma_source = input(false, "Simple MA(Oscillator)") sma_signal = input(false, "Simple MA(Signal Line)") __5_ = input(false, ">=< >=< [HTF settings] >=< >=<") MA_HTF = input("D", " (E)MA HTF", type = input.resolution) RSI_HTF = input("D", " RSI HTF" , type = input.resolution) MACD_HTF= input("D", " MACD HTF" , type = input.resolution) __6_ = input(false, ">=< >=< [SL/TP] >=< >=< >=<") sl = input(false, "Stop Loss?") SL = input(10.0, title=" Stop Loss %" ) / 100 tp = input(false, "Take Profit?") TP = input(20.0, title=" Take Profit %") / 100 SL_ = strategy.position_avg_price * (1 - SL) TP_ = strategy.position_avg_price * (1 + TP) // Limitation in time // (= inspired from a script of "Che_Trader") xox = input(false, ">=< >=< [TIME] >=< >=< >=<") ystr1 = input(2010, " Since Year" ) ystp1 = input(2099, " Till Year" ) mstr1 = input(1 , " Since Month") mstp1 = input(12 , " Till Month" ) dstr1 = input(1 , " Since Day" ) dstp1 = input(31 , " Till Day" ) _Str1 = timestamp(ystr1, mstr1, dstr1, 1, 1) Stp1_ = timestamp(ystp1, mstp1, dstp1, 23, 59) TIME = time >= _Str1 and time <= Stp1_ ? true : false //////////////////////////////////////////////////////////////////////////////////////////// _1 = ma1 == SMA ? sma(src, len1) : ma1 == EMA ? ema(src, len1) : na _2 = ma2 == SMA ? sma(src, len2) : ma2 == EMA ? ema(src, len2) : na _3 = ma3 == SMA ? sma(src, len3) : ma3 == EMA ? ema(src, len3) : na _4 = ma4 == SMA ? sma(src, len4) : ma4 == EMA ? ema(src, len4) : na _1b = ma1HTF == SMA ? sma(src, len1HTF) : ma1HTF == EMA ? ema(src, len1HTF) : na _2b = ma2HTF == SMA ? sma(src, len2HTF) : ma2HTF == EMA ? ema(src, len2HTF) : na _3b = ma3HTF == SMA ? sma(src, len3HTF) : ma3HTF == EMA ? ema(src, len3HTF) : na _4b = ma4HTF == SMA ? sma(src, len4HTF) : ma4HTF == EMA ? ema(src, len4HTF) : na _1_HTF = security(syminfo.tickerid, MA_HTF, _1b) _2_HTF = security(syminfo.tickerid, MA_HTF, _2b) _3_HTF = security(syminfo.tickerid, MA_HTF, _3b) _4_HTF = security(syminfo.tickerid, MA_HTF, _4b) cl_HTF = security(syminfo.tickerid, MA_HTF, close) //////////////////////////////////////////////////////////////////////////////////////////// plot(ENT == co or ENT == cla ? _1 : na , title="(E)MA 1", color=color.lime ) plot(ENT == co ? _2 : na , title="(E)MA 2", color=color.red ) plot(CLO == cu or CLO == clu ? _3 : na , title="(E)MA 3", color= _3 == _1 ? color.lime : color.yellow) plot(CLO == cu ? _4 : na , title="(E)MA 4", color= _4 == _2 ? color.red : color.blue ) plot(EX2 == co_HTF or EX2 == cla_HTF ? _1_HTF : na, title="(E)MA 1 HTF", color=color.lime, linewidth=2, transp=50) plot(EX2 == co_HTF ? _2_HTF : na, title="(E)MA 2 HTF", color=color.red , linewidth=2, transp=50) plot(CX2 == cu_HTF or CX2 == clu_HTF ? _3_HTF : na, title="(E)MA 3 HTF", color= _3_HTF == _1_HTF ? color.lime : color.yellow, linewidth=2, transp=50) plot(CX2 == cu_HTF ? _4_HTF : na, title="(E)MA 4 HTF", color= _4_HTF == _2_HTF ? color.red : color.blue , linewidth=2, transp=50) //////////////////////////////////////////////////////////////////////////////////////////// // RSI rsi_ = rsi(src, ler) rsi_HTF = security(syminfo.tickerid, RSI_HTF, rsi_) //////////////////////////////////////////////////////////////////////////////////////////// // MACD fast_ma = sma_source ? sma(src, fst) : ema(src, fst) slow_ma = sma_source ? sma(src, slw) : ema(src, slw) macd = fast_ma - slow_ma signal = sma_signal ? sma(macd, sgn) : ema(macd, sgn) hist = macd - signal macd_HTF = security(syminfo.tickerid, MACD_HTF, macd ) signal_HTF = security(syminfo.tickerid, MACD_HTF, signal) //////////////////////////////////////////////////////////////////////////////////////////// extra = EX == none ? true : EX == mch ? macd > signal : EX == mch0 ? macd > 0 : EX == sgh0 ? signal > 0 : false cxtra = CX == none ? true : CX == mcl ? macd <= signal : CX == mcl0 ? macd <= 0 : CX == sgl0 ? signal <= 0 : false EXTRA = EX2 == none ? true : EX2 == mch_HTF ? macd_HTF > signal_HTF : EX2 == mch0HTF ? macd_HTF > 0 : EX2 == sgh0HTF ? signal_HTF > 0 : EX2 == co_HTF ? _1_HTF > _2_HTF : EX2 == cla_HTF ? cl_HTF > _1_HTF : false CXTRA = CX2 == none ? true : CX2 == mcl_HTF ? macd_HTF <= signal_HTF : CX2 == mcl0HTF ? macd_HTF <= 0 : CX2 == sgl0HTF ? signal_HTF <= 0 : CX2 == cu_HTF ? _3_HTF <= _4_HTF : CX2 == clu_HTF ? cl_HTF <= _3_HTF : false RSI = rsi_ > EH and rsi_ <= EL and rsi_HTF > EH_HTF and rsi_HTF <= EL_HTF ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// BUY = ENT == co and TIME and extra and EXTRA and RSI ? _1 > _2 : ENT == cla and TIME and extra and EXTRA and RSI ? src > _1 : ENT == rsi and TIME and extra and EXTRA ? RSI : ENT == mch and TIME and extra and EXTRA and RSI ? macd > signal : ENT == mch0 and TIME and extra and EXTRA and RSI ? macd > 0 : ENT == sgh0 and TIME and extra and EXTRA and RSI ? signal > 0 : na SELL = CLO == cu and TIME and cxtra and CXTRA and RSI ? _3 <= _4 : CLO == clu and TIME and cxtra and CXTRA and RSI ? src <= _3 : CLO == rsi and TIME and cxtra and CXTRA ? RSI : CLO == mcl and TIME and cxtra and CXTRA and RSI ? macd <= signal : CLO == mcl0 and TIME and cxtra and CXTRA and RSI ? macd <= 0 : CLO == sgl0 and TIME and cxtra and CXTRA and RSI ? signal <= 0 : na if BUY if (Type == _S_) strategy.close("[S]") else strategy.entry("[B]", strategy.long) if SELL if (Type == _L_) strategy.close("[B]") else strategy.entry("[S]", strategy.short) strategy.exit("[SL/TP]", "[B]", stop= sl ? SL_ : na, limit= tp ? TP_ : na)