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

EMA RSI MACD ATR IST
Дата создания: 2025-02-21 13:15:30 Последнее изменение: 2025-02-21 13:15:30
Копировать: 0 Количество просмотров: 365
2
Подписаться
319
Подписчики

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

Обзор

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

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

Стратегия использует 20 циклов EMA, рассчитываемых по максимуму и минимуму, для формирования каналов, которые вводятся, когда цена прорывает канал и удовлетворяет следующим условиям:

  1. Многоголовый вход: высокая линия EMA на закрытии, RSI в пределах 50-70 и линия MACD на сигнальной линии
  2. Пустой вход: низкая траектория EMA под ценой закрытия, RSI в пределах 30-50, сигнал MACD под линиями
  3. Используйте ATR для динамического расчета стоп-лосса, установив стоп-стоп в соответствии с риском в 2,5 раза больше прибыли
  4. Риск каждой сделки составляет 1% от счета, размер позиции динамически рассчитывается в зависимости от стоп-драйва
  5. Обязательная ликвидация всех позиций в 15:00 по индийскому времени

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

  1. Круговая проверка множества технических показателей для повышения надежности торговых сигналов
  2. Динамические стоп-потери, основанные на ATR, лучше адаптируются к рыночным колебаниям
  3. Фиксированная доля риска к доле риска, эффективное управление риском
  4. Расчет стоимости сделки, включая расчет комиссионных
  5. Запрет на одновременное размещение и предотвращение риска чрезмерного размещения
  6. Фиксированное закрытие, чтобы избежать риска ночного ожидания

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

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-02-21 00:00:00
end: 2024-09-09 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("Intraday 3min EMA HL Strategy v6", 
     overlay=true,
     margin_long=100, 
     margin_short=100,
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     commission_type=strategy.commission.percent,
     commission_value=0.05,
     calc_on_every_tick=false,
     process_orders_on_close=true,
     pyramiding=0)

// Input Parameters
i_emaLength = input.int(20, "EMA Length", minval=5, group="Strategy Parameters")
i_rsiLength = input.int(14, "RSI Length", minval=5, group="Strategy Parameters")
i_atrLength = input.int(14, "ATR Length", minval=5, group="Risk Management")
i_rrRatio = input.float(2.5, "Risk:Reward Ratio", minval=1, maxval=10, step=0.5, group="Risk Management")
i_riskPercent = input.float(1, "Risk % per Trade", minval=0.1, maxval=5, step=0.1, group="Risk Management")

// Time Exit Parameters (IST)
i_exitHour = input.int(15, "Exit Hour (IST)", minval=0, maxval=23, group="Session Rules")
i_exitMinute = input.int(0, "Exit Minute (IST)", minval=0, maxval=59, group="Session Rules")

// Indicator Calculations
emaHigh = ta.ema(high, i_emaLength)
emaLow = ta.ema(low, i_emaLength)

rsi = ta.rsi(close, i_rsiLength)
atr = ta.atr(i_atrLength)

fastMA = ta.ema(close, 12)
slowMA = ta.ema(close, 26)
macdLine = fastMA - slowMA
signalLine = ta.ema(macdLine, 9)

// Time Calculations (UTC to IST Conversion)
istHour = (hour(time) + 5) % 24  // UTC+5
istMinute = minute(time) + 30    // 30 minute offset
istHour += istMinute >= 60 ? 1 : 0
istMinute := istMinute % 60

// Exit Condition
timeExit = istHour > i_exitHour or (istHour == i_exitHour and istMinute >= i_exitMinute)

// Entry Conditions (Multi-line formatting fix)
longCondition = close > emaHigh and
     rsi > 50 and
     rsi < 70 and
     ta.crossover(macdLine, signalLine)

shortCondition = close < emaLow and
     rsi < 50 and
     rsi > 30 and
     ta.crossunder(macdLine, signalLine)

// Risk Calculations
var float entryPrice = na
var float stopLoss = na
var float takeProfit = na
var float posSize = na

// Strategy Logic
if longCondition and not timeExit and strategy.position_size == 0
    entryPrice := close
    stopLoss := math.min(low, entryPrice - atr)
    takeProfit := entryPrice + (entryPrice - stopLoss) * i_rrRatio
    posSize := strategy.equity * i_riskPercent / 100 / (entryPrice - stopLoss)
    strategy.entry("Long", strategy.long, qty=posSize)
    strategy.exit("Long Exit", "Long", stop=stopLoss, limit=takeProfit)

if shortCondition and not timeExit and strategy.position_size == 0
    entryPrice := close
    stopLoss := math.max(high, entryPrice + atr)
    takeProfit := entryPrice - (stopLoss - entryPrice) * i_rrRatio
    posSize := strategy.equity * i_riskPercent / 100 / (stopLoss - entryPrice)
    strategy.entry("Short", strategy.short, qty=posSize)
    strategy.exit("Short Exit", "Short", stop=stopLoss, limit=takeProfit)

// Force Close at Session End
if timeExit
    strategy.close_all()

// Visual Components
plot(emaHigh, "EMA High", color=color.rgb(0, 128, 0), linewidth=2)
plot(emaLow, "EMA Low", color=color.rgb(255, 0, 0), linewidth=2)

plotshape(longCondition, "Long Signal", shape.triangleup, 
  location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition, "Short Signal", shape.triangledown, 
  location.abovebar, color=color.red, size=size.small)

// Debugging Table
var table infoTable = table.new(position.top_right, 3, 3)
if barstate.islast
    table.cell(infoTable, 0, 0, "EMA High: " + str.tostring(emaHigh, "#.00"))
    table.cell(infoTable, 0, 1, "EMA Low: " + str.tostring(emaLow, "#.00"))
    table.cell(infoTable, 0, 2, "Current RSI: " + str.tostring(rsi, "#.00"))