Strategi dagangan kuantitatif penapisan turun naik silang MACD-RSI rangka masa berbilang masa

MACD RSI VWAP ATR SMA
Tarikh penciptaan: 2025-06-09 15:50:55 Akhirnya diubah suai: 2025-06-09 15:50:55
Salin: 0 Bilangan klik: 326
2
fokus pada
319
Pengikut

Strategi dagangan kuantitatif penapisan turun naik silang MACD-RSI rangka masa berbilang masa Strategi dagangan kuantitatif penapisan turun naik silang MACD-RSI rangka masa berbilang masa

Gambaran keseluruhan

Strategi ini adalah sistem perdagangan kuantitatif berdasarkan analisis pelbagai jangka masa, yang menggunakan indikator MACD, indikator RSI, garis rata-rata VWAP, dan penapis kadar turun naik ATR untuk melakukan perdagangan pada jangka masa 30 minit dan 1 jam. Strategi ini menyokong kedua-dua kenaikan dan penurunan, dengan mengesahkan isyarat silang indikator teknikal pada pelbagai jangka masa, dan menggabungkan penapisan keadaan kadar turun naik untuk meningkatkan kualiti perdagangan.

Prinsip Strategi

Prinsip teras strategi ini adalah untuk menyaring isyarat berkualiti rendah melalui pengesahan berbilang syarat, yang terdiri daripada beberapa komponen utama:

  1. Isyarat silang MACD pelbagai bingkai masa

    • Menggunakan MACD ((12,26,9) pada carta 30 minit untuk mengenal pasti isyarat masuk utama
    • Secara pilihan menggunakan trend MACD 1 jam sebagai syarat pengesahan
  2. RSI lebih banyak membeli lebih banyak menjual

    • 30 minit RSI > 55
    • RSI < 45 memerlukan 30 minit
    • RSI 1 jam disahkan sebagai trend tambahan
  3. Pengesahan kedudukan harga VWAP berganda

    • Harga permintaan berganda di atas 30 minit dan 1 jam VWAP pada masa yang sama
    • Harga permintaan kosong pada masa yang sama berada di bawah 30 minit dan 1 jam VWAP
  4. Penapis kadar turun naik

    • Bandingkan ATR ((14) pada carta 30 minit dengan garis purata 20 kitaran
    • Hanya masuk apabila kadar turun naik semasa lebih besar atau sama dengan nilai purata, mengelakkan isyarat palsu dalam persekitaran turun naik rendah
  5. Mekanisme keluar bertingkat

    • Peratusan Pecutan Tetap ((1.5%) dan Hentikan ((0.5%)
    • 30 minit MACD reverse cross keluar
    • 1 jam MACD trend berbalik keluar

Melalui penapisan dan pengesahan keadaan pelbagai peringkat ini, strategi bertujuan untuk menangkap turun naik jangka pendek dan sederhana dengan arah yang jelas, sambil menapis isyarat berkualiti rendah, meningkatkan kadar kemenangan dan kadar kerugian.

Analisis kelebihan

  1. Pengesahan pelbagai kerangka masaDengan menggabungkan isyarat dalam jangka masa 30 minit dan 1 jam, strategi dapat lebih mengenali trend sebenar dan mengurangkan kesan isyarat palsu. Terutama fungsi pengesahan trend MACD 1 jam, yang membantu mengelakkan perdagangan trend balik.

  2. Kelayakan kadar turun naikPenapis kadar turun naik ATR memastikan bahawa strategi hanya memasuki pasaran apabila terdapat cukup momentum dan mengelakkan perdagangan di kawasan turun naik yang rendah, yang berkesan mengurangkan risiko pergerakan zon mati.

  3. Mekanisme keluar yang fleksibelStrategi ini merangkumi bukan sahaja stop loss tetap, tetapi juga mekanisme keluar dinamik berdasarkan pembalikan indikator, yang membolehkan anda keluar tepat pada masanya apabila harga belum mencapai stop loss tetapi pasaran telah mula berbalik.

  4. Pengesahan kedudukan dua harga: meminta harga berada pada masa yang sama di atas dua bingkai masa VWAP ((melakukan lebih) atau di bawah ((melakukan kosong), yang lebih mengesahkan pergerakan harga dan arah, mengurangkan pecah palsu.

  5. Pengurusan risiko terbina dalamStrategi ini mempunyai mekanisme hentian kerugian dan pengurusan kedudukan (default account equity of 5% per trade) yang membantu mengawal risiko setiap trade dan melindungi modal.

Analisis risiko

  1. Cabaran untuk menang dengan kadar rendahSeperti yang dinyatakan dalam nota kod, strategi mungkin menghadapi masalah dengan kadar kemenangan yang rendah. Ini kerana penyaringan pelbagai syarat meningkatkan kualiti isyarat, tetapi juga mengurangkan frekuensi perdagangan dengan ketara, menyebabkan jumlah sampel yang lebih kecil dan makna statistik yang terhad.

  2. Kepekaan ParameterStrategi menggunakan beberapa parameter yang boleh disesuaikan, termasuk panjang MACD, nilai RSI, parameter penapis ATR, dan lain-lain. Perubahan kecil dalam parameter ini mungkin mempunyai kesan yang ketara terhadap prestasi strategi, dengan risiko terlalu optimum.

  3. Batasan untuk Stop Loss Peratusan TetapPenggunaan stop () 1.5% dan stop () 0.5% yang sama untuk semua keadaan pasaran, mungkin tidak sesuai dengan keadaan kadar turun naik yang berbeza. Dalam pasaran yang bergelombang tinggi, stop mungkin terlalu ketat; dalam pasaran yang bergelombang rendah, stop mungkin terlalu jauh.

  4. Keterlambatan pelbagai kerangka masaPenggunaan isyarat dalam jangka masa yang lebih lama (contohnya 1 jam) sebagai pengesahan mungkin membawa kepada kelewatan, yang menyebabkan kehilangan peluang masuk atau kelewatan keluar.

  5. Kurangnya kemampuan untuk menyesuaikan diri dengan keadaan pasaranStrategi ini tidak mengandungi mekanisme untuk membezakan antara keadaan pasaran yang berbeza (trend/shake) dan mungkin tidak berfungsi dengan baik dalam keadaan pasaran tertentu.

Penyelesaian:

  • Pertimbangkan untuk memperkenalkan mekanisme hentian hentian yang beradaptasi, dengan penyesuaian dinamik berdasarkan ATR atau penunjuk kadar turun naik lain
  • Menambah modul untuk mengiktiraf keadaan pasaran, menyesuaikan parameter strategi atau logik perdagangan dalam keadaan yang berbeza
  • Menerapkan pengujian semula yang lebih ketat dan pengujian ke hadapan untuk mengelakkan pengoptimuman berlebihan
  • Pertimbangkan untuk menambah syarat penapisan perdagangan, seperti penapisan masa atau penapisan kekuatan trend, untuk meningkatkan kualiti isyarat lebih lanjut

Arah pengoptimuman

  1. Pengoptimuman Stop Loss Dinamik: menukar peratusan yang ditetapkan untuk menghentikan stop loss kepada nilai dinamik berdasarkan ATR, contohnya menggunakan 1.5×ATR sebagai stop loss, 3×ATR sebagai stop loss. Ini dapat menjadikan strategi lebih sesuai dengan keadaan pasaran yang berfluktuasi yang berbeza, memberikan stop loss yang lebih longgar pada masa yang berfluktuasi tinggi, dan memperketat sasaran stop loss pada masa yang berfluktuasi rendah.

  2. Klasifikasi persekitaran pasaran: Memperkenalkan mekanisme pengenalan persekitaran pasaran, membezakan pasaran tren dan pasaran goyah. Anda boleh menggunakan ADX, lebar jalur Brin atau hubungan harga dengan purata bergerak jangka panjang untuk mengenal pasti keadaan pasaran, dan menyesuaikan parameter strategi atau bahkan menukar logik perdagangan sepenuhnya.

  3. Pengoptimuman masa masukStrategi semasa: K baris masuk semasa yang berlaku di persimpangan MACD, mungkin menghadapi titik tergelincir atau penundaan pelaksanaan. Pertimbangkan untuk masuk ketika K baris berikutnya dibuka selepas pengesahan persimpangan, atau menetapkan harga had untuk masuk di kawasan harga tertentu untuk mendapatkan harga pelaksanaan yang lebih baik.

  4. Penapis masaMenambah penapis masa dagangan untuk mengelakkan masa dagangan yang tidak cekap tertentu. Sebagai contoh, anda boleh mengelakkan dagangan pada masa yang mungkin kurang cair atau tidak teratur, seperti waktu akhir Asia atau waktu persimpangan Eropah-Amerika.

  5. Parameter penunjuk menyesuaikan diriPerancangan parameter MACD, RSI, dan ATR sebagai nilai penyesuaian sendiri berdasarkan turun naik pasaran terkini atau penyesuaian automatik berkala. Sebagai contoh, parameter MACD yang lebih pendek boleh digunakan di pasaran yang lebih turun naik dan parameter yang lebih panjang digunakan di pasaran yang lebih rendah.

  6. Kekuatan isyarat bertarafMenetapkan sistem penilaian kekuatan untuk isyarat masuk, memberi nilai kepada isyarat berdasarkan pelbagai faktor (seperti saiz badan MACD, penyimpangan RSI, jarak VWAP, dan lain-lain), hanya melakukan perdagangan yang kekuatannya melebihi ambang batas tertentu, atau menyesuaikan saiz kedudukan mengikut dinamik kekuatan isyarat.

  7. Pembelajaran MesinMengenaikan model pembelajaran mesin untuk meramalkan isyarat mana yang lebih mungkin menghasilkan perdagangan yang menguntungkan, mengenal pasti kombinasi pola yang paling berharga berdasarkan model latihan data sejarah. Ini dapat meningkatkan daya serap dan kadar kemenangan strategi.

Arahan pengoptimuman ini bertujuan untuk meningkatkan kestabilan, adaptasi, dan prestasi jangka panjang strategi, sambil mengekalkan logik utamanya. Dengan penambahbaikan ini, strategi dapat bertindak balas dengan lebih baik terhadap perubahan persekitaran dan keadaan pasaran yang berbeza.

ringkaskan

Kerangka masa berbilang Strategi perdagangan penapisan kadar turun naik silang MACD-RSI adalah sistem perdagangan komprehensif yang direka untuk mengenal pasti peluang perdagangan yang berkualiti tinggi dengan menggabungkan pelbagai petunjuk teknikal dan isyarat dari pelbagai bingkai masa. Kelebihan utama strategi ini adalah mekanisme pengesahan isyarat bertingkat dan fungsi pengurusan risiko terbina dalam yang membolehkannya mengawal risiko sambil menangkap turun naik harga.

Walaupun terdapat cabaran yang rendah, strategi ini mengekalkan nilai harapan positif dengan meningkatkan hasil perdagangan keuntungan purata. Dengan melaksanakan langkah-langkah pengoptimuman yang disyorkan, terutamanya stop loss, klasifikasi persekitaran pasaran dan penarafan kekuatan isyarat, prestasi strategi dijangka meningkat lebih lanjut.

Strategi ini sesuai untuk pedagang jangka pendek dan menengah, terutamanya mereka yang mencari kaedah perdagangan sistematik berdasarkan analisis teknikal, dan memberi perhatian kepada pengurusan risiko. Mekanisme pengesahan berbilang syarat strategi ini, walaupun mengurangkan frekuensi perdagangan, meningkatkan kualiti setiap perdagangan, yang selaras dengan falsafah perdagangan “kurang lebih banyak” yang menekankan kualiti dan bukan kuantiti.

Dalam aplikasi praktikal, peniaga disarankan untuk menguji strategi ini di dalam persekitaran simulasi, terutamanya menguji kesan pelbagai langkah pengoptimuman, dan kemudian menerapkannya dengan berhati-hati untuk perdagangan dalam talian. Pada masa yang sama, pemantauan berterusan terhadap perubahan keadaan pasaran, menyesuaikan parameter strategi pada masa yang sesuai, akan membantu mengekalkan prestasi yang stabil dalam jangka panjang.

Kod sumber strategi
/*backtest
start: 2025-01-01 00:00:00
end: 2025-06-08 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © GentlemanOfTrading

//@version=6
strategy(title = "ETH Day Trader", overlay = true, margin_long = 100, margin_short  = 100, default_qty_type  = strategy.percent_of_equity, default_qty_value = 5)

// ==== 1) USER INPUTS ====
// MACD/RSI lengths
fastLen   = input.int(12,   title="MACD Fast EMA Length", minval=1)
slowLen   = input.int(26,   title="MACD Slow EMA Length", minval=1)
signalLen = input.int(9,    title="MACD Signal EMA Length", minval=1)
rsiLen    = input.int(14,   title="RSI Length", minval=1)

// RSI thresholds
rsiThreshLong30 = input.int(55, title="RSI30m > (Long)", minval=1, maxval=100)
rsiThreshShort30= input.int(45, title="RSI30m < (Short)", minval=1, maxval=100)
rsiThresh1h     = input.int(50, title="RSI1h Threshold", minval=1, maxval=100)

// ATR filter (30m)
atrLen     = input.int(14, title="ATR Length (30m)", minval=1)
atrMaLen   = input.int(20, title="ATR MA Length (30m)", minval=1)

// Take Profit / Stop Loss (percent)
tpPerc      = input.float(1.5,  title="Take Profit (%)", minval=0.1) / 100
slPerc      = input.float(0.5,  title="Stop Loss (%)",   minval=0.1) / 100

// Toggle whether to use 1h trend confirmation
use1hTrend  = input.bool(true, title="Use 1h MACD Trend Confirmation?")

// ==== 2) FETCH INDICATORS ON 30m ====
// We assume this script is applied on a chart ≤ 30m (e.g. 15m or 5m), 
// but if you apply it on a 30m chart it still works: security() with "30" just returns the same bar.

[macd30m, macdSig30m, _] = ta.macd(close, fastLen, slowLen, signalLen)
rsi30m                  = ta.rsi(close, rsiLen)
atr30m                  = ta.atr(atrLen)

// ==== 3) FETCH INDICATORS ON 1h & VWAPs via request.security() ====
// --- 1h MACD & RSI ---
[macd1h, macdSig1h, _] = request.security(syminfo.tickerid, "60", ta.macd(close, fastLen, slowLen, signalLen), lookahead=barmerge.lookahead_off)
rsi1h = request.security(syminfo.tickerid, "60", ta.rsi(close, rsiLen), lookahead=barmerge.lookahead_off)

// --- 30m VWAP & 1h VWAP (session VWAP) ---
vwap30m = request.security(syminfo.tickerid, "30", ta.vwap(close), lookahead=barmerge.lookahead_off)
vwap1h  = request.security(syminfo.tickerid, "60", ta.vwap(close), lookahead=barmerge.lookahead_off)

// ==== 4) BUILD VOLATILITY FILTER (30m ATR vs ATR MA) ====
atr30m_ma = ta.sma(atr30m, atrMaLen)
volatilityOK = atr30m >= atr30m_ma

// ==== 5) MULTI-TIMEFRAME CROSS CONDITIONS ====
// 30m MACD cross signals
longCross30m  = ta.crossover(macd30m, macdSig30m)
shortCross30m = ta.crossunder(macd30m, macdSig30m)

// 1h MACD trend confirmation
macdTrendUp1h   = macd1h > macdSig1h
macdTrendDown1h = macd1h < macdSig1h

// ==== 6) ENTRY & EXIT CONDITIONS ====
// LONG ENTRY: 
//   • 30m MACD crossover 
//   • 30m RSI > rsiThreshLong30 
//   • (optionally) 1h MACD line > 1h MACD signal 
//   • Price > 30m VWAP AND Price > 1h VWAP 
//   • 30m ATR ≥ 30m ATR MA (volatility filter)
longEntryCond = 
     longCross30m 
  and (rsi30m > rsiThreshLong30) 
  and (close > vwap30m) 
  and (close > vwap1h) 
  and volatilityOK 
  and (use1hTrend ? macdTrendUp1h : true)

// LONG EXIT: 
//   • fixed TP/SL 
//   OR • 30m MACD crossunder 
//   OR • 1h MACD falls below signal (trend flipped)
var float entryPriceLong = na
longExitCond = false

if (strategy.position_size > 0)
    // Price-based TP / SL checks
    entryPriceLong := nz(entryPriceLong[1], strategy.position_avg_price)
    longTPprice = entryPriceLong * (1 + tpPerc)
    longSLprice = entryPriceLong * (1 - slPerc)
    
    // check TP/SL first
    longExitTP = high >= longTPprice
    longExitSL = low  <= longSLprice
    
    // fallback: MACD crossunder on 30m OR 1h trend flips
    macdTrendFlip1h = macdTrendUp1h and (macd1h < macdSig1h)
    macdCross30m    = shortCross30m
    
    longExitCond := longExitTP or longExitSL or macdCross30m or macdTrendFlip1h
else
    entryPriceLong := na  // reset when no position

// SHORT ENTRY: 
//   • 30m MACD crossunder 
//   • 30m RSI < rsiThreshShort30 
//   • (optionally) 1h MACD line < 1h MACD signal 
//   • Price < 30m VWAP AND Price < 1h VWAP 
//   • 30m ATR ≥ 30m ATR MA (volatility filter)
shortEntryCond = 
     shortCross30m 
  and (rsi30m < rsiThreshShort30) 
  and (close < vwap30m) 
  and (close < vwap1h) 
  and volatilityOK 
  and (use1hTrend ? macdTrendDown1h : true)

// SHORT EXIT: 
//   • fixed TP/SL 
//   OR • 30m MACD crossover 
//   OR • 1h MACD flips up
var float entryPriceShort = na
shortExitCond = false

if (strategy.position_size < 0)
    entryPriceShort := nz(entryPriceShort[1], strategy.position_avg_price)
    shortTPprice = entryPriceShort * (1 - tpPerc)
    shortSLprice = entryPriceShort * (1 + slPerc)
    
    // check TP/SL first
    shortExitTP = low <= shortTPprice
    shortExitSL = high >= shortSLprice
    
    macdTrendFlipUp1h = macdTrendDown1h and (macd1h > macdSig1h)
    macdCrossUp30m    = longCross30m
    
    shortExitCond := shortExitTP or shortExitSL or macdCrossUp30m or macdTrendFlipUp1h
else
    entryPriceShort := na  // reset when no position

// ==== 7) EXECUTE STRATEGY ORDERS WITH LABELS & ALERTS ====
// — Long Entry —
if (longEntryCond and strategy.position_size == 0)
    strategy.entry("Long", strategy.long)
    label.new(bar_index, low, text="Buy (LT)", style=label.style_label_up, color=color.new(color.green, 0), textcolor=color.white, yloc=yloc.belowbar)
    alert("Buy (LT)", alert.freq_once_per_bar_close)

// — Long Exit —
if (strategy.position_size > 0 and longExitCond)
    strategy.close("Long")
    label.new(bar_index, high, text="Sell (LT)", style=label.style_label_down, color=color.new(color.red, 0), textcolor=color.white, yloc=yloc.abovebar)
    alert("Sell (LT)", alert.freq_once_per_bar_close)

// — Short Entry —
if (shortEntryCond and strategy.position_size == 0)
    strategy.entry("Short", strategy.short)
    label.new(bar_index, high, text="Sell (ST)", style=label.style_label_down, color=color.new(color.red, 0), textcolor=color.white, yloc=yloc.abovebar)
    alert("Sell (ST)", alert.freq_once_per_bar_close)

// — Short Exit —
if (strategy.position_size < 0 and shortExitCond)
    strategy.close("Short")
    label.new(bar_index, low, text="Buy (ST)", style=label.style_label_up, color=color.new(color.green, 0), textcolor=color.white, yloc=yloc.belowbar)
    alert("Buy (ST)", alert.freq_once_per_bar_close)


// ==== 8) OPTIONAL PLOTTING (for debugging) ====
// We’ve removed any `transp`/`opacity` arguments. Instead, we use `color.new(baseColor, α)` 
// for transparency, where α = 0 is fully opaque and α = 255 is fully transparent.

// 30m VWAP
plot(vwap30m, title = "VWAP 30m", color = color.new(color.teal, 80)) // ~31% transparentlinewidth= 1

// 1h VWAP
plot(vwap1h,  title = "VWAP 1h",  color = color.new(color.fuchsia, 80), linewidth= 1) // ~31% transparent

// 30m ATR vs ATR_MA
plot(atr30m, title = "ATR 30m", color = color.new(color.orange, 80))
plot(atr30m_ma, title = "ATR30m MA", color = color.new(color.yellow, 80))

// 30m MACD Histogram (bars)
plot(macd30m - macdSig30m, title = "MACD Histogram (30m)", style = plot.style_columns, color = (macd30m - macdSig30m >= 0 ? color.new(color.green, 80) : color.new(color.red, 80)))

// 1h MACD Histogram (area)
h1 = request.security(syminfo.tickerid, "60", macd1h - macdSig1h, lookahead=barmerge.lookahead_off)
plot(1, title = "MACD Hist (1h)", style = plot.style_area, color = (h1 >= 0 ? color.new(color.green, 80) : color.new(color.red, 80)))