Эта стратегия обеспечивает непрерывную прибыльность на волатильных рынках путем отслеживания прорывов движущихся средних линий.
Основная логика этой стратегии заключается в том, чтобы открывать позиции на основе прорывов движущейся средней линии. Он использует MA для агрегирования нескольких движущихся средних для формирования основной движущейся средней линии. Торговые сигналы генерируются, когда цена проходит через основную движущуюся среднюю линию.
В частности, стратегия использует 60-периодную двойную скользящую среднюю WMA как основную скользящую среднюю линию. В то же время она вычисляет истинный диапазон цены и рисует верхние и нижние полосы.
В дополнение к сигналам прорыва, стратегия также включает RSI и EMA в качестве вспомогательных индикаторов. Она требует, чтобы RSI> 50 и цена выше EMA шли в длинный, а RSI<50 и цена ниже EMA шли в короткий, чтобы избежать ложных прорывов.
Кроме того, стратегия использует трёхмерные формирования скользящих средних для определения точек выхода.
Эти риски могут быть уменьшены путем оптимизации периодов MA, настройки тройной настройки MA, осторожного использования RSI и т.д.
В целом, это отличная стратегия прорыва для рынков с ограниченным диапазоном. Основная идея заключается в том, чтобы открывать позиции на основе прорывов MA, отфильтрованных по индикаторам тренда, и получать устойчивую прибыль на рынках без тренда. Выходы определяются ранее с использованием тройных формирований MA. Есть достаточно места для оптимизации параметров, улучшения логики входа / выхода и т. Д. для максимизации производительности на рынках с ограниченным диапазоном.
/*backtest start: 2022-10-23 00:00:00 end: 2023-03-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //exapple bot strategy('RIPO BOT', shorttitle='RIPO BOT', overlay=true, process_orders_on_close=true, calc_on_order_fills=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100) sl_inp = input(0.1, title='Stop Loss %') / 100 tp_inp = input(0.33, title='Take Profit %') / 100 length = input(defval=21) upper = ta.highest(length) lower = ta.lowest(length) lengthChop = input.int(14, minval=1) ci = 100 * math.log10(math.sum(ta.atr(1), lengthChop) / (ta.highest(lengthChop) - ta.lowest(lengthChop))) / math.log10(lengthChop) offset = input.int(0, "Offset", minval = -500, maxval = 500) plot(ci, "CHOP", color=#2962FF, offset = offset) band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed) hline(50, "Middle Band", color=color.new(#787B86, 50)) band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed) fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background") rsi = ta.rsi(close, 14) var float entry_price = na output = 100 * (close - upper) / (upper - lower) ema = ta.ema(output, input(defval=13, title='EMA')) ma(src, len) => ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len))) BBMC = ma(close, 60) rangema = ta.ema(ta.tr, 60) upperk = BBMC + rangema * 0.2 lowerk = BBMC - rangema * 0.2 color_bar = close > upperk ? color.blue : close < lowerk ? color.fuchsia : color.gray ExitHigh = ma(high, 15) ExitLow = ma(low, 15) Hlv3 = int(na) Hlv3 := close > ExitHigh ? 1 : close < ExitLow ? -1 : Hlv3[1] sslExit = Hlv3 < 0 ? ExitHigh : ExitLow base_cross_Long = ta.crossover(close, sslExit) base_cross_Short = ta.crossover(sslExit, close) codiff = base_cross_Long ? 1 : base_cross_Short ? -1 : na entry_long = false entry_short = false if ta.crossover(close, BBMC) and output > ema entry_long := true if ta.crossunder(close, BBMC) and output < ema entry_short := true if entry_long and strategy.position_size == 0 entry_price := close strategy.entry('enter long', strategy.long, comment='ENTER-LONG_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663') if strategy.position_size > 0 strategy.exit('Stop Loss/TP long', 'enter long', limit=entry_price * (1 + tp_inp), stop = color_bar == color.fuchsia ? BBMC : na, comment='EXIT-LONG_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663') plot(entry_price * (1 + tp_inp), color=color.new(color.green, 0)) //if entry_short and strategy.position_size == 0 //entry_price := close //strategy.entry('enter short', strategy.short, comment='ENTER-SHORT_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663') if strategy.position_size < 0 strategy.exit('Stop Loss/TP short', 'enter short', limit=entry_price * (1 - tp_inp), stop = color_bar == color.blue ? BBMC : na, comment='EXIT-SHORT_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663') plot(entry_price * (1 + tp_inp), color=color.new(color.green, 0)) // plot(entry_price * (1 - sl_inp), color=color.new(color.red, 0)) plot(rsi, color=color.yellow) plot(output, title='%R', color=color.new(color.yellow, 0), linewidth=2) plot(ema, title='EMA', color=color.new(color.aqua, 0), linewidth=2) plotarrow(codiff, colorup=color.new(color.blue, 35), colordown=color.new(color.fuchsia, 35), title='Exit Arrows', maxheight=20, offset=0) plot(BBMC, color=color_bar, linewidth=4, title='MA Trendline')