Стратегия комбинирования нескольких динамических индикаторов

ATR BB ST MA VWMA
Дата создания: 2025-04-01 10:12:19 Последнее изменение: 2025-04-01 10:12:19
Копировать: 4 Количество просмотров: 294
2
Подписаться
319
Подписчики

Стратегия комбинирования нескольких динамических индикаторов Стратегия комбинирования нескольких динамических индикаторов

Обзор

В данной статье рассматривается стратегия комбинированного трейдинга, объединяющая индикаторы Bollinger Bands и SuperTrend. Эта стратегия, объединяя несколько инструментов технического анализа, направлена на то, чтобы обеспечить более точные сигналы входа и выхода на рынок, снижая при этом риск торговли.

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

В основе стратегии лежат две основные части: индикаторы Bollinger Bands и SuperTrend.

  1. Расчетная часть Бринбета:
  • Расчетная линия с использованием конфигурируемой скользящей средней (MA)
  • Производство восходящей и нисходящей орбиты в соответствии со стандартным дифференциальным кратным
  • Поддерживает несколько типов движущихся средних: простые движущиеся средние (SMA), показательные движущиеся средние (EMA), гладкие движущиеся средние (SMMA), весомые движущиеся средние (WMA) и переменные весомые движущиеся средние (VWMA)
  1. На сайте “SuperTrend” можно увидеть:
  • Расчет стоп-поста с использованием среднего реального диапазона колебаний (ATR)
  • Динамика, определяющая направление рыночных тенденций
  • Выполнение сигналов покупки и продажи в зависимости от изменения тренда

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

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

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

  1. Чувствительность параметров: в разных рыночных условиях параметры могут нуждаться в частых корректировках
  2. Ограничения отсчета: исторические данные не указывают на будущее рынка
  3. Риск многополосного переключения: частое переключение позиций может увеличить стоимость сделки
  4. Задержка показателей: существует определенная задержка сигналов в технических показателях

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-04-01 00:00:00
end: 2025-03-31 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Combined BB & New SuperTrend Strategy", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, pyramiding=0)

//============================
// Bollinger Bands Parameters
//============================
lengthBB   = input.int(20, minval=1, title="BB Length")
maType     = input.string("SMA", "BB Basis MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
srcBB      = input(close, title="BB Source")
multBB     = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev Multiplier")
offsetBB   = input.int(0, title="BB Offset", minval=-500, maxval=500)

// Moving average function based on chosen type
ma(source, length, _type) =>
    switch _type
        "SMA"         => ta.sma(source, length)
        "EMA"         => ta.ema(source, length)
        "SMMA (RMA)"  => ta.rma(source, length)
        "WMA"         => ta.wma(source, length)
        "VWMA"        => ta.vwma(source, length)

// Bollinger Bands calculations
basis   = ma(srcBB, lengthBB, maType)
dev     = multBB * ta.stdev(srcBB, lengthBB)
upperBB = basis + dev
lowerBB = basis - dev

// Plot Bollinger Bands
plot(basis, title="BB Basis", color=color.blue, offset=offsetBB)
p1 = plot(upperBB, title="BB Upper", color=color.red, offset=offsetBB)
p2 = plot(lowerBB, title="BB Lower", color=color.green, offset=offsetBB)
fill(p1, p2, title="BB Fill", color=color.new(color.blue, 90))

//============================
// New SuperTrend Parameters & Calculations
// (Based on the new script you provided)
//============================
st_length         = input.int(title="ATR Period", defval=22)
st_mult           = input.float(title="ATR Multiplier", step=0.1, defval=3)
st_src            = input.source(title="SuperTrend Source", defval=hl2)
st_wicks          = input.bool(title="Take Wicks into Account?", defval=true)
st_showLabels     = input.bool(title="Show Buy/Sell Labels?", defval=true)
st_highlightState = input.bool(title="Highlight State?", defval=true)

// Calculate ATR component for SuperTrend
st_atr = st_mult * ta.atr(st_length)

// Price selection based on wicks option
st_highPrice = st_wicks ? high : close
st_lowPrice  = st_wicks ? low  : close
st_doji4price = (open == close and open == low and open == high)

// Calculate SuperTrend stop levels
st_longStop = st_src - st_atr
st_longStopPrev = nz(st_longStop[1], st_longStop)
if st_longStop > 0
    if st_doji4price
        st_longStop := st_longStopPrev
    else
        st_longStop := (st_lowPrice[1] > st_longStopPrev ? math.max(st_longStop, st_longStopPrev) : st_longStop)
else
    st_longStop := st_longStopPrev

st_shortStop = st_src + st_atr
st_shortStopPrev = nz(st_shortStop[1], st_shortStop)
if st_shortStop > 0
    if st_doji4price
        st_shortStop := st_shortStopPrev
    else
        st_shortStop := (st_highPrice[1] < st_shortStopPrev ? math.min(st_shortStop, st_shortStopPrev) : st_shortStop)
else
    st_shortStop := st_shortStopPrev

// Determine trend direction: 1 for bullish, -1 for bearish
var int st_dir = 1
st_dir := st_dir == -1 and st_highPrice > st_shortStopPrev ? 1 : st_dir == 1 and st_lowPrice < st_longStopPrev ? -1 : st_dir

// Define colors for SuperTrend
st_longColor  = color.green
st_shortColor = color.red

// Plot SuperTrend stops
st_longStopPlot  = plot(st_dir == 1 ? st_longStop : na, title="Long Stop", style=plot.style_line, linewidth=2, color=st_longColor)
st_shortStopPlot = plot(st_dir == -1 ? st_shortStop : na, title="Short Stop", style=plot.style_line, linewidth=2, color=st_shortColor)

// Generate SuperTrend signals based on direction change
st_buySignal  = st_dir == 1 and st_dir[1] == -1
st_sellSignal = st_dir == -1 and st_dir[1] == 1

// Optionally plot labels for buy/sell signals
if st_buySignal and st_showLabels
    label.new(bar_index, st_longStop, "Buy", style=label.style_label_up, color=st_longColor, textcolor=color.white, size=size.tiny)
if st_sellSignal and st_showLabels
    label.new(bar_index, st_shortStop, "Sell", style=label.style_label_down, color=st_shortColor, textcolor=color.white, size=size.tiny)

// Fill the state area (optional visual enhancement)
st_midPricePlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=1, display=display.none)
st_longFillColor  = st_highlightState ? (st_dir == 1 ? st_longColor : na) : na
st_shortFillColor = st_highlightState ? (st_dir == -1 ? st_shortColor : na) : na
fill(st_midPricePlot, st_longStopPlot, title="Long State Filling", color=st_longFillColor)
fill(st_midPricePlot, st_shortStopPlot, title="Short State Filling", color=st_shortFillColor)

//============================
// Trading Logic
//============================

// When a bullish reversal occurs, close any short position before entering long.
if st_buySignal
    strategy.close("Short")
    strategy.entry("Long", strategy.long)

// When a bearish reversal occurs, close any long position before entering short.
if st_sellSignal
    strategy.close("Long")
    strategy.entry("Short", strategy.short)

// Exit conditions using Bollinger Bands:
// - For a long position: exit if price reaches (or exceeds) the upper Bollinger Band.
// - For a short position: exit if price reaches (or falls below) the lower Bollinger Band.
if strategy.position_size > 0 and close >= upperBB
    strategy.close("Long", comment="Exit Long via BB Upper")
if strategy.position_size < 0 and close <= lowerBB
    strategy.close("Short", comment="Exit Short via BB Lower")