Торговая стратегия с агрегацией объемов и трендов на нескольких таймфреймах

FRVP AVWAP EMA RSI ADX MACD SMA ATR
Дата создания: 2025-04-02 16:15:52 Последнее изменение: 2025-04-02 16:15:52
Копировать: 0 Количество просмотров: 375
2
Подписаться
319
Подписчики

Торговая стратегия с агрегацией объемов и трендов на нескольких таймфреймах Торговая стратегия с агрегацией объемов и трендов на нескольких таймфреймах

Обзор

Это сложная многоиндикаторная торговая стратегия, которая объединяет несколько инструментов технического анализа, таких как средневзвешенная цена (AVWAP), распределение объема сделки с фиксированным диапазоном (FRVP), скользящая средняя величина (EMA), относительно сильный индекс (RSI), средний индекс направления (ADX) и скользящая средняя скользящая дисперсия (MACD), чтобы идентифицировать высоковероятные торговые возможности с помощью агрегирования индикаторов.

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

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

  1. Цена и AVWAP
  2. Расположение цены по отношению к EMA
  3. Оценка силы RSI
  4. Мощность MACD
  5. Сила тренда ADX подтверждена
  6. Количественные фильтры

Стратегия фокусируется на торговых часах в Азии, Лондоне и Нью-Йорке, которые обычно имеют лучшую ликвидность и более надежные торговые сигналы. Входная логика включает в себя две модели: длинные и пустые позиции, а также установлены ступенчатые остановки и остановки убытков.

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

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

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

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

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

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

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

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

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

//@version=6
strategy("FRVP + AVWAP by Grok", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// User Inputs
frvpLength = input.int(20, title="FRVP Length", minval=1)
emaLength = input.int(75, title="EMA Length", minval=1) // Adjusted for stronger trend confirmation
rsiLength = input.int(14, title="RSI Length", minval=1)
adxThreshold = input.int(20, title="ADX Strength Threshold", minval=0, maxval=100)
volumeMultiplier = input.float(1.0, title="Volume Multiplier", minval=0.1)

// Stop Loss & Take Profit for XAUUSD
stopLossPips = 25 // 25 pips SL for Asian, London, NY Sessions
takeProfit1Pips = 35 // TP1 at 35 pips
takeProfit2Pips = 80 // Final TP at 80 pips

// Stop-Loss & Take-Profit Multipliers (XAUUSD: 1 pip = 0.1 points on most platforms)
stopMultiplier = float(stopLossPips) * 0.1
tp1Multiplier = float(takeProfit1Pips) * 0.1
tp2Multiplier = float(takeProfit2Pips) * 0.1

// Indicators
avwap = ta.vwap(close)  // Volume Weighted Average Price (VWAP)
ema = ta.ema(close, emaLength)     // Exponential Moving Average
rsi = ta.rsi(close, rsiLength)     // Relative Strength Index
macdLine = ta.ema(close, 12) - ta.ema(close, 26)  // MACD Line
signalLine = ta.ema(macdLine, 9)   // MACD Signal Line
atr = ta.atr(14)                   // Average True Range

// Average Directional Index (ADX)
adxSmoothing = 14
[diplus, diminus, adx] = ta.dmi(14, adxSmoothing)  // Corrected syntax for ta.dmi()

// Volume Profile (FRVP - Fixed Range Volume Profile Midpoint)
highestHigh = ta.highest(high, frvpLength)
lowestLow = ta.lowest(low, frvpLength)
frvpMid = (highestHigh + lowestLow) / 2  // Midpoint of the range

// Detect Trading Sessions
currentHour = hour(time, "UTC")  // Renamed to avoid shadowing built-in 'hour'
isAsianSession = currentHour >= 0 and currentHour < 8
isLondonSession = currentHour >= 8 and currentHour < 16
isNYSession = currentHour >= 16 and currentHour < 23

// Entry Conditions
longCondition = ta.crossover(close, avwap) and close > ema and rsi > 30 and macdLine > signalLine and adx > adxThreshold
shortCondition = ta.crossunder(close, avwap) and close < ema and rsi < 70 and macdLine < signalLine and adx > adxThreshold

// Volume Filter
avgVolume = ta.sma(volume, 20)     // 20-period Simple Moving Average of volume
volumeFilter = volume > avgVolume * volumeMultiplier  // Trade only when volume exceeds its moving average

// Trade Execution with SL/TP for Sessions
if (longCondition and volumeFilter and (isAsianSession or isLondonSession or isNYSession))
    strategy.entry("LongEntry", strategy.long, qty=100)
    strategy.exit("LongTP1", from_entry="LongEntry", limit=close + tp1Multiplier)
    strategy.exit("LongExit", from_entry="LongEntry", stop=close - stopMultiplier, limit=close + tp2Multiplier)

if (shortCondition and volumeFilter and (isAsianSession or isLondonSession or isNYSession))
    strategy.entry("ShortEntry", strategy.short, qty=100)
    strategy.exit("ShortTP1", from_entry="ShortEntry", limit=close - tp1Multiplier)
    strategy.exit("ShortExit", from_entry="ShortEntry", stop=close + stopMultiplier, limit=close - tp2Multiplier)

// Plotting for Debugging and Visualization
plot(avwap, "AVWAP", color=color.purple, style=plot.style_line, offset=0)
plot(ema, "EMA", color=color.orange, style=plot.style_line, offset=0)
// plot(rsi, "RSI", color=color.yellow, style=plot.style_histogram, offset=0)  // Better in a separate pane
// plot(macdLine, "MACD Line", color=color.blue, style=plot.style_histogram, offset=0)  // Better in a separate pane
// plot(signalLine, "Signal Line", color=color.red, style=plot.style_histogram, offset=0)  // Better in a separate pane
plot(adx, "ADX", color=color.green, style=plot.style_line, offset=0)

// Optional: Plot entry/exit signals for visualization
plotshape(longCondition and volumeFilter ? close : na, title="Long Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.tiny)
plotshape(shortCondition and volumeFilter ? close : na, title="Short Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.tiny)