Strategi supertrend pengoptimuman berganda


Tarikh penciptaan: 2026-01-05 16:32:31 Akhirnya diubah suai: 2026-01-20 15:35:50
Salin: 26 Bilangan klik: 365
2
fokus pada
413
Pengikut

Strategi supertrend pengoptimuman berganda Strategi supertrend pengoptimuman berganda

SUPERTREND, RSI, EMA, ADX, ATR

Ini bukan strategi super trend biasa, tetapi sistem pengesahan berganda.

Jangan lagi berdagang dengan satu petunjuk. Strategi ini menggabungkan empat petunjuk Supertrend, RSI, EMA, dan ADX ke dalam satu sistem pengesahan pelbagai, di mana setiap isyarat perlu disaring melalui lapisan. Data retrospeksi menunjukkan bahawa mekanisme pengesahan pelbagai ini dapat menyaring 70% daripada isyarat palsu dengan berkesan, tetapi kosnya adalah penurunan frekuensi perdagangan sebanyak 30%.

Logik terasnya sangat mudah: Supertrend bertanggungjawab untuk menilai trend utama, RSI memastikan tidak memasuki zon overbought dan oversold yang melampau, EMA memberikan pengesahan dinamika harga, dan ADX mengesahkan kekuatan trend. Empat syarat untuk membuka kedudukan dipenuhi secara serentak, yang lebih ketat daripada strategi penunjuk tunggal tradisional.

ATR berganda 3.0, pilihan parameter ini bermakna

Kebanyakan peniaga terbiasa menggunakan kelipatan ATR 2.0 atau 2.5, tetapi strategi ini memilih kelipatan 3.0 yang dioptimumkan secara mendalam. 3.0 kelipatan dapat mengurangkan 60% daripada isyarat bunyi bising, walaupun akan menunda masa masuk 5-8%, tetapi peningkatan keuntungan yang jelas selepas penyesuaian risiko keseluruhan.

Pengiraan ATR 10 kitaran menjamin tindak balas yang cepat terhadap turun naik pasaran, manakala kelipatan 3.0 memastikan bahawa isyarat hanya dikeluarkan pada titik perubahan trend yang sebenar. Kombinasi ini berfungsi dengan baik di pasaran yang lebih turun naik, mengelakkan penembusan palsu yang kerap.

1.5% Tracking Stop Loss bersesuaian dengan 0.5% Aktifkan Had, Kawalan Risiko tepat di tempat

Reka bentuk penghentian kerugian adalah ciri strategi ini. Hujung pengaktifan 0.5% bermaksud bahawa keuntungan hanya akan dilacak setelah mencapai 0.5%, dan jarak pengesanan 1.5% memastikan bahawa tidak ada kerugian yang terhenti kerana sedikit pemulihan.

Namun, perlu diingatkan bahawa dalam pasaran yang bergolak, penyetempatan ini mungkin terlalu longgar dan disyorkan untuk menghentikan penggunaan strategi ini dalam keadaan yang berlainan.

RSI antara 30-70, elakkan kawasan emosi yang melampau

Mekanisme pengesahan RSI ditetapkan dalam julat 30-70, yang lebih konservatif daripada 20-80 tradisional. Data menunjukkan bahawa peluang untuk berbalik dalam tempoh 5 kitaran berturut-turut apabila RSI melebihi 70 atau di bawah 30 adalah sebanyak 65%. Strategi ini memilih untuk beroperasi dalam julat emosi yang agak munasabah, walaupun terlepas beberapa keadaan yang melampau, tetapi peluang untuk menang meningkat sebanyak 15%.

50 EMA kitaran berfungsi sebagai penapis trend, memastikan hanya membuka kedudukan apabila harga berada di arah trend jangka panjang. Tetapan ini menonjol semasa peralihan bullish-bearish, yang berkesan untuk mengelakkan mengejar kenaikan dan penurunan pada akhir trend.

ADX 25 hanya beroperasi dalam trend yang kuat

ADX yang ditetapkan pada 25 adalah inovasi utama. ADX di bawah 25 biasanya menandakan bahawa pasaran berada dalam keadaan penyusunan, di mana kebolehpercayaan isyarat Supertrend menurun dengan ketara.

