Интеллектуальная многомерная адаптивная трендовая торговая система

FVG RSI MACD VWAP EMA ATR supertrend
Дата создания: 2025-02-21 11:37:36 Последнее изменение: 2025-02-21 11:37:36
Копировать: 0 Количество просмотров: 483
2
Подписаться
319
Подписчики

Интеллектуальная многомерная адаптивная трендовая торговая система Интеллектуальная многомерная адаптивная трендовая торговая система

Обзор

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

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

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

  1. Идентификация пробелов FVG - поиск потенциальных торговых возможностей путем расчета размера пробелов в цене
  2. Система подтверждения трендов - подтверждение рыночных тенденций в сочетании с 200-дневной средней линией, индикатором SuperTrend и MACD
  3. Умные подтверждения денег - используют RSI для закупки, перепродажи, аномалии объема сделки и модели ценового поведения в качестве условий для сделок
  4. Динамическое управление позициями - изменение размера позиции на основе ATR для обеспечения согласованности рисковых выходов
  5. Многоуровневый механизм выхода - управление выходом из сделки с использованием комбинации стоп-лосса и целевого стоп-стопа

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

  1. Адаптируемость - стратегия может автоматически корректировать параметры и позиции в зависимости от рыночных колебаний
  2. Управление рисками - управление рисками с помощью нескольких фильтров и строгого управления позициями
  3. Надежность качества сигналов - повышение точности торговых сигналов с помощью подтверждения многомерных показателей
  4. Гибкий подход к торговле - возможность одновременно ловить тренды и потрясения
  5. Наука управления капиталом - применение процентного управления рисками для обеспечения рационального использования капитала

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

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

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

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

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

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

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

//@version=6
strategy("Adaptive Trend Signals", overlay=true, margin_long=100, margin_short=100, pyramiding=1, initial_capital=50000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

// 1. Enhanced Inputs with Debugging Options

fvgSize = input.float(0.25, "FVG Size (%)", minval=0.1, step=0.05)
atrPeriod = input.int(14, "ATR Period")  // Increased for better stability
rsiPeriod = input.int(7, "RSI Period")
useSuperTrend = input.bool(true, "Use SuperTrend Filter")
useTrendFilter = input.bool(false, "Use 200 EMA Trend Filter")  // Disabled by default
volatilityThreshold = input.float(1.0, "Volatility Threshold (ATR%)", step=0.1)  // Increased threshold
useVolume = input.bool(true, "Use Volume Confirmation")
riskPercentage = input.float(2.0, "Risk %", minval=0.1, maxval=5)

// 2. Advanced Market Filters with Trend Change Detection
var int marketTrend = 0
var bool trendChanged = false
ema200 = ta.ema(close, 200)
prevMarketTrend = marketTrend
marketTrend := close > ema200 ? 1 : close < ema200 ? -1 : 0
trendChanged := marketTrend != prevMarketTrend

// 3. Enhanced FVG Detection with Adjusted Volume Requirements
bullishFVG = (low[1] > high[2] and (low[1] - high[2])/high[2]*100 >= fvgSize) or 
             (low > high[1] and (low - high[1])/high[1]*100 >= fvgSize)

bearishFVG = (high[1] < low[2] and (low[2] - high[1])/low[2]*100 >= fvgSize) or 
             (high < low[1] and (low[1] - high)/low[1]*100 >= fvgSize)

// 4. Smart Money Confirmation System with Signal Debugging
rsi = ta.rsi(close, rsiPeriod)
[macdLine, signalLine, _] = ta.macd(close, 5, 13, 5)
[supertrendLine, supertrendDir] = ta.supertrend(3, 10)

// Script 2 Indicators
[macdLine2, signalLine2, _] = ta.macd(close, 4, 11, 3)
[supertrendLine2, supertrendDir2] = ta.supertrend(3, 7)
vWAP = ta.vwap(close)
ema21 = ta.ema(close, 21)

// 5. Price Action Filters from Script 2
breakoutLong = close > ta.highest(high, 5) and (useVolume ? volume > ta.sma(volume, 10)*1.8 : true)
breakdownShort = close < ta.lowest(low, 5) and (useVolume ? volume > ta.sma(volume, 10)*1.8 : true)
bullishRejection = low < vWAP and close > (high + low)/2 and close > open
bearishRejection = high > vWAP and close < (high + low)/2 and close < open

// 6. Combined Entry Conditions
longBaseCond = (bullishFVG and rsi < 35 and macdLine > signalLine) or
              (bullishFVG and rsi < 38 and supertrendDir2 == 1) or
              (breakoutLong and macdLine2 > signalLine2) or
              (bullishRejection and close > ema21)

shortBaseCond = (bearishFVG and rsi > 65 and macdLine < signalLine) or
               (bearishFVG and rsi > 62 and supertrendDir2 == -1) or
               (breakdownShort and macdLine2 < signalLine2) or
               (bearishRejection and close < ema21)

longSignal = longBaseCond and (not useSuperTrend or supertrendDir == 1) and (not useTrendFilter or marketTrend == 1)

shortSignal = shortBaseCond and (not useSuperTrend or supertrendDir == -1) and (not useTrendFilter or marketTrend == -1)

// 7. Position Sizing with Minimum Quantity
var float longEntryPrice = na
var float shortEntryPrice = na
atr = ta.atr(atrPeriod)
positionSizeScript1 = math.max(strategy.equity * riskPercentage / 100 / (atr * 1.5), 1)
positionSizeScript2 = strategy.equity * riskPercentage / 100 / (atr * 2)

// 8. Dynamic Exit System with Dual Strategies
var float trailPrice = na
if longSignal or trendChanged and marketTrend == 1
    trailPrice := close
if shortSignal or trendChanged and marketTrend == -1
    trailPrice := close

trailOffset = atr * 0.75

// Script 1 Exit Logic
if strategy.position_size > 0
    trailPrice := math.max(trailPrice, close)
    strategy.exit("Long Exit", "Long", stop=trailPrice - trailOffset, trail_offset=trailOffset)
    
if strategy.position_size < 0
    trailPrice := math.min(trailPrice, close)
    strategy.exit("Short Exit", "Short", stop=trailPrice + trailOffset, trail_offset=trailOffset)

// Script 2 Exit Logic
longStop = close - atr * 1.2
shortStop = close + atr * 1.2
strategy.exit("Long Exit 2", "Long", stop=longStop, limit=na(longEntryPrice) ? na : longEntryPrice + (atr * 4), trail_points=not na(longEntryPrice) and close > longEntryPrice + atr ? atr * 3 : na, trail_offset=atr * 0.8)
strategy.exit("Short Exit 2", "Short", stop=shortStop, limit=na(shortEntryPrice) ? na : shortEntryPrice - (atr * 4), trail_points=not na(shortEntryPrice) and close < shortEntryPrice - atr ? atr * 3 : na, trail_offset=atr * 0.8)

// 9. Trend Change Signals and Visuals
// plot(supertrendLine, "SuperTrend", color=color.new(#2962FF, 0))
// plot(supertrendLine2, "SuperTrend 2", color=color.new(#FF00FF, 0))
// plot(ema200, "200 EMA", color=color.new(#FF6D00, 0))
// plot(ema21, "21 EMA", color=color.new(#00FFFF, 0))

bgcolor(marketTrend == 1 ? color.new(color.green, 90) : 
       marketTrend == -1 ? color.new(color.red, 90) : na)

plotshape(trendChanged and marketTrend == 1, "Bullish Trend", shape.labelup, 
         location.belowbar, color=color.green, text="▲ Trend Up")
plotshape(trendChanged and marketTrend == -1, "Bearish Trend", shape.labeldown, 
         location.abovebar, color=color.red, text="▼ Trend Down")

// 10. Signal Visualization for Both Strategies
// plotshape(longSignal, "Long Entry", shape.triangleup, location.belowbar, 
//          color=color.new(#00FF00, 0), size=size.small)
// plotshape(shortSignal, "Short Entry", shape.triangledown, location.abovebar, 
//          color=color.new(#FF0000, 0), size=size.small)
// plotshape(breakoutLong, "Breakout Long", shape.flag, location.belowbar, 
//          color=color.new(#00FF00, 50), size=size.small)
// plotshape(breakdownShort, "Breakdown Short", shape.flag, location.abovebar, 
//          color=color.new(#FF0000, 50), size=size.small)

// 11. Order Execution with Dual Entry Systems
if trendChanged and marketTrend == 1
    strategy.entry("Long Trend", strategy.long, qty=positionSizeScript1)
    longEntryPrice := close
    
if trendChanged and marketTrend == -1
    strategy.entry("Short Trend", strategy.short, qty=positionSizeScript1)
    shortEntryPrice := close

if longSignal and strategy.position_size == 0
    strategy.entry("Long Signal", strategy.long, qty=positionSizeScript2)
    longEntryPrice := close
    
if shortSignal and strategy.position_size == 0
    strategy.entry("Short Signal", strategy.short, qty=positionSizeScript2)
    shortEntryPrice := close