Стратегия прорыва с обратным средним

Автор:Чао Чжан, Дата: 2023-12-20 14:48:57
Тэги:

img

Обзор

Стратегия обратного среднего прорыва - это многофакторная стратегия обратного тренда. Она сочетает в себе скользящую среднюю, полосы Боллинджера, CCI, RSI и другие технические индикаторы для захвата возможностей переворота цен из перекупленных и перепроданных районов. Стратегия также включает в себя регулярный анализ дивергенции для выявления несоответствий между текущими и предыдущими тенденциями, таким образом избегая ложных прорывов.

Принцип стратегии

Основная логика этой стратегии заключается в том, чтобы занять соответствующие короткие или длинные позиции, когда цены переворачиваются из зон перекупа или перепродажи.

  1. Индикатор CCI или индикатор импульса выдает золотой крест, чтобы определить статус перекупленного или перепроданного.

  2. Индикатор RSI оценивает, находится ли он в зоне перекупленности или перепроданности.

  3. Используйте верхнюю и нижнюю рельсы полос Боллинджера, чтобы определить, отклоняется ли цена от нормального диапазона.

  4. Выявление регулярного расхождения индикатора RSI, чтобы избежать ложных прорывов.

Когда вышеперечисленные условия будут выполнены, стратегия будет принимать обратное направление входа и установить стоп-лосс для контроля риска.

Анализ преимуществ

Самое большое преимущество этой стратегии заключается в том, что она сочетает в себе множество индикаторов для определения возможностей обратного действия с относительно высоким показателем выигрыша.

  1. Использование нескольких факторов повышает надежность.

  2. Обратный тренд имеет большую вероятность выигрыша.

  3. Выявление расхождений позволяет избежать ложного прорыва и снижает системный риск.

  4. Механизм стоп-лосса контролирует риск и может минимизировать потери одного билета.

Анализ рисков

Эта стратегия также сопряжена с некоторыми рисками:

  1. Неточности суждения о точке обратного времени. Стоп-лосс может быть активирован. Расширить диапазон стоп-лосса соответствующим образом.

  2. Параметры Bollinger Bands, установленные ненадлежащим образом, считают нормальное движение цены ненормальным.

  3. Количество сделок может быть относительно высоким. расширить CCI и т.д. диапазон суждения должным образом, чтобы уменьшить частоту торговли.

  4. Проверьте, соответствуют ли параметры историческим данным

Оптимизация

Стратегия может быть оптимизирована в следующих аспектах:

  1. Используйте алгоритмы машинного обучения для автоматической оптимизации параметров. Избегайте искусственных эмпирических ошибок.

  2. Увеличить индекс сланцевых сланцев, индекс амплитуды и т.д. для определения силы перекупки и перепродажи.

  3. Добавить показатели объема торговли для определения надежности реверсии, например, объем, открытый процент и т.д.

  4. Включить блокчейн-данные, чтобы оценить настроение рынка.

  5. Ввести адаптивный механизм остановки потерь, основанный на волатильности рынка.

Резюме

Стратегия обратного среднего прорыва объединяет несколько индикаторов для определения обратных сделок. При надлежащем контроле рисков она имеет относительно большой процент выигрыша. Стратегия практична с возможностью дальнейшей оптимизации. При надлежащей настройке параметров она должна давать довольно идеальные результаты.


/*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)


Больше