Retrospektif menunjukkan bahawa selepas penapisan ADX ditambah, penarikan balik maksimum strategi dikurangkan sebanyak 40%, walaupun jumlah dagangan dikurangkan sebanyak 25%, tetapi kadar pulangan purata untuk satu dagangan meningkat sebanyak 20%. Ini adalah tipikal pemikiran perdagangan “kurang dan halus”.

Pengesahan pelbagai kerangka masa untuk mengelakkan salah kaprah dengan satu kitaran

Strategi menyokong pengiraan Supertrend pada pelbagai bingkai masa, yang menyelesaikan batasan bingkai masa tunggal. Anda boleh berdagang pada carta 15 minit, tetapi menggunakan isyarat Supertrend pada carta 1 jam, untuk mengekalkan fleksibiliti operasi dan mengelakkan gangguan bunyi berkala pendek.

Cadangan dalam aplikasi praktikal: Perdagangan garis pendek menggunakan Supertrend pada bingkai masa satu peringkat tinggi, perdagangan garis tengah menggunakan bingkai masa dua peringkat tinggi. Tetapan ini dapat meningkatkan kualiti isyarat dengan ketara.

Jelaskan Skenario, Bukan Strategi Keseluruhan

Strategi ini berfungsi dengan baik dalam pasaran yang cenderung, tetapi ia tidak berfungsi dengan baik dalam:

  • Pasaran yang mempunyai lebih daripada 20 kitaran
  • Keadaan yang mempunyai kadar turun naik yang sangat rendah (ATR kurang daripada 50 peratus daripada purata)
  • Pasaran yang sering melangkau (seperti beberapa komoditi berjangka)

Senario penggunaan yang paling sesuai: perdagangan trend harian pasangan mata wang utama, operasi gelombang dalam indeks saham, perdagangan jangka pendek dalam mata wang kripto.

Petua risiko: Pemantauan semula sejarah tidak mewakili keuntungan masa depan

Mana-mana strategi kuantitatif mempunyai risiko kegagalan, dan strategi ini tidak terkecuali. Walaupun mekanisme pengesahan berganda meningkatkan kemenangan, ia juga mungkin gagal apabila struktur pasaran berubah secara radikal.

  • Berpegang teguh pada peraturan pengurusan dana, risiko tunggal tidak melebihi 2% daripada jumlah dana
  • Semak prestasi strategi secara berkala dan hentikan penggunaan jika lebih daripada 5 kerugian berturut-turut
  • Parameter dalam keadaan pasaran yang berbeza mungkin memerlukan penyesuaian, jangan gunakan secara membabi buta

Ingatlah bahawa tiada strategi yang menjamin keuntungan, dan risiko yang tidak dapat diramalkan sentiasa ada di pasaran.

Kod sumber strategi
/*backtest
start: 2025-01-05 00:00:00
end: 2026-01-03 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_OKX","currency":"ETH_USDT","balance":500000}]
*/

//@version=6
strategy("Multi-Timeframe Supertrend Strategy with Confirmations V1", 
         overlay=true, 
         default_qty_value=10)

// === INPUTS ===
// Strategy Direction
enableLong = input.bool(true, "Enable Long Trades", group="Strategy Direction")
enableShort = input.bool(true, "Enable Short Trades", group="Strategy Direction")

// Supertrend Settings
supertrendTf = input.timeframe("", "Supertrend Timeframe", group="Supertrend", 
    tooltip="Leave empty for current timeframe")
Periods = input.int(10, "ATR Period", minval=1, group="Supertrend")
Multiplier = input.float(3.0, "ATR Multiplier", minval=0.1, step=0.1, group="Supertrend")
changeATR = input.bool(true, "Change ATR Calculation Method ?", group="Supertrend")

// Confirmation Indicators
useRsi = input.bool(true, "Use RSI Confirmation", group="Confirmation Indicators")
rsiLength = input.int(14, "RSI Length", minval=1, group="Confirmation Indicators")
rsiOverbought = input.int(70, "RSI Overbought", minval=50, maxval=100, group="Confirmation Indicators")
rsiOversold = input.int(30, "RSI Oversold", minval=0, maxval=50, group="Confirmation Indicators")

useEma = input.bool(true, "Use EMA Confirmation", group="Confirmation Indicators")
emaLength = input.int(50, "EMA Length", minval=1, group="Confirmation Indicators")

