В процессе загрузки ресурсов... загрузка...

Динамическая система стратегии средней стоимости, основанная на полосах Боллинджера и РСИ

Автор:Чао Чжан, Дата: 2024-11-27 16:37:12
Тэги:ББРСИDCASMAТП

img

Обзор

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

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

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

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

Преимущества стратегии

  1. Взаимная проверка нескольких технических показателей повышает надежность сигнала
  2. Динамическое управление позициями позволяет избежать рисков фиксированной позиции
  3. Разумные условия получения прибыли обеспечивают своевременную прибыль
  4. Мониторинг рыночных тенденций помогает понять общую картину
  5. Комплексная система отслеживания прибыли облегчает анализ стратегии
  6. Хорошо сконфигурированная система оповещения обеспечивает возможности торговли в режиме реального времени

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

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

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

  1. Параметр динамической оптимизации:
  • Параметры Bollinger Bands адаптируются к волатильности
  • Пороги 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)


Связанные

Больше