Система стратегии динамического усреднения стоимости на основе полос Боллинджера и RSI

BB RSI DCA SMA TP
Дата создания: 2024-11-27 16:37:12 Последнее изменение: 2024-11-27 16:37:12
Копировать: 0 Количество просмотров: 466
1
Подписаться
1617
Подписчики

Система стратегии динамического усреднения стоимости на основе полос Боллинджера и RSI

Обзор

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

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

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

  1. Индикатор Брин-Бенд используется для определения диапазона колебаний цены, когда цена касается нижней линии, рассматривается покупка, когда она касается верхней линии, рассматривается продажа
  2. RSI используется для подтверждения состояния перекупа и перепродажи на рынке, когда RSI ниже 25 подтверждает перепродажу, а выше 75 подтверждает перепродажу
  3. Модуль DCA рассчитывает сумму за каждое создание позиции в соответствии с динамикой прав и интересов счета, реализуя адаптивное управление средствами
  4. Модуль Stop-Loss устанавливает целевую прибыль в размере 5% для достижения цели автоматической защиты прибыли
  5. Модуль мониторинга состояния рынка рассчитывает 90-дневные изменения рынка, чтобы помочь определить общую тенденцию
  6. Модуль для отслеживания накопленной прибыли, записывающий прибыль и убытки по каждой сделке, чтобы легко оценить эффективность стратегии

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

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

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

  1. Сигналы, вызванные рыночными потрясениями, могут часто приводить к росту стоимости торгов
  2. RSI может отстать от трендового рынка
  3. Фиксированная стопроцентная остановка может привести к преждевременному выходу из рынка в условиях сильного тренда
  4. Стратегия DCA может привести к большому отступлению в одностороннем падении рынка Для управления рисками рекомендуются следующие меры:
  • Настройка максимального лимита
  • Параметры для динамической корректировки рыночных колебаний
  • Добавить фильтр тренда
  • Внедрение стратегии поэтапного прекращения

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

  1. Динамическая оптимизация параметров:
  • Параметры Брин-полосы могут быть адаптированы к колебаниям
  • RSI может меняться в зависимости от цикла рынка
  • Доля средств DCA может быть скорректирована в зависимости от размера счета
  1. Сигнализация усилена:
  • Подтверждение увеличения громкости
  • Добавление анализа трендовых линий
  • Вместе с другими техническими показателями и перекрестной проверкой
  1. Уровень риска:
  • Осуществление динамического остановки
  • Добавить максимальный контроль отмены
  • Настройка лимита ежедневных потерь

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

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

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

//@version=5
strategy("Combined BB RSI with Cumulative Profit, Market Change, and Futures Strategy (DCA)", shorttitle="BB RSI Combined DCA Strategy", overlay=true)

// Input Parameters
length = input.int(20, title="BB Length")  // Adjusted BB length
mult = input.float(2.5, title="BB Multiplier")  // Adjusted BB multiplier
rsiLength = input.int(14, title="RSI Length")  // Adjusted RSI length
rsiBuyLevel = input.int(25, title="RSI Buy Level")  // Adjusted RSI Buy Level
rsiSellLevel = input.int(75, title="RSI Sell Level")  // Adjusted RSI Sell Level
dcaPositionSizePercent = input.float(1, title="DCA Position Size (%)", tooltip="Percentage of equity to use in each DCA step")
takeProfitPercentage = input.float(5, title="Take Profit (%)", tooltip="Take profit percentage for DCA strategy")

// Calculate DCA position size
equity = strategy.equity  // Account equity
dcaPositionSize = (equity * dcaPositionSizePercent) / 100  // DCA position size as percentage of equity

// Bollinger Bands Calculation
basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)
upper = basis + dev
lower = basis - dev

// RSI Calculation
rsi = ta.rsi(close, rsiLength)

// Plotting Bollinger Bands and RSI levels
plot(upper, color=color.red, title="Bollinger Upper")
plot(lower, color=color.green, title="Bollinger Lower")
hline(rsiBuyLevel, "RSI Buy Level", color=color.green)
hline(rsiSellLevel, "RSI Sell Level", color=color.red)

// Buy and Sell Signals
buySignal = (rsi < rsiBuyLevel and close <= lower)
sellSignal = (rsi > rsiSellLevel and close >= upper)

// DCA Strategy: Enter Long or Short based on signals with calculated position size
if (buySignal)
    strategy.entry("DCA Buy", strategy.long)

if (sellSignal)
    strategy.entry("DCA Sell", strategy.short)

// Take Profit Logic
if (strategy.position_size > 0)  // If long
    strategy.exit("Take Profit Long", from_entry="DCA Buy", limit=close * (1 + takeProfitPercentage / 100))

if (strategy.position_size < 0)  // If short
    strategy.exit("Take Profit Short", from_entry="DCA Sell", limit=close * (1 - takeProfitPercentage / 100))

// Plot Buy/Sell Signals on the chart
plotshape(buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", textcolor=color.white)
plotshape(sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", textcolor=color.white)

// Alerts for Buy/Sell Signals
alertcondition(buySignal, title="Buy Alert", message="Buy Signal Detected")
alertcondition(sellSignal, title="Sell Alert", message="Sell Signal Detected")

// Cumulative Profit Calculation
var float buyPrice = na
var float profit = na
var float cumulativeProfit = 0.0  // Cumulative profit tracker

if (buySignal)
    buyPrice := close
if (sellSignal and not na(buyPrice))
    profit := (close - buyPrice) / buyPrice * 100
    cumulativeProfit := cumulativeProfit + profit  // Update cumulative profit
    label.new(bar_index, high, text="P: " + str.tostring(profit, "#.##") + "%", color=color.blue, style=label.style_label_down)
    buyPrice := na  // Reset buyPrice after sell

// Plot cumulative profit on the chart
var label cumulativeLabel = na
if (not na(cumulativeProfit))
    if not na(cumulativeLabel)
        label.delete(cumulativeLabel)
    cumulativeLabel := label.new(bar_index, high + 10, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "%", color=color.purple, style=label.style_label_up)

// Market Change over 3 months Calculation
threeMonthsBars = 3 * 30 * 24  // Approximation of 3 months in bars (assuming 1 hour per bar)
priceThreeMonthsAgo = request.security(syminfo.tickerid, "D", close[threeMonthsBars])
marketChange = (close - priceThreeMonthsAgo) / priceThreeMonthsAgo * 100

// Plot market change over 3 months
var label marketChangeLabel = na
if (not na(marketChange))
    if not na(marketChangeLabel)
        label.delete(marketChangeLabel)
    marketChangeLabel := label.new(bar_index, high + 20, text="Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.orange, style=label.style_label_up)

// Both labels (cumulative profit and market change) are displayed simultaneously
var label infoLabel = na
if (not na(cumulativeProfit) and not na(marketChange))
    if not na(infoLabel)
        label.delete(infoLabel)
    infoLabel := label.new(bar_index, high + 30, text="Cumulative Profit: " + str.tostring(cumulativeProfit, "#.##") + "% | Market Change (3 months): " + str.tostring(marketChange, "#.##") + "%", color=color.purple, style=label.style_label_upper_right)