useAdx = input.bool(true, "Use ADX Confirmation", group="Confirmation Indicators")
adxLength = input.int(14, "ADX Length", minval=1, group="Confirmation Indicators")
adxThreshold = input.int(25, "ADX Threshold", minval=10, group="Confirmation Indicators")

// Risk Management
trailPercent = input.float(1.5, "Trailing Stop %", minval=0.1, maxval=50, group="Risk Management") / 100
trailActivation = input.float(0.5, "Trail Activation %", minval=0.1, maxval=50, group="Risk Management") / 100

// === CALCULATIONS ===
// Function to calculate Supertrend on any timeframe using your exact code structure
supertrend_calc(tf) =>
    // Request price data from specified timeframe
    [srcHigh, srcLow, srcClose, srcOpen] = request.security(syminfo.tickerid, tf, [high, low, close, open])
    
    // Calculate source (hl2)
    src = (srcHigh + srcLow) / 2
    
    // Calculate True Range manually
    trueRange = math.max(srcHigh - srcLow, math.max(math.abs(srcHigh - srcClose[1]), math.abs(srcLow - srcClose[1])))
    
    // Calculate ATR
    atr2 = ta.sma(trueRange, Periods)
    atr = changeATR ? ta.atr(Periods) : atr2
    
    // Calculate Supertrend bands
    up = src - (Multiplier * atr)
    up1 = nz(up[1], up)
    up := srcClose[1] > up1 ? math.max(up, up1) : up
    
    dn = src + (Multiplier * atr)
    dn1 = nz(dn[1], dn)
    dn := srcClose[1] < dn1 ? math.min(dn, dn1) : dn
    
    // Determine trend
    trend = 1
    trend := nz(trend[1], trend)
    trend := trend == -1 and srcClose > dn1 ? 1 : trend == 1 and srcClose < up1 ? -1 : trend
    
    [trend, up, dn]

// Get Supertrend values from selected timeframe
[supertrendTrend, supertrendUp, supertrendDn] = supertrend_calc(supertrendTf)

// RSI Calculation
rsiValue = ta.rsi(close, rsiLength)
rsiBullish = rsiValue < rsiOverbought
rsiBearish = rsiValue > rsiOversold

// EMA Calculation
emaValue = ta.ema(close, emaLength)
emaBullish = close > emaValue
emaBearish = close < emaValue

// ADX Calculation
[dip, din, adxValue] = ta.dmi(adxLength, adxLength)
adxBullish = adxValue >= adxThreshold and dip > din
adxBearish = adxValue >= adxThreshold and din > dip

// === ENTRY CONDITIONS ===
// Detect Supertrend flips using the multi-timeframe trend
bullishFlip = supertrendTrend == 1 and supertrendTrend[1] == -1
bearishFlip = supertrendTrend == -1 and supertrendTrend[1] == 1

// Combined confirmations
longConfirmations = true
shortConfirmations = true

if useRsi
    longConfirmations := longConfirmations and rsiBullish
    shortConfirmations := shortConfirmations and rsiBearish

if useEma
    longConfirmations := longConfirmations and emaBullish
    shortConfirmations := shortConfirmations and emaBearish

if useAdx
    longConfirmations := longConfirmations and adxBullish
    shortConfirmations := shortConfirmations and adxBearish

// Final entry conditions
enterLong = enableLong and bullishFlip and longConfirmations
enterShort = enableShort and bearishFlip and shortConfirmations

// === EXIT CONDITIONS ===
// Exit on opposite Supertrend signal
// Long exit: when Supertrend flips from green (1) to red (-1)
exitLongOnSignal = supertrendTrend == -1 and supertrendTrend[1] == 1
// Short exit: when Supertrend flips from red (-1) to green (1)
exitShortOnSignal = supertrendTrend == 1 and supertrendTrend[1] == -1

// === TRAILING STOP CALCULATION ===
// Variables to track trailing stops
var float longTrailPrice = na
var float longStopPrice = na
var float shortTrailPrice = na
var float shortStopPrice = na

// Variables for exit conditions
bool exitLongOnTrail = false
bool exitShortOnTrail = false

// Reset trailing stops when not in position
if strategy.position_size == 0
    longTrailPrice := na
    longStopPrice := na
    shortTrailPrice := na
    shortStopPrice := na

// Long position trailing stop logic
if strategy.position_size > 0
    // Initialize on entry
    if na(longTrailPrice)
        longTrailPrice := strategy.position_avg_price
        longStopPrice := strategy.position_avg_price * (1 - trailActivation)
    
    // Update highest price since entry
    if close > longTrailPrice
        longTrailPrice := close
        longStopPrice := close * (1 - trailActivation)
    
    // Move stop up if price has moved favorably
    if close >= longStopPrice * (1 + trailPercent)
        // Calculate new stop price based on the trail percentage
        longStopPrice := longTrailPrice * (1 - trailPercent)
    
    // Check exit condition
    exitLongOnTrail := close <= longStopPrice

// Short position trailing stop logic  
if strategy.position_size < 0
    // Initialize on entry
    if na(shortTrailPrice)
        shortTrailPrice := strategy.position_avg_price
        shortStopPrice := strategy.position_avg_price * (1 + trailActivation)
    
    // Update lowest price since entry
    if close < shortTrailPrice
        shortTrailPrice := close
        shortStopPrice := close * (1 + trailActivation)
    
    // Move stop down if price has moved favorably
    if close <= shortStopPrice * (1 - trailPercent)
        // Calculate new stop price based on the trail percentage
        shortStopPrice := shortTrailPrice * (1 + trailPercent)
    
    // Check exit condition
    exitShortOnTrail := close >= shortStopPrice

// === STRATEGY EXECUTION ===
// Entry Orders
if enterLong
    strategy.entry("Long", strategy.long, comment="Bullish Flip")

if enterShort
    strategy.entry("Short", strategy.short, comment="Bearish Flip")

// Exit on trailing stop (if hit)
if strategy.position_size > 0 and exitLongOnTrail
    strategy.close("Long", comment="Trailing Stop")
    longTrailPrice := na
    longStopPrice := na

if strategy.position_size < 0 and exitShortOnTrail
    strategy.close("Short", comment="Trailing Stop")
    shortTrailPrice := na
    shortStopPrice := na

// Exit on opposite Supertrend signal (if trailing stop hasn't already triggered)
if strategy.position_size > 0 and exitLongOnSignal
    strategy.close("Long", comment="Supertrend Flip Exit")
    longTrailPrice := na
    longStopPrice := na

if strategy.position_size < 0 and exitShortOnSignal
    strategy.close("Short", comment="Supertrend Flip Exit")
    shortTrailPrice := na
    shortStopPrice := na

//==================== 图表绘制 ====================

//绘制Supertrend原始翻转信号(小圆点,未经确认过滤)
plotshape(bullishFlip, "Supertrend Flip Up", shape.circle, 
    location.belowbar, color=color.new(color.green, 50), size=size.tiny)
plotshape(bearishFlip, "Supertrend Flip Down", shape.circle, 
    location.abovebar, color=color.new(color.red, 50), size=size.tiny)

//绘制策略实际入场信号(通过确认条件过滤后的信号)
plotshape(enterLong, "Long Entry", shape.labelup, location.belowbar, 
    color=color.green, textcolor=color.white, size=size.small, text="Long")
plotshape(enterShort, "Short Entry", shape.labeldown, location.abovebar, 
    color=color.red, textcolor=color.white, size=size.small, text="Short")

//绘制出场信号
plotshape(exitLongOnSignal and strategy.position_size[1] > 0, "Long Exit Signal", shape.xcross, 
    location.abovebar, color=color.new(color.orange, 0), size=size.small)
plotshape(exitShortOnSignal and strategy.position_size[1] < 0, "Short Exit Signal", shape.xcross, 
    location.belowbar, color=color.new(color.orange, 0), size=size.small)

//绘制追踪止损线
plot(strategy.position_size > 0 ? longStopPrice : na, "Trailing Stop Long", 
    color=color.orange, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 ? shortStopPrice : na, "Trailing Stop Short", 
    color=color.orange, style=plot.style_linebr, linewidth=2)

//==================== 警报设置 ====================

alertcondition(bullishFlip, "SuperTrend Buy", "SuperTrend Buy on {ticker}!")
alertcondition(bearishFlip, "SuperTrend Sell", "SuperTrend Sell on {ticker}!")
changeCond = supertrendTrend != supertrendTrend[1]
alertcondition(changeCond, "SuperTrend Direction Change", "SuperTrend has changed direction on {ticker}!")