
Strategi perdagangan beradaptasi pelbagai isyarat adalah sistem perdagangan kuantitatif yang komprehensif yang menggabungkan pelbagai indikator analisis teknikal untuk menghasilkan isyarat perdagangan. Strategi ini menggunakan tiga indikator teknikal utama EMA crossover, RSI overbought dan MACD, dan menggabungkan penapis kuantiti perdagangan dan mekanisme pengesahan bingkai masa yang lebih tinggi untuk membentuk sistem perdagangan yang lengkap. Strategi ini juga merangkumi modul pengurusan risiko, menggunakan peratusan yang tetap untuk menghentikan kerugian, halangan dan ATR untuk mengesan kerugian, yang dapat mengawal risiko setiap perdagangan dengan berkesan.
Prinsip teras strategi ini adalah untuk meningkatkan ketepatan keputusan perdagangan melalui gabungan pelbagai isyarat perdagangan. Implementasi spesifiknya adalah sebagai berikut:
Isyarat silang EMAMenggunakan persilangan EMA pantas (kelas 9) dan EMA perlahan (kelas 21) untuk mengenal pasti perubahan trend. Ia menghasilkan isyarat beli apabila EMA pantas melintasi EMA perlahan di atas dan isyarat jual apabila EMA pantas melintasi EMA perlahan di bawah.
RSI melangkaui isyarat jual beli: Menggunakan indikator yang agak kuat ((RSI) untuk mengenal pasti keadaan jual beli di pasaran. Apabila RSI di bawah 30 ((default) dianggap sebagai jual beli, menghasilkan isyarat beli; Apabila RSI di atas 70 ((default) dianggap sebagai jual beli, menghasilkan isyarat jual beli.
Isyarat MACD: Gunakan garis utama penunjuk MACD dan garis isyarat untuk mengesahkan arah trend. Apabila MACD melintasi garis isyarat, ia menghasilkan isyarat beli. Apabila MACD melintasi garis isyarat, ia menghasilkan isyarat jual.
Logik gabungan isyaratStrategi ini menawarkan dua kombinasi - “Any” (segala isyarat mencetuskan) dan “All” (semua isyarat yang diaktifkan mencetuskan pada masa yang sama). Dalam mod “Any”, isyarat perdagangan dihasilkan apabila isyarat yang diaktifkan dicetuskan; dalam mod “All”, isyarat perdagangan dihasilkan apabila isyarat yang diaktifkan dicetuskan pada masa yang sama.
Mekanisme penapis:
Pengurusan kedudukanStrategi menggunakan kaedah peratusan dana untuk menentukan saiz kedudukan untuk setiap urus niaga, menggunakan 10% daripada kepentingan hak akaun secara lalai.
Pengurusan Risiko:
Analisis isyarat multidimensiDengan menggabungkan pelbagai petunjuk teknikal, strategi ini dapat menganalisis pasaran dari pelbagai sudut, mengurangkan kesan isyarat palsu, dan meningkatkan kebolehpercayaan keputusan perdagangan.
Kombinasi isyarat yang fleksibel: Pengguna boleh memilih mod kombinasi isyarat “Any” atau “All” untuk menyesuaikan diri dengan gaya perdagangan dan keadaan pasaran yang berbeza. Dalam pasaran yang lebih bergelombang, mod “All” dapat mengurangkan isyarat salah; dalam trend yang jelas, mod “Any” dapat menangkap peluang dengan lebih sensitif.
Mekanisme penapisan bertingkatFilter kuantiti dagangan dan mekanisme pengesahan jangka masa yang lebih tinggi menambah lapisan pengesahan tambahan, yang berkesan mengurangkan isyarat perdagangan yang salah, terutamanya semasa pasaran menyusun secara mendatar.
Pengurusan risiko yang baikStrategi ini mempunyai sistem kawalan risiko yang lengkap, termasuk stop loss peratusan dan stop loss pelacakan ATR, yang dapat menyesuaikan kedudukan stop loss secara automatik untuk menyesuaikan diri dengan perubahan turun naik pasaran, dan melindungi dana dengan berkesan.
Kustomisasi yang tinggiStrategi membolehkan pengguna menyesuaikan pelbagai parameter, termasuk panjang EMA, nilai RSI, parameter MACD, dan lain-lain, yang membolehkan peniaga mengoptimumkan mengikut gaya perdagangan dan pasaran sasaran mereka sendiri.
Maklum balas visual intuitifStrategi menyediakan petunjuk carta yang jelas, termasuk garis EMA dan panah isyarat beli dan jual, yang membantu pedagang memahami dan menilai isyarat perdagangan secara intuitif.
Parameter optimasi berlebihanParameter yang terlalu optimum boleh menyebabkan strategi berfungsi dengan baik dalam ujian sejarah, tetapi tidak berfungsi dengan baik dalam perdagangan sebenar (risiko overfit). Penyelesaian adalah dengan menggunakan kitaran pengembalian yang cukup lama dan melakukan ujian ketahanan.
Pertembungan isyaratDalam keadaan pasaran tertentu, isyarat yang berbeza mungkin bertentangan, menyebabkan kekeliruan. Sebagai contoh, EMA mungkin menunjukkan trend naik, dan RSI sudah berada di kawasan overbought. Penyelesaian adalah dengan memberi keutamaan isyarat yang jelas atau menggunakan mod “All” untuk memastikan keserasian.
Masalah ketinggalan zamanSemua petunjuk teknikal yang digunakan mempunyai tahap keterlambatan, terutamanya EMA dan MACD. Dalam pasaran yang berubah dengan cepat, ini boleh menyebabkan masa masuk atau keluar yang tidak sesuai. Penyelesaian adalah dengan mempertimbangkan untuk memendekkan kitaran petunjuk atau menggabungkan analisis tingkah laku harga.
Batasan kesesuaian pasaranStrategi ini berfungsi dengan baik di pasaran yang jelas bergaya, tetapi mungkin menghasilkan lebih banyak isyarat salah di pasaran yang bergolak. Penyelesaian adalah dengan menambah penapis kekuatan trend atau menghentikan perdagangan apabila pasaran yang bergolak dikenali.
Risiko kewanganWalaupun strategi ini mengandungi mekanisme hentian, dalam keadaan pasaran yang melampau (seperti kebocoran besar atau kekurangan kecairan), hentian mungkin tidak dapat dilaksanakan seperti yang diharapkan. Penyelesaian adalah dengan mengurangkan peratusan dana untuk setiap urus niaga dengan sewajarnya dan menggunakan tetapan hentian yang lebih konservatif.
Penapis kekuatan trend ditambahPenambahan ADX atau penunjuk yang serupa untuk mengukur kekuatan trend, dan perdagangan hanya apabila trend jelas, dapat mengurangkan isyarat palsu dalam pasaran goyah. Peningkatan ini dapat menyelesaikan masalah strategi yang mudah menghasilkan isyarat salah dalam pasaran terbalik.
Menambah penapis masaPenambahan penapis masa dapat mengelakkan dagangan pada masa yang tidak cekap. Sebagai contoh, anda boleh mengelakkan tempoh turun naik yang tinggi di mana pasaran dibuka dan ditutup, atau hanya aktif pada masa dagangan tertentu.
Pengaturan parameter dinamikPenyesuaian parameter penunjuk secara automatik berdasarkan turun naik pasaran. Sebagai contoh, memanjangkan kitaran EMA dalam persekitaran turun naik yang tinggi dan memendekkan kitaran dalam persekitaran turun naik yang rendah. Penyesuaian adaptasi ini dapat meningkatkan kemampuan strategi untuk menyesuaikan diri dengan keadaan pasaran yang berbeza.
Menambah komponen pembelajaran mesinPentingnya memperkenalkan algoritma pembelajaran mesin untuk mengoptimumkan peruntukan berat isyarat, menyesuaikan isyarat mengikut dinamik prestasi sejarah. Ini membolehkan strategi menyesuaikan logik keputusannya secara automatik dengan perubahan keadaan pasaran.
Pengurusan kedudukan yang lebih baikMembuat penyesuaian kedudukan berdasarkan kadar turun naik, meningkatkan kedudukan dalam persekitaran turun naik rendah dan mengurangkan kedudukan dalam persekitaran turun naik tinggi. Dengan cara ini, anda dapat meningkatkan kecekapan penggunaan dana sambil mengekalkan risiko yang agak tetap.
Menambah penapis asasBagi sesetengah pasaran, gabungan indikator asas (seperti musim kewangan, data ekonomi, dan lain-lain) dapat mengelakkan perdagangan sebelum dan selepas peristiwa ketidakpastian utama, mengurangkan potensi risiko.
Peningkatan strategi penangguhan kerugian: Membuat hentian pintar berdasarkan sokongan dan rintangan, dan bukan hanya bergantung pada peratusan tetap atau kelipatan ATR. Kaedah ini dapat menyesuaikan diri dengan struktur pasaran dengan lebih baik dan mengelakkan hentian yang tidak perlu disebabkan oleh kebisingan pasaran.
Strategi perdagangan beradaptasi pelbagai isyarat adalah sistem perdagangan yang komprehensif dan fleksibel yang menyediakan isyarat perdagangan yang agak dipercayai dengan menggabungkan pelbagai petunjuk teknikal dan mekanisme penapisan. Kelebihan utama strategi ini adalah keupayaan analisis komprehensif dan sistem pengurusan risiko yang baik, yang membolehkannya mengekalkan keberkesanan tertentu dalam keadaan pasaran yang berbeza.
Walau bagaimanapun, strategi ini juga mempunyai beberapa risiko dan batasan yang melekat, seperti kelebihan pengoptimuman parameter dan kelewatan isyarat. Dengan melaksanakan arah pengoptimuman yang disyorkan, khususnya dengan menambah penapis kekuatan trend dan melakukan penyesuaian parameter dinamik, strategi ini dapat meningkatkan lagi kehandalan dan adaptasi.
Pada akhirnya, tidak kira bagaimana strategi yang sempurna, ia perlu disesuaikan dengan keadaan pasaran tertentu dan matlamat perdagangan individu. Pemantauan berterusan terhadap prestasi strategi, penilaian dan pengoptimuman secara berkala, adalah kunci untuk mengekalkan keberkesanan strategi dalam jangka panjang.
/*backtest
start: 2024-04-22 00:00:00
end: 2025-04-21 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"TRX_USD"}]
*/
//@version=5
strategy("Full‑Featured Multi‑Signal Strategy By Andi Tan", overlay=true)
// === POSITION SIZE ===
posPct = input.float(10, "Position Size (% Equity)", minval=0.1, step=0.1)
// === INPUTS SIGNALS ===
useEMA = input.bool(true, "Enable EMA Crossover")
emaFastLen = input.int(9, "EMA Fast Length", minval=1)
emaSlowLen = input.int(21, "EMA Slow Length", minval=1)
useRSI = input.bool(true, "Enable RSI Signal")
rsiLen = input.int(14, "RSI Length", minval=1)
rsiOB = input.int(70, "RSI Overbought", minval=50, maxval=100)
rsiOS = input.int(30, "RSI Oversold", minval=0, maxval=50)
useMACD = input.bool(true, "Enable MACD Signal")
macdFast = input.int(12, "MACD Fast Length", minval=1)
macdSlow = input.int(26, "MACD Slow Length", minval=1)
macdSig = input.int(9, "MACD Signal Length", minval=1)
mode = input.string("Any", "Signal Combination", options=["Any","All"])
showArrows = input.bool(true, "Show Buy/Sell Arrows")
// === RISK MANAGEMENT ===
slPct = input.float(1.0, "Stop‑Loss (%)", minval=0) / 100
tpPct = input.float(2.0, "Take‑Profit (%)", minval=0) / 100
useTrail = input.bool(true, "Enable ATR Trailing Stop")
atrLen = input.int(14, "ATR Length", minval=1)
trailMul = input.float(1.5, "ATR Multiplier", minval=0.1)
// === FILTERS ===
useVolFilt = input.bool(true, "Enable Volume Filter")
volLen = input.int(20, "Volume MA Length", minval=1)
useHigherTF = input.bool(true, "Enable Higher‑TF Confirmation")
higherTF = input.string("60", "Higher‑TF Timeframe", options=["5","15","60","240","D","W"])
// === CALCULATIONS ===
// EMA crossover
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
emaUp = ta.crossover(emaFast, emaSlow)
emaDown = ta.crossunder(emaFast, emaSlow)
// RSI
rsiVal = ta.rsi(close, rsiLen)
rsiBuy = rsiVal < rsiOS
rsiSell = rsiVal > rsiOB
// MACD
[macdLine, macdSignal, _] = ta.macd(close, macdFast, macdSlow, macdSig)
macdBuy = ta.crossover(macdLine, macdSignal)
macdSell = ta.crossunder(macdLine, macdSignal)
// Combine base signals with if…else (bukan ternary terpecah)
var bool buyBase = false
var bool sellBase = false
if mode == "Any"
buyBase := (useEMA and emaUp) or (useRSI and rsiBuy) or (useMACD and macdBuy)
sellBase := (useEMA and emaDown) or (useRSI and rsiSell) or (useMACD and macdSell)
else
buyBase := ((not useEMA) or emaUp) and ((not useRSI) or rsiBuy) and ((not useMACD) or macdBuy)
sellBase := ((not useEMA) or emaDown) and ((not useRSI) or rsiSell) and ((not useMACD) or macdSell)
// Volume filter
volMA = ta.sma(volume, volLen)
buyF = buyBase and (not useVolFilt or volume > volMA)
sellF = sellBase and (not useVolFilt or volume > volMA)
// ——— HIGHER‑TF EMA (dipanggil di top‑scope) ———
htEMA = request.security(syminfo.tickerid, higherTF, ta.ema(close, emaSlowLen))
// Final buy/sell signals
buySignal = buyF and (not useHigherTF or close > htEMA)
sellSignal = sellF and (not useHigherTF or close < htEMA)
// ATR untuk trailing
atrVal = ta.atr(atrLen)
// === ORDERS ===
if buySignal
float qty = (strategy.equity * posPct/100) / close
strategy.entry("Long", strategy.long, qty=qty)
if sellSignal
float qty = (strategy.equity * posPct/100) / close
strategy.entry("Short", strategy.short, qty=qty)
strategy.exit("Exit Long", from_entry="Long",
loss=slPct * close, profit=tpPct * close,
trail_points = useTrail ? atrVal * trailMul : na)
strategy.exit("Exit Short", from_entry="Short",
loss=slPct * close, profit=tpPct * close,
trail_points = useTrail ? atrVal * trailMul : na)
// === PLOTS ===
plot(useEMA ? emaFast : na, title="EMA Fast", color=color.orange)
plot(useEMA ? emaSlow : na, title="EMA Slow", color=color.blue)
plotshape(showArrows and buySignal, title="Buy", location=location.belowbar,
style=shape.arrowup, text="BUY")
plotshape(showArrows and sellSignal, title="Sell", location=location.abovebar,
style=shape.arrowdown, text="SELL")