Динамический алгоритм комбинирования многопериодной трендовой торговой стратегии Supertrend

ATR MTF EMA RSI
Дата создания: 2025-01-06 16:38:12 Последнее изменение: 2025-01-06 16:38:12
Копировать: 2 Количество просмотров: 482
1
Подписаться
1617
Подписчики

Динамический алгоритм комбинирования многопериодной трендовой торговой стратегии Supertrend

Обзор

Стратегия представляет собой адаптивную систему следования за трендом, основанную на мультитаймфреймовом индикаторе Supertrend. Он создает комплексную структуру идентификации тренда путем интеграции сигналов Supertrend из трех различных временных периодов: 15 минут, 5 минут и 2 минуты. Стратегия использует временные фильтры, чтобы гарантировать, что она будет работать только в самые активные часы торговли, и автоматически закрывает позиции в конце дня, чтобы избежать риска переноса позиций на следующий день.

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

Суть стратегии заключается в подтверждении торговых сигналов посредством последовательности тренда в различных временных периодах. Конкретно:

  1. Линия Supertrend рассчитывается для каждого временного периода с использованием периода ATR и коэффициента умножения.
  2. Покупка активируется при появлении бычьих сигналов на всех трех таймфреймах (цена находится выше линии Supertrend).
  3. Продажа активируется, когда цена падает ниже 5-минутной линии Supertrend или достигает конца торгового дня.
  4. Управляйте часами торговли, устанавливая часовой пояс и фильтр торговых сессий (по умолчанию 09:30-15:30).

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

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

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

  1. На нестабильном и нестабильном рынке может генерироваться слишком много торговых сигналов, что приводит к увеличению транзакционных издержек.
  2. Множественные условия фильтрации могут привести к упущению некоторых потенциально прибыльных возможностей.
  3. Зависит от оптимизации параметров, и в различных рыночных условиях может потребоваться корректировка параметров.
  4. Вычислительная сложность высока, и могут возникнуть проблемы с эффективностью выполнения программы.

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

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

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

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

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

//@version=5
strategy("Multi-Timeframe Supertrend Strategy", 
         overlay=true, 
         shorttitle="MTF Supertrend TF", 
         default_qty_type=strategy.percent_of_equity, 
         default_qty_value=100, 
         initial_capital=50000, 
         currency=currency.USD)

// === Input Parameters === //
atrPeriod = input.int(title="ATR Period", defval=10, minval=1)
factor = input.float(title="Factor", defval=3.0, step=0.1)

// === Time Filter Parameters === //
// Define the trading session using input.session
// Format: "HHMM-HHMM", e.g., "0930-1530"
sessionInput = input("0930-1530", title="Trading Session")

// Specify the timezone (e.g., "Europe/Istanbul")
// Refer to the list of supported timezones: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
timezoneInput = input.string("Europe/Istanbul", title="Timezone", tooltip="Specify a valid IANA timezone (e.g., 'Europe/Istanbul', 'America/New_York').")

// === Calculate Supertrend for Different Timeframes === //
symbol = syminfo.tickerid

// 15-Minute Supertrend
[st_15m, dir_15m] = request.security(symbol, "15", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// 5-Minute Supertrend
[st_5m, dir_5m] = request.security(symbol, "5", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// 2-Minute Supertrend
[st_2m, dir_2m] = request.security(symbol, "2", ta.supertrend(factor, atrPeriod), lookahead=barmerge.lookahead_off)

// === Current Timeframe Supertrend === //
[st_current, dir_current] = ta.supertrend(factor, atrPeriod)

// === Time Filter: Check if Current Bar is Within the Trading Session === //
in_session = true

// === Define Trend Directions Based on Supertrend === //
is_up_15m = close > st_15m
is_up_5m  = close > st_5m
is_up_2m  = close > st_2m
is_up_current = close > st_current

// === Buy Condition === //
buyCondition = is_up_15m and is_up_5m and is_up_2m and is_up_current and in_session and strategy.position_size == 0

// === Sell Conditions === //
// 1. Price falls below the 5-minute Supertrend during trading session
sellCondition1 = close < st_5m

// 2. End of Trading Day: Sell at the close of the trading session
is_new_day = ta.change(time("D"))
sellCondition2 = not in_session and is_new_day

// Combined Sell Condition: Only if in Position
sellSignal = (sellCondition1 and in_session) or sellCondition2
sellCondition = sellSignal and strategy.position_size > 0

// === Execute Trades === //
if (buyCondition)
    strategy.entry("Buy", strategy.long)

if (sellCondition)
    strategy.close("Buy")

// === Plot Supertrend Lines === //
// Plotting current timeframe Supertrend
plot(st_current, title="Current TF Supertrend", color=is_up_current ? color.green : color.red, linewidth=2, style=plot.style_line)

// Plotting higher timeframe Supertrend lines
plot(st_15m, title="15m Supertrend", color=is_up_15m ? color.green : color.red, linewidth=1, style=plot.style_line)
plot(st_5m, title="5m Supertrend", color=is_up_5m ? color.green : color.red, linewidth=1, style=plot.style_line)
plot(st_2m, title="2m Supertrend", color=is_up_2m ? color.green : color.red, linewidth=1, style=plot.style_line)

// === Plot Buy and Sell Signals === //
plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, 
          color=color.green, style=shape.labelup, text="BUY", size=size.small)

plotshape(series=sellCondition, title="Sell Signal", location=location.abovebar, 
          color=color.red, style=shape.labeldown, text="SELL", size=size.small)

// === Optional: Background Color to Indicate Position === //
bgcolor(strategy.position_size > 0 ? color.new(color.green, 90) : na, title="In Position Background")

// === Alerts === //
// Create alerts for Buy and Sell signals
alertcondition(buyCondition, title="Buy Alert", message="Buy signal generated by MTF Supertrend Strategy with Time Filter.")
alertcondition(sellCondition, title="Sell Alert", message="Sell signal generated by MTF Supertrend Strategy with Time Filter.")