
Strategi perdagangan kuantitatif yang berselisih dengan pelbagai purata bergerak adalah sistem perdagangan yang komprehensif yang menggabungkan dengan bijak indikator WaveTrend, purata bergerak indeks, isyarat persilangan EMA, penapis kuantitatif, dan mekanisme pengurusan risiko dinamik. Strategi ini mengoptimumkan keputusan perdagangan melalui pengiktirafan trend dan pengurusan kedudukan dinamik, yang digunakan terutamanya untuk jangka masa panjang dan jangka masa panjang.
Mekanisme operasi strategi ini melibatkan beberapa komponen utama:
Pengiktirafan dan isyarat masuk:
Pengesahan pesanan:
Pengurusan kedudukan dinamik:
Mekanisme keluar berdasarkan WaveTrend:
Kadar ganjaran risiko tetap:
Setelah mengkaji kod strategi ini secara mendalam, kita dapat menyimpulkan kelebihan berikut:
Sistem pengesahan bertingkatDengan menggabungkan EMA crossover, arah trend jangka panjang dan pengesahan jumlah transaksi, isyarat salah dikurangkan dengan ketara dan kualiti kemasukan meningkat.
Kawalan risiko yang tepatKelebihan utama strategi ini adalah mekanisme pengurusan risiko yang ketat, yang mengehadkan risiko setiap dagangan dalam peratusan akaun yang ditetapkan (default 3%) yang membolehkan peniaga melindungi modal walaupun dalam kes kerugian berturut-turut.
Pengiraan kedudukan dinamik: Mengubah saiz kedudukan secara automatik berdasarkan turun naik pasaran sebenar, mengelakkan risiko berlebihan atau kekurangan perdagangan yang disebabkan oleh kedudukan tetap.
Strategi Keluar BerbilangMekanisme keluar momentum yang digabungkan dengan indikator WaveTrend dan penutupan kerugian tradisional, memberikan perlindungan berlapis kepada perdagangan, yang dapat mengunci keuntungan dan membatasi kerugian.
Penapisan arah trend: Dengan 200 EMA memastikan arah dagangan selaras dengan trend utama, meningkatkan kadar kemenangan secara ketara.
Beradaptasi dengan perubahan pasaranStrategi ini dapat menyesuaikan diri secara automatik dengan turun naik pasaran dan masih berkesan dalam pelbagai keadaan pasaran.
Walaupun terdapat banyak kelebihan, strategi ini mempunyai beberapa risiko yang berpotensi:
Ketergantungan parameterKesan strategi sangat bergantung kepada tahap yang ditetapkan oleh penunjuk WaveTrend (±47, +53/-63). Parameter ini mungkin perlu disesuaikan dengan keadaan pasaran yang berbeza, dan varieti perdagangan yang berbeza mungkin memerlukan tetapan parameter yang berbeza.
Rata-rata bergerak yang ketinggalan zamanWalaupun EMA bertindak balas lebih cepat daripada SMA, ia masih mempunyai kemunduran yang boleh menyebabkan kehilangan titik perubahan penting atau menghasilkan isyarat kemunduran dalam pasaran yang bergolak.
Ketergantungan jumlahDalam keadaan pasaran tertentu, jumlah dagangan mungkin bukan penunjuk yang boleh dipercayai untuk kekuatan trend, terutamanya dalam pasaran yang kurang cair atau dalam beberapa jenis perdagangan.
Kerumitan pengiraanPerhitungan kedudukan dinamik, walaupun tepat, menambah kerumitan strategi, yang boleh menyebabkan kesilapan pelaksanaan.
Risiko tercetusTetapan stop loss berdasarkan rendah/tinggi terkini mungkin mudah dicetuskan apabila turun naik secara tiba-tiba, menyebabkan fenomena “stop loss hunting”.
Penyelesaian:
Berdasarkan analisis kod, saya berpendapat bahawa strategi ini boleh dioptimumkan dalam beberapa arah:
Parameter penyesuaian: Reka bentuk tahap overbought dan oversold WaveTrend sebagai parameter yang disesuaikan secara automatik berdasarkan turun naik sejarah, dan bukan nilai tetap. Ini dapat menjadikan strategi lebih sesuai dengan kitaran pasaran dan sifat varieti yang berbeza.
Analisis pelbagai kerangka masaMemperkenalkan mekanisme pengesahan pelbagai bingkai masa, seperti menuntut trend bingkai masa yang lebih tinggi untuk selaras dengan arah perdagangan, yang dapat meningkatkan kualiti isyarat dan kadar kemenangan.
Pengiktirafan status pasaran: Tambah klasifikasi keadaan pasaran ((kecenderungan, julat, turun naik tinggi, dan lain-lain), menggunakan logik masuk dan keluar yang berbeza untuk keadaan pasaran yang berbeza.
Pengurusan kerugian pintar: Mempunyai hentian bergerak atau mekanisme hentian pengesanan untuk melindungi keuntungan yang diperoleh apabila trend berkembang, dan tidak hanya bergantung pada isyarat keluar dari penunjuk WaveTrend.
Pengoptimuman Pembelajaran Mesin: Mengenaikan algoritma pembelajaran mesin untuk menyesuaikan parameter secara dinamik, atau meramalkan strategi mana yang mungkin lebih baik dalam keadaan pasaran.
Penyebaran risikoPembaharuan strategi untuk menyokong perdagangan pelbagai jenis dan penyebaran risiko melalui analisis relevansi.
Kekuatan isyarat bertaraf: Kekuatan isyarat digolongkan berdasarkan tahap kepuasan terhadap pelbagai syarat, dan isyarat yang lebih kuat diberikan kedudukan yang lebih besar.
Pengoptimuman ini dapat menjadikan strategi lebih kukuh, mengurangkan penarikan balik, meningkatkan pulangan jangka panjang, dan mengekalkan falsafah utama pengurusan risiko.
Strategi perdagangan kuantitatif yang berlainan dengan pelbagai rata-rata bergerak adalah sistem perdagangan yang direka dengan baik yang menggabungkan beberapa elemen penting analisis teknikal dengan prinsip pengurusan risiko yang ketat. Inovasi terbesarnya adalah menggabungkan ciri-ciri dinamik indikator WaveTrend dengan teknologi pengesanan trend tradisional dan memastikan kawalan risiko setiap perdagangan dalam jangkauan yang ditetapkan melalui pengiraan kedudukan dinamik.
Strategi ini sangat sesuai untuk pedagang jangka menengah dan panjang, terutamanya mereka yang memberi perhatian kepada pengurusan wang dan kawalan risiko. Walaupun tidak ada strategi yang dapat berfungsi dengan baik dalam semua keadaan pasaran, mekanisme pengesahan bertingkat dan pengurusan risiko yang tepat menjadikan sistem ini sebagai alat perdagangan yang berpotensi.
Dengan pengoptimuman dan penyesuaian lanjut, khususnya untuk mencapai penyesuaian penyesuaian parameter dan analisis jangka masa berbilang, strategi ini berpotensi menjadi sistem perdagangan yang komprehensif dan dapat bersaing dalam pelbagai persekitaran pasaran. Akhirnya, strategi ini mengingatkan kita bahawa perdagangan kuantitatif yang berjaya bergantung bukan sahaja pada isyarat masuk yang tepat, tetapi lebih kepada pengurusan risiko yang ketat dan strategi keluar yang dirancang dengan teliti.
/*backtest
start: 2024-05-27 00:00:00
end: 2025-05-25 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("WaveTrend EMA System with 3% Risk", overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10, // Reduced to 10% to align with risk management
commission_type=strategy.commission.percent,
commission_value=0.04)
// --- Inputs ---
riskPercent = input.float(3.0, "Risk %", minval=0.1, maxval=10, step=0.1)
wtObLevel = input(47, "Profit Target Level (Overbought)")
wtOsLevel = input(-47, "Profit Target Level (Oversold)")
ob2 = input.int(53, "Overbought Level 2", minval=0, maxval=100) // Added from new conditions
os2 = input.int(-63, "Oversold Level 2", minval=-100, maxval=0) // Added from new conditions
// --- WaveTrend Indicator ---
n1 = 10
n2 = 21
ap = hlc3
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
wt1 = ta.ema(ci, n2)
// --- Moving Averages ---
ema10 = ta.ema(close, 10)
ema20 = ta.ema(close, 20)
ema200 = ta.ema(close, 200)
// --- Volume Filter ---
volumeSMA = ta.sma(volume, 20)
volumeSurge = volume > volumeSMA
// --- Entry Conditions ---
longCondition = (close > ema200) and ta.crossover(ema10, ema20) and volumeSurge
shortCondition = (close < ema200) and ta.crossunder(ema10, ema20) and volumeSurge
// --- Dynamic Position Sizing ---
var float stopLossPipsLong = na
var float stopLossPipsShort = na
if ta.lowest(low, 5) < close and syminfo.mintick > 0
stopLossPipsLong := (close - ta.lowest(low, 5)) / syminfo.mintick
else
stopLossPipsLong := na
if ta.highest(high, 5) > close and syminfo.mintick > 0
stopLossPipsShort := (ta.highest(high, 5) - close) / syminfo.mintick
else
stopLossPipsShort := na
positionSizeLong = stopLossPipsLong > 0 ? math.round((strategy.equity * riskPercent / 100) / (stopLossPipsLong * syminfo.mintick)) : 0
positionSizeShort = stopLossPipsShort > 0 ? math.round((strategy.equity * riskPercent / 100) / (stopLossPipsShort * syminfo.mintick)) : 0
// --- WaveTrend Exit Conditions ---
exitLong = ta.crossunder(wt1, wtObLevel)
exitShort = ta.crossover(wt1, wtOsLevel)
// --- New Exit Conditions ---
newExitLongSignal = ta.crossunder(wt1, ob2) and wt1[1] > ob2 and (close < ema200) and ta.crossunder(ema10, ema20) and volumeSurge
newExitShortSignal = ta.crossover(wt1, os2) and wt1[1] < os2 and (close > ema200) and ta.crossover(ema10, ema20) and volumeSurge
// --- Combined Exit Conditions ---
finalExitLong = exitLong or newExitLongSignal
finalExitShort = exitShort or newExitShortSignal
// --- Strategy Execution with WaveTrend Exits ---
if longCondition and not na(stopLossPipsLong)
strategy.entry("Long", strategy.long, qty=positionSizeLong)
strategy.exit("XL", "Long", stop=strategy.position_avg_price - stopLossPipsLong * syminfo.mintick, limit=strategy.position_avg_price + (stopLossPipsLong * syminfo.mintick * 2))
if shortCondition and not na(stopLossPipsShort)
strategy.entry("Short", strategy.short, qty=positionSizeShort)
strategy.exit("XS", "Short", stop=strategy.position_avg_price + stopLossPipsShort * syminfo.mintick, limit=strategy.position_avg_price - (stopLossPipsShort * syminfo.mintick * 2))
// --- Additional Exit Logic ---
if finalExitLong and strategy.position_size > 0
strategy.close("Long")
if finalExitShort and strategy.position_size < 0
strategy.close("Short")
// --- Visuals ---
plot(ema10, "EMA 10", color.blue)
plot(ema20, "EMA 20", color.red)
plot(ema200, "EMA 200", color.purple, 2)
plot(wt1, "WaveTrend", color=color.orange)
hline(wtObLevel, "WT OB", color.green, linestyle=hline.style_dotted)
hline(wtOsLevel, "WT OS", color.red, linestyle=hline.style_dotted)
hline(ob2, "OB2", color=color.red, linestyle=hline.style_dotted)
hline(os2, "OS2", color=color.green, linestyle=hline.style_dotted)
// === ALERTS ===
// Alert for Long Entry
alertcondition(longCondition, title="Long Entry Signal", message="WaveTrend Strategy: LONG entry signal")
// Alert for Short Entry
alertcondition(shortCondition, title="Short Entry Signal", message="WaveTrend Strategy: SHORT entry signal")
// Alert for Exit Long
alertcondition(finalExitLong, title="Exit Long Signal", message="WaveTrend Strategy: EXIT LONG")
// Alert for Exit Short
alertcondition(finalExitShort, title="Exit Short Signal", message="WaveTrend Strategy: EXIT SHORT")