Полосы Боллинджера в сочетании с несколькими индикаторами Woody CCI для фильтрации торговых сигналов стратегии

BB CCI MA OBV ATR SMA TP SL
Дата создания: 2024-12-27 15:32:30 Последнее изменение: 2024-12-27 15:32:30
Копировать: 0 Количество просмотров: 416
1
Подписаться
1617
Подписчики

Полосы Боллинджера в сочетании с несколькими индикаторами Woody CCI для фильтрации торговых сигналов стратегии

Обзор

Стратегия представляет собой многоиндикаторную торговую систему, которая объединяет полосы Боллинджера, Woodies CCI, скользящие средние (MA) и балансовый объем (OBV). Стратегия использует полосы Боллинджера для определения диапазона волатильности рынка, использует индикатор CCI для фильтрации торговых сигналов, а затем объединяет систему скользящих средних и подтверждение объема торговли для торговли, когда рыночный тренд очевиден. В то же время используйте ATR для динамической установки позиций тейк-профита и стоп-лосса, чтобы эффективно контролировать риски.

Стратегический принцип

Основная логика стратегии основана на следующих ключевых элементах:

  1. Используйте две полосы Боллинджера стандартного отклонения (1x и 2x) для построения канала колебания цен и предоставления ориентира для диапазона колебаний рынка.
  2. Использование 6-периодных и 14-периодных индикаторов CCI в качестве фильтров сигналов требует подтверждения CCI двух периодов в одном и том же направлении.
  3. Объедините 50-периодную и 200-периодную скользящие средние для определения рыночных тенденций и генерации первоначальных торговых сигналов при пересечении скользящих средних.
  4. Тенденция объема подтверждается 10-периодным сглаживанием индикатора OBV.
  5. Используйте 14-периодный ATR для динамической установки тейк-профита и стоп-лосса. Для длинных позиций тейк-профит равен 2 ATR, а стоп-лосс равен 1 ATR. Для коротких позиций верно обратное.

Стратегические преимущества

  1. Перекрестная проверка нескольких индикаторов значительно снижает вероятность ложных сигналов.
  2. Сочетание полос Боллинджера и CCI обеспечивает точную оценку волатильности рынка.
  3. Система долгосрочных и краткосрочных скользящих средних эффективно улавливает общую тенденцию
  4. OBV подтверждает объемную поддержку и повышает надежность сигнала
  5. Динамические настройки стоп-профита и стоп-лосса для адаптации к различным рыночным условиям
  6. Торговые сигналы понятны, исполнение стандартно, их легко количественно оценить и реализовать.

Стратегический риск

  1. Несколько индикаторов могут вызвать задержку сигнала и пропустить лучшее время входа
  2. Стоп-лоссы могут часто срабатывать на нестабильных рынках
  3. Оптимизация параметров имеет риск переобучения
  4. Стоп-лосс может быть несвоевременным в периоды сильной волатильности Контрмеры:
  • Динамически настраивайте параметры индикатора в соответствии с различными рыночными циклами
  • Мониторинг коррекции и контроль позиции в реальном времени
  • Регулярно проверяйте правильность параметров
  • Установите максимальный лимит потерь

Направление оптимизации стратегии

  1. Ввести индикаторы волатильности рынка для корректировки позиций в периоды высокой волатильности
  2. Добавьте фильтр силы тренда, чтобы избежать торговли на нестабильных рынках
  3. Оптимизируйте выбор цикла CCI и улучшите чувствительность сигнала
  4. Улучшить механизм стоп-профита и стоп-лосса, например, рассмотреть возможность фиксации прибыли партиями
  5. Добавлен механизм предупреждения об аномальном объеме торговли

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy(shorttitle="BB Debug + Woodies CCI Filter", title="Debug Buy/Sell Signals with Woodies CCI Filter", overlay=true)

// Input Parameters
length = input.int(20, minval=1, title="BB MA Length")
src = input.source(close, title="BB Source")
mult1 = input.float(1.0, minval=0.001, maxval=50, title="BB Multiplier 1 (Std Dev 1)")
mult2 = input.float(2.0, minval=0.001, maxval=50, title="BB Multiplier 2 (Std Dev 2)")
ma_length = input.int(50, minval=1, title="MA Length")
ma_long_length = input.int(200, minval=1, title="Long MA Length")
obv_smoothing = input.int(10, minval=1, title="OBV Smoothing Length")
atr_length = input.int(14, minval=1, title="ATR Length") // ATR Length for TP/SL

// Bollinger Bands
basis = ta.sma(src, length)
dev1 = mult1 * ta.stdev(src, length)
dev2 = mult2 * ta.stdev(src, length)

upper_1 = basis + dev1
lower_1 = basis - dev1
upper_2 = basis + dev2
lower_2 = basis - dev2

plot(basis, color=color.blue, title="BB MA")
p1 = plot(upper_1, color=color.new(color.green, 80), title="BB Upper 1")
p2 = plot(lower_1, color=color.new(color.green, 80), title="BB Lower 1")
p3 = plot(upper_2, color=color.new(color.red, 80), title="BB Upper 2")
p4 = plot(lower_2, color=color.new(color.red, 80), title="BB Lower 2")

fill(p1, p2, color=color.new(color.green, 90))
fill(p3, p4, color=color.new(color.red, 90))

// Moving Averages
ma_short = ta.sma(close, ma_length)
ma_long = ta.sma(close, ma_long_length)
plot(ma_short, color=color.orange, title="MA Short")
plot(ma_long, color=color.yellow, title="MA Long")

// OBV and Smoothing
obv = ta.cum(ta.change(close) > 0 ? volume : ta.change(close) < 0 ? -volume : 0)
obv_smooth = ta.sma(obv, obv_smoothing)

// Debugging: Buy/Sell Signals
debugBuy = ta.crossover(close, ma_short)
debugSell = ta.crossunder(close, ma_short)

// Woodies CCI
cciTurboLength = 6
cci14Length = 14
cciTurbo = ta.cci(src, cciTurboLength)
cci14 = ta.cci(src, cci14Length)

// Filter: Only allow trades when CCI confirms the signal
cciBuyFilter = cciTurbo > 0 and cci14 > 0
cciSellFilter = cciTurbo < 0 and cci14 < 0

finalBuySignal = debugBuy and cciBuyFilter
finalSellSignal = debugSell and cciSellFilter

// Plot Debug Buy/Sell Signals
plotshape(finalBuySignal, title="Filtered Buy", location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.normal)
plotshape(finalSellSignal, title="Filtered Sell", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.normal)

// Change candle color based on filtered signals
barcolor(finalBuySignal ? color.lime : finalSellSignal ? color.red : na)

// ATR for Stop Loss and Take Profit
atr = ta.atr(atr_length)
tp_long = close + 2 * atr  // Take Profit for Long = 2x ATR
sl_long = close - 1 * atr  // Stop Loss for Long = 1x ATR
tp_short = close - 2 * atr // Take Profit for Short = 2x ATR
sl_short = close + 1 * atr // Stop Loss for Short = 1x ATR

// Strategy Execution
if (finalBuySignal)
    strategy.entry("Buy", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Buy", limit=tp_long, stop=sl_long)

if (finalSellSignal)
    strategy.entry("Sell", strategy.short)
    strategy.exit("Take Profit/Stop Loss", "Sell", limit=tp_short, stop=sl_short)

// Check for BTC/USDT pair
isBTCUSDT = syminfo.ticker == "BTCUSDT"

// Add alerts only for BTC/USDT
alertcondition(isBTCUSDT and finalBuySignal, title="BTCUSDT Buy Signal", message="Buy signal detected for BTCUSDT!")
alertcondition(isBTCUSDT and finalSellSignal, title="BTCUSDT Sell Signal", message="Sell signal detected for BTCUSDT!")