Sistem perdagangan trend penyesuaian pelbagai dimensi pintar

FVG RSI MACD VWAP EMA ATR supertrend
Tarikh penciptaan: 2025-02-21 11:37:36 Akhirnya diubah suai: 2025-02-21 11:37:36
Salin: 0 Bilangan klik: 483
2
fokus pada
319
Pengikut

Sistem perdagangan trend penyesuaian pelbagai dimensi pintar Sistem perdagangan trend penyesuaian pelbagai dimensi pintar

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan pintar yang menggabungkan pelbagai petunjuk teknikal untuk mengenal pasti peluang pasaran melalui analisis komprehensif mengenai Jurang Nilai Bersalah (FVG), isyarat trend dan tingkah laku harga. Sistem ini menggunakan mekanisme strategi ganda, menggabungkan ciri-ciri trend dan perdagangan jangkauan, untuk mengoptimumkan prestasi perdagangan melalui pengurusan kedudukan kedudukan dinamik dan mekanisme keluar pelbagai dimensi. Strategi ini memberi tumpuan khusus kepada kawalan risiko, meningkatkan kualiti isyarat melalui penapisan kadar turun naik dan pengesahan jumlah perdagangan.

Prinsip Strategi

Logik utama strategi ini adalah berdasarkan dimensi-dimensi berikut:

  1. Pengenalan celah FVG - mencari peluang dagangan yang berpotensi dengan mengira saiz celah harga
  2. Sistem pengesahan trend - menggabungkan garis purata 200 hari, penunjuk SuperTrend dan MACD untuk mengesahkan trend pasaran
  3. Pengesahan dana pintar - menggunakan RSI untuk melonjakkan pembelian, ketidakseimbangan jumlah transaksi dan pola tingkah laku harga sebagai pemicu perdagangan
  4. Pengurusan kedudukan dinamik - Mengubah saiz kedudukan berdasarkan ATR untuk memastikan keserasian bukaan risiko
  5. Mekanisme keluar bertingkat - menguruskan keluar dagangan dengan menggabungkan tracking stop loss dan target stop loss

Kelebihan Strategik

  1. Adaptif - Strategi dapat menyesuaikan parameter dan kedudukan secara automatik mengikut turun naik pasaran
  2. Kawalan risiko yang sempurna - mengawal risiko melalui pelbagai penapis dan pengurusan kedudukan yang ketat
  3. Kualiti isyarat yang boleh dipercayai - meningkatkan ketepatan isyarat dagangan dengan pengesahan penunjuk pelbagai dimensi
  4. Cara berdagang yang fleksibel - menangkap trend dan peluang yang bergolak
  5. Sains Pengurusan Dana - Menggunakan Pengurusan Risiko Peratusan untuk memastikan penggunaan dana yang rasional

Risiko Strategik

  1. Sensitiviti parameter - tetapan pelbagai parameter mungkin mempengaruhi prestasi strategi dan memerlukan pengoptimuman berterusan
  2. Ketergantungan keadaan pasaran - mungkin terdapat isyarat pecah palsu dalam keadaan pasaran tertentu
  3. Kesan slippage - kemungkinan slippage yang lebih besar di pasaran yang kurang cair
  4. Kompleksiti pengiraan - pengiraan pelbagai petunjuk mungkin menyebabkan kelewatan isyarat
  5. Keperluan kewangan yang tinggi - Strategi pelaksanaan yang lengkap memerlukan modal awal yang besar

Arah pengoptimuman strategi

  1. Optimumkan berat indikator - kaedah pembelajaran mesin boleh diperkenalkan untuk menyesuaikan berat setiap indikator secara dinamik
  2. Peningkatan kesesuaian pasaran - mekanisme penyesuaian diri untuk meningkatkan kadar turun naik pasaran
  3. Peningkatan penapisan isyarat - memperkenalkan lebih banyak petunjuk struktur mikro pasaran
  4. Pengoptimuman mekanisme pelaksanaan - Meningkatkan mekanisme pembahagian pesanan pintar untuk mengurangkan kos kejutan
  5. Peningkatan Kawalan Risiko - Menambah Sistem Pengurusan Bajet Risiko Dinamis

ringkaskan

Strategi ini membina satu sistem perdagangan yang lengkap dengan menggunakan pelbagai petunjuk teknikal dan teknik perdagangan secara bersepadu. Kelebihannya adalah dapat menyesuaikan diri dengan perubahan pasaran sambil mengekalkan kawalan risiko yang ketat. Walaupun terdapat ruang untuk pengoptimuman, secara keseluruhan adalah strategi perdagangan kuantitatif yang dirancang dengan wajar.

Kod sumber strategi
/*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