Стратегия обратного среднего прорыва - это многофакторная стратегия обратного тренда. Она сочетает в себе скользящую среднюю, полосы Боллинджера, CCI, RSI и другие технические индикаторы для захвата возможностей переворота цен из перекупленных и перепроданных районов. Стратегия также включает в себя регулярный анализ дивергенции для выявления несоответствий между текущими и предыдущими тенденциями, таким образом избегая ложных прорывов.
Основная логика этой стратегии заключается в том, чтобы занять соответствующие короткие или длинные позиции, когда цены переворачиваются из зон перекупа или перепродажи.
Индикатор CCI или индикатор импульса выдает золотой крест, чтобы определить статус перекупленного или перепроданного.
Индикатор RSI оценивает, находится ли он в зоне перекупленности или перепроданности.
Используйте верхнюю и нижнюю рельсы полос Боллинджера, чтобы определить, отклоняется ли цена от нормального диапазона.
Выявление регулярного расхождения индикатора RSI, чтобы избежать ложных прорывов.
Когда вышеперечисленные условия будут выполнены, стратегия будет принимать обратное направление входа и установить стоп-лосс для контроля риска.
Самое большое преимущество этой стратегии заключается в том, что она сочетает в себе множество индикаторов для определения возможностей обратного действия с относительно высоким показателем выигрыша.
Использование нескольких факторов повышает надежность.
Обратный тренд имеет большую вероятность выигрыша.
Выявление расхождений позволяет избежать ложного прорыва и снижает системный риск.
Механизм стоп-лосса контролирует риск и может минимизировать потери одного билета.
Эта стратегия также сопряжена с некоторыми рисками:
Неточности суждения о точке обратного времени. Стоп-лосс может быть активирован. Расширить диапазон стоп-лосса соответствующим образом.
Параметры Bollinger Bands, установленные ненадлежащим образом, считают нормальное движение цены ненормальным.
Количество сделок может быть относительно высоким. расширить CCI и т.д. диапазон суждения должным образом, чтобы уменьшить частоту торговли.
Проверьте, соответствуют ли параметры историческим данным
Стратегия может быть оптимизирована в следующих аспектах:
Используйте алгоритмы машинного обучения для автоматической оптимизации параметров. Избегайте искусственных эмпирических ошибок.
Увеличить индекс сланцевых сланцев, индекс амплитуды и т.д. для определения силы перекупки и перепродажи.
Добавить показатели объема торговли для определения надежности реверсии, например, объем, открытый процент и т.д.
Включить блокчейн-данные, чтобы оценить настроение рынка.
Ввести адаптивный механизм остановки потерь, основанный на волатильности рынка.
Стратегия обратного среднего прорыва объединяет несколько индикаторов для определения обратных сделок. При надлежащем контроле рисков она имеет относительно большой процент выигрыша. Стратегия практична с возможностью дальнейшей оптимизации. При надлежащей настройке параметров она должна давать довольно идеальные результаты.
/*backtest start: 2023-12-12 00:00:00 end: 2023-12-19 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title='BroTheJo Strategy', shorttitle='BTJ INV', overlay=true) // Input settings stopLossInPips = input.int(10, minval=0, title='Stop Loss (in Pips)') ccimomCross = input.string('CCI', 'Entry Signal Source', options=['CCI', 'Momentum']) ccimomLength = input.int(10, minval=1, title='CCI/Momentum Length') useDivergence = input.bool(false, title='Find Regular Bullish/Bearish Divergence') rsiOverbought = input.int(65, minval=1, title='RSI Overbought Level') rsiOversold = input.int(35, minval=1, title='RSI Oversold Level') rsiLength = input.int(14, minval=1, title='RSI Length') plotMeanReversion = input.bool(true, 'Plot Mean Reversion Bands on the chart') emaPeriod = input(200, title='Lookback Period (EMA)') bandMultiplier = input.float(1.6, title='Outer Bands Multiplier') // CCI and Momentum calculation momLength = ccimomCross == 'Momentum' ? ccimomLength : 10 mom = close - close[momLength] cci = ta.cci(close, ccimomLength) ccimomCrossUp = ccimomCross == 'Momentum' ? ta.cross(mom, 0) : ta.cross(cci, 0) ccimomCrossDown = ccimomCross == 'Momentum' ? ta.cross(0, mom) : ta.cross(0, cci) // RSI calculation src = close up = ta.rma(math.max(ta.change(src), 0), rsiLength) down = ta.rma(-math.min(ta.change(src), 0), rsiLength) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) oversoldAgo = rsi[0] <= rsiOversold or rsi[1] <= rsiOversold or rsi[2] <= rsiOversold or rsi[3] <= rsiOversold overboughtAgo = rsi[0] >= rsiOverbought or rsi[1] >= rsiOverbought or rsi[2] >= rsiOverbought or rsi[3] >= rsiOverbought // Regular Divergence Conditions bullishDivergenceCondition = rsi[0] > rsi[1] and rsi[1] < rsi[2] bearishDivergenceCondition = rsi[0] < rsi[1] and rsi[1] > rsi[2] // Mean Reversion Indicator meanReversion = plotMeanReversion ? ta.ema(close, emaPeriod) : na stdDev = plotMeanReversion ? ta.stdev(close, emaPeriod) : na upperBand = plotMeanReversion ? meanReversion + stdDev * bandMultiplier : na lowerBand = plotMeanReversion ? meanReversion - stdDev * bandMultiplier : na // Entry Conditions prevHigh = ta.highest(high, 1) prevLow = ta.lowest(low, 1) shortEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) and (prevHigh >= meanReversion) and (prevLow >= meanReversion) longEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) and (prevHigh <= meanReversion) and (prevLow <= meanReversion) // Plotting oldShortEntryCondition = ccimomCrossUp and oversoldAgo and (not useDivergence or bullishDivergenceCondition) oldLongEntryCondition = ccimomCrossDown and overboughtAgo and (not useDivergence or bearishDivergenceCondition) plotshape(oldLongEntryCondition, title='BUY', style=shape.triangleup, text='B', location=location.belowbar, color=color.new(color.lime, 0), textcolor=color.new(color.white, 0), size=size.tiny) plotshape(oldShortEntryCondition, title='SELL', style=shape.triangledown, text='S', location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny) // Strategy logic if (longEntryCondition) stopLoss = close - stopLossInPips strategy.entry("Buy", strategy.long) strategy.exit("exit", "Buy", stop=stopLoss) if (shortEntryCondition) stopLoss = close + stopLossInPips strategy.entry("Sell", strategy.short) strategy.exit("exit", "Sell", stop=stopLoss) // Close all open positions when outside of bands closeAll = (high >= upperBand) or (low <= lowerBand) if (closeAll) strategy.close_all("Take Profit/Cut Loss") // Plotting plot(upperBand, title='Upper Band', color=color.fuchsia, linewidth=1) plot(meanReversion, title='Mean', color=color.gray, linewidth=1) plot(lowerBand, title='Lower Band', color=color.blue, linewidth=1)