Объемный тренд полос Боллинджера, следующий за количественной стратегией

BB RSI EMA SMA SD SL
Дата создания: 2024-11-12 15:53:44 Последнее изменение: 2024-11-12 15:53:44
Копировать: 1 Количество просмотров: 459
1
Подписаться
1617
Подписчики

Объемный тренд полос Боллинджера, следующий за количественной стратегией

Обзор

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

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

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

  1. Используйте бурин с стандартной погрешностью 1,8 для определения диапазона колебаний цены
  2. Сверхпокупка и сверхпродажа с помощью 7-циклического RSI
  3. Опциональная 500-циклическая EMA в качестве фильтра тренда
  4. Условия участия:
    • RSI ниже 25 и цена пробивает Брин-банк
    • Продолжение: RSI выше 75 и цена пробивает Брин-полосу на рельсы
  5. Выход в сторону RSI или обратный прорыв в Бринской полосе
  6. Процентная защита от ущерба

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

  1. Синхронное взаимодействие с несколькими техническими показателями повышает надежность сигналов
  2. Гибкая параметровая настройка позволяет адаптироваться к различным рыночным условиям
  3. Поддержка двусторонних сделок и использование рыночных возможностей
  4. Разнообразие механизмов выхода, адаптированных к различным стилям торговли
  5. Функция фильтрации трендов эффективно снижает ложные сигналы
  6. Устойчивые механизмы обеспечивают хороший контроль риска

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

  1. На нестабильных рынках могут возникать частые ложные сигналы
  2. Несколько индикаторов могут вызвать задержку сигнала
  3. Фиксированный RSI может быть недостаточно гибким в различных рыночных условиях
  4. Параметры Брин-пояса должны быть скорректированы с учетом рыночных колебаний.
  5. Параметры сдерживания убытков могут быть легко активированы при сильных колебаниях

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

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

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

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

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

//@version=5
strategy("Bollinger Bands Scalp Pro", overlay=true)

// Inputs for the strategy
length = input(20, title="Bollinger Band Length")
src = input(close, title="Source")
mult = input(1.8, title="Bollinger Band Multiplier")
rsiLength = input(7, title="RSI Length")
rsiOverbought = input(75, title="RSI Overbought Level")
rsiOversold = input(25, title="RSI Oversold Level")

// Custom RSI exit points
rsiExitLong = input(75, title="RSI Exit for Long (Overbought)")
rsiExitShort = input(25, title="RSI Exit for Short (Oversold)")

// Moving Average Inputs
emaLength = input(500, title="EMA Length")
enableEMAFilter = input.bool(true, title="Enable EMA Filter")

// Exit method: Choose between 'RSI' and 'Bollinger Bands'
exitMethod = input.string("RSI", title="Exit Method", options=["RSI", "Bollinger Bands"])

// Enable/Disable Long and Short trades
enableLong = input.bool(true, title="Enable Long Trades")
enableShort = input.bool(false, title="Enable Short Trades")

// Enable/Disable Stop Loss
enableStopLoss = input.bool(false, title="Enable Stop Loss")
stopLossPercent = input.float(1.0, title="Stop Loss Percentage (%)", minval=0.1) / 100

// Bollinger Bands calculation
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upperBB = basis + dev
lowerBB = basis - dev

// RSI calculation
rsi = ta.rsi(src, rsiLength)

// 200 EMA to filter trades (calculated but only used if enabled)
ema200 = ta.ema(src, emaLength)

// Long condition: RSI below oversold, price closes below the lower Bollinger Band, and optionally price is above the 200 EMA
longCondition = enableLong and (rsi < rsiOversold) and (close < lowerBB) and (not enableEMAFilter or close > ema200)
if (longCondition)
    strategy.entry("Long", strategy.long)

// Short condition: RSI above overbought, price closes above the upper Bollinger Band, and optionally price is below the 200 EMA
shortCondition = enableShort and (rsi > rsiOverbought) and (close > upperBB) and (not enableEMAFilter or close < ema200)
if (shortCondition)
    strategy.entry("Short", strategy.short)

// Stop Loss setup
if (enableStopLoss)
    strategy.exit("Long Exit", "Long", stop = strategy.position_avg_price * (1 - stopLossPercent))
    strategy.exit("Short Exit", "Short", stop = strategy.position_avg_price * (1 + stopLossPercent))

// Exit conditions based on the user's choice of exit method
if (exitMethod == "RSI")
    // Exit based on RSI
    exitLongCondition = rsi >= rsiExitLong
    if (exitLongCondition)
        strategy.close("Long")
    
    exitShortCondition = rsi <= rsiExitShort
    if (exitShortCondition)
        strategy.close("Short")
else if (exitMethod == "Bollinger Bands")
    // Exit based on Bollinger Bands
    exitLongConditionBB = close >= upperBB
    if (exitLongConditionBB)
        strategy.close("Long")
    
    exitShortConditionBB = close <= lowerBB
    if (exitShortConditionBB)
        strategy.close("Short")