
Sistem perdagangan pergerakan trend binari ini adalah strategi perdagangan kuantitatif yang komprehensif yang menggabungkan elemen trend-tracking dan perdagangan reverse. Strategi ini menggunakan purata bergerak dari dua kitaran yang berbeza (indicators 100 dan 500) untuk menentukan arah trend pasaran, sambil mengintegrasikan beberapa petunjuk teknikal sebagai syarat penapis, termasuk RSI (indicators relatif kuat dan lemah), ADX (indicators arah rata-rata) dan ATR (indicators rata-rata gelombang sebenar). Sistem ini membenarkan banyak perdagangan arah, boleh dilakukan dengan banyak atau dengan kosong, dan menggunakan peraturan masuk dan keluar yang berbeza mengikut keadaan pasaran yang berbeza.
Prinsip-prinsip utama strategi ini adalah mekanisme pengesahan dua kali ganda berdasarkan pengenalan trend dan pengesahan momentum:
Pengenalan TrendStrategi: Menggunakan purata bergerak 100 dan 500 kitaran (EMA atau SMA pilihan) untuk menentukan trend pasaran. Apabila MA100 berada di atas MA500, ia dianggap sebagai tren naik; sebaliknya, ia mungkin menjadi tren menurun.
Syarat kemasukan:
Syarat kemasukan kosong:
Pengurusan risiko dan strategi keluar:
Reka bentuk ini membolehkan strategi untuk menangkap peluang gelombang besar di pasaran yang sedang tren, sambil mencari titik balik dalam keadaan oversold.
Sangat boleh menyesuaikan diriStrategi: Memberi kebolehan penyesuaian yang tinggi melalui pelbagai penapis pilihan (RSI, ADX, ATR) yang dapat disesuaikan dengan persekitaran pasaran dan gaya peniaga yang berbeza. Pengguna boleh menghidupkan atau mematikan penapis ini secara fleksibel mengikut keadaan pasaran semasa.
Perdagangan dua halaBerbeza dengan trend-following atau sistem pembalikan, strategi ini menggabungkan dua kaedah perdagangan, yang boleh melakukan lebih banyak dalam trend mendadak, dan boleh melakukan shorting dalam keadaan oversold yang melampau, meningkatkan peluang keuntungan.
Penghakiman Trend KecerdasanPenggunaan dua sistem linear ((MA100 dan MA500) memberikan penghakiman trend yang lebih dipercayai dan lebih baik untuk menyaring penembusan palsu daripada sistem linear tunggal.
Dinamik kadar turun naikDengan menggunakan penapis ATR, strategi dapat menyesuaikan diri dengan perubahan kadar turun naik pasaran secara automatik, mengelakkan perdagangan yang kerap dalam persekitaran turun naik yang rendah, dan mengurangkan kos perdagangan yang tidak perlu.
Mencegah Pembalasan Kekuatan: Perdagangan kosong menyediakan mekanisme “pemblokiran kenaikan kuat”, yang melarang shorting apabila MA100 lebih tinggi daripada MA500 melebihi peratusan yang ditetapkan, yang berkesan mengelakkan risiko yang disebabkan oleh ketidakseimbangan dalam keadaan kenaikan kuat.
Mekanisme pengesahan bergandaSinyal masuk memerlukan pengesahan bersama beberapa petunjuk teknikal, yang secara ketara mengurangkan kebarangkalian isyarat palsu dan meningkatkan kestabilan strategi.
Mekanisme keluar yang fleksibelStrategi: Logik keluar yang berbeza direka untuk multihead dan kosong, multihead boleh digunakan sebagai hentian dinamik melalui MA500, sementara kosong mempunyai sasaran hentian tetap, sesuai dengan ciri perdagangan arah yang berbeza.
Kepekaan ParameterStrategi bergantung kepada pelbagai parameter dan parameter teknikal, di mana perubahan kecil dalam parameter ini boleh menyebabkan perbezaan yang ketara dalam keputusan pengukuran. Dalam perdagangan sebenar, parameter yang optimum mungkin berubah dengan perubahan keadaan pasaran, dengan risiko terlalu sesuai dengan data sejarah. Penyelesaian adalah menggunakan pengoptimuman langkah demi langkah dan pengujian ke hadapan untuk mengesahkan kestabilan parameter.
Risiko ketinggalan zamanPenunjuk seperti purata bergerak pada dasarnya adalah penunjuk yang ketinggalan, yang mungkin tidak dapat menangkap titik-titik perubahan dalam masa yang tepat dalam pasaran yang bergolak, yang menyebabkan kelewatan masuk atau keluar. Adalah disyorkan untuk memendekkan kitaran purata bergerak dengan sewajarnya dalam pasaran yang bergolak tinggi atau menambah penunjuk utama lain.
Keadaan tidak baik dalam tempoh peralihanDalam pasaran yang bergolak atau tempoh peralihan trend, strategi mungkin menghasilkan isyarat palsu yang kerap, yang menyebabkan kerugian berturut-turut. Penyelesaian adalah dengan menambah mekanisme pengenalan keadaan pasaran, secara automatik menurunkan kedudukan atau menangguhkan perdagangan apabila ia dikenali sebagai pasaran yang bergolak.
Risiko pengurusan danaStrategi: menggunakan 100% dana akaun secara lalai, ditambah dengan membolehkan penambahan satu piramida, kemungkinan penarikan balik yang lebih besar dalam keadaan yang tidak baik. Disyorkan untuk menyesuaikan saiz kedudukan mengikut toleransi risiko individu, dan mengelakkan menggunakan semua dana perdagangan.
Risiko kecairanDalam pasaran atau masa yang kurang kecairan, mungkin menghadapi risiko peningkatan slippage atau tidak dapat berdagang pada harga yang diharapkan. Strategi yang disyorkan untuk beroperasi dalam pasangan dan masa perdagangan arus perdana yang mempunyai kecairan yang cukup.
Berbahagian daripada peristiwa Black Swan: Hentian peratusan tetap mungkin tidak dapat dilaksanakan dengan berkesan dalam keadaan pasaran yang melampau, terutamanya jika harga melonjak. Ia disyorkan untuk menetapkan had kerugian maksimum dan mempertimbangkan risiko pelindung yang melampau dengan derivatif seperti pilihan.
Pengenalan klasifikasi keadaan pasaranStrategi semasa menggunakan set parameter yang sama untuk keadaan pasaran yang berbeza (kecenderungan, goyah, turun naik, turun naik), anda boleh mempertimbangkan untuk menambah fungsi pengenalan keadaan pasaran, dan mengoptimumkan kombinasi parameter yang berbeza untuk keadaan yang berbeza. Pelaksanaan khusus dapat memisahkan keadaan pasaran melalui indikator kadar turun naik (seperti peratusan ATR) atau indikator kekuatan trend (seperti ADX threshold).
Pengurusan wang yang optimumStrategi semasa menggunakan dana akaun dengan peratusan tetap, boleh ditingkatkan kepada pengurusan kedudukan dinamik berdasarkan kadar turun naik, meningkatkan kedudukan dalam keadaan turun naik yang rendah, dan mengurangkan kedudukan dalam keadaan turun naik yang tinggi, untuk mencapai keseimbangan risiko. Anda boleh menggunakan nilai relatif ATR untuk menyesuaikan peratusan dana setiap perdagangan secara dinamik.
Menambah penapis masa: Pasaran tertentu mungkin lebih baik atau lebih buruk dalam tempoh masa tertentu, penapis masa boleh ditambah untuk mengelakkan tempoh masa yang kurang baik dalam sejarah. Ini boleh dilakukan dengan menganalisis prestasi strategi dalam tempoh masa yang berbeza (seperti masa perdagangan Asia, Eropah, Amerika Syarikat).
Pengesahan pelbagai kerangka masaStrategi semasa hanya berjalan pada satu bingkai masa ((3 jam), anda boleh mempertimbangkan untuk menambah pengesahan trend pada bingkai masa yang lebih tinggi, masuk hanya apabila arah trend bingkai masa yang lebih tinggi sama, meningkatkan kadar kemenangan. Sebagai contoh, isyarat berbilang kepala pada carta 3 jam hanya dilaksanakan apabila trend naik.
Kerosakan dinamik dan penghentian: Menggantikan peratusan tetap dengan berhenti dan hentian yang dinamik, berdasarkan turun naik pasaran, membolehkan strategi lebih sesuai dengan persekitaran yang bergelombang. Anda boleh menggunakan kelipatan ATR untuk menetapkan titik berhenti dan hentian, secara automatik memperluaskan ruang hentian apabila turun naik meningkat.
Penunjuk emosi bersepaduMenambahkan indikator sentimen pasaran sebagai penapis tambahan, seperti jumlah dagangan, kadar dana (untuk kontrak kekal) atau premium niaga hadapan, untuk mengelakkan dagangan berlawanan dalam keadaan emosi yang melampau. Penunjuk-penunjuk ini boleh berfungsi sebagai isyarat amaran bahawa pasaran terlalu panas atau terlalu sejuk.
Pengoptimuman Pembelajaran Mesin: Menggunakan algoritma pembelajaran mesin untuk secara dinamik memilih kombinasi parameter yang optimum, menyesuaikan parameter strategi secara automatik mengikut keadaan pasaran terkini. Ini boleh dilakukan dengan melaksanakan pengoptimuman parameter atau pembelajaran penguatan tetingkap bergulir.
Sistem perdagangan trend dan pembalikan dua hala adalah strategi perdagangan kuantitatif yang dirancang dengan baik yang menawarkan kemampuan penyesuaian dan penyesuaian yang tinggi dengan menggabungkan sistem garis lurus, penunjuk hala dan penapis kadar turun naik, sambil mengekalkan kesederhanaan strategi. Kelebihan utama strategi ini adalah mekanisme pengesahan ganda dan sistem penapisan yang fleksibel, yang membolehkannya menyesuaikan diri dengan keadaan pasaran yang berbeza.
Walau bagaimanapun, seperti semua strategi perdagangan, ia juga menghadapi cabaran seperti sensitiviti parameter, ketinggalan dan perubahan keadaan pasaran. Kestabilan dan kebolehpasaran strategi dijangka meningkat dengan lebih baik dengan memperkenalkan klasifikasi keadaan pasaran, pengurusan dana dinamik, analisis pelbagai kerangka masa, dan pengoptimuman pembelajaran mesin.
Yang paling penting, peniaga harus memahami sepenuhnya prinsip dan hadnya semasa menggunakan strategi ini, menyesuaikan dengan betul mengikut pilihan risiko peribadi dan pengalaman pasaran, dan selalu mematuhi prinsip pengurusan risiko yang ketat. Tidak ada strategi perdagangan yang sempurna, tetapi dengan pengoptimuman berterusan dan penggunaan yang berhati-hati, sistem ini boleh menjadi senjata yang kuat dalam kotak alat peniaga.
/*backtest
start: 2024-05-26 00:00:00
end: 2025-05-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=6
strategy("Momentum Long + Short Strategy (BTC 3H)", overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
initial_capital=1000,
commission_type=strategy.commission.percent,
commission_value=0.1,
slippage=1,
pyramiding=1)
// ==============================================================================
// === LONG TRADE SETTINGS
// ==============================================================================
enableLongs = input.bool(true, "Enable Long Trades", group="LONG TRADE SETTINGS")
slPercentLong = input.float(3.0, "Long Stop Loss %", minval=0.1, group="LONG TRADE SETTINGS")
useRSIFilter = input.bool(false, "Enable RSI Filter", group="LONG FILTER SETTINGS")
useADXFilter = input.bool(false, "Enable ADX Filter", group="LONG FILTER SETTINGS")
useATRFilter = input.bool(false, "Enable ATR Filter", group="LONG FILTER SETTINGS")
useTrendFilter = input.bool(true, "Require MA100 > MA500", group="LONG FILTER SETTINGS")
smoothType = input.string("EMA", "Smoothing Type", options=["EMA", "SMA"], group="LONG FILTER SETTINGS")
smoothingLength = input.int(100, "Smoothing Length (for filters)", group="LONG FILTER SETTINGS")
rsiLengthLong = input.int(14, "RSI Length", group="RSI FILTER")
adxLength = input.int(14, "ADX Length", group="ADX FILTER")
atrLength = input.int(14, "ATR Length", group="ATR FILTER")
// ==============================================================================
// === SHORT TRADE SETTINGS
// ==============================================================================
enableShorts = input.bool(false, "Enable Short Trades", group="SHORT TRADE SETTINGS")
slPercentShort = input.float(3.0, "Short Stop Loss %", minval=0.1, group="SHORT TRADE SETTINGS")
tpPercentShort = input.float(4.0, "Short Take Profit %", minval=0.1, group="SHORT TRADE SETTINGS")
rsiLengthShort = input.int(14, "RSI Length", group="SHORT FILTER SETTINGS")
rsiThresholdShort = input.float(33, "RSI Threshold", minval=1, maxval=100, group="SHORT FILTER SETTINGS")
bbLength = input.int(20, "Bollinger Band Length", group="SHORT FILTER SETTINGS")
useATRFilterShort = input.bool(true, "Enable ATR Filter (Short)", group="SHORT FILTER SETTINGS")
useStrongUptrendBlock = input.bool(true, "Block Shorts if MA100 > MA500 by (%)", group="SHORT FILTER SETTINGS")
shortTrendGapPct = input.float(2.0, "Threshold (%) for Blocking Shorts", minval=0.1, group="SHORT FILTER SETTINGS")
// ==============================================================================
// === COMMON INDICATORS
// ==============================================================================
ma100 = smoothType == "EMA" ? ta.ema(close, 100) : ta.sma(close, 100)
ma500 = smoothType == "EMA" ? ta.ema(close, 500) : ta.sma(close, 500)
priceAboveMAs = close > ma100 and close > ma500
trendAlignment = not useTrendFilter or ma100 > ma500
plot(ma100, title="MA 100", color=color.orange)
plot(ma500, title="MA 500", color=color.blue)
// ==============================================================================
// === LONG FILTER LOGIC
// ==============================================================================
rsiLong = ta.rsi(close, rsiLengthLong)
rsiSmooth = smoothType == "EMA" ? ta.ema(rsiLong, smoothingLength) : ta.sma(rsiLong, smoothingLength)
rsiPass = not useRSIFilter or rsiLong > rsiSmooth
dmi(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
plusDI = 100 * ta.rma(plusDM, len) / trur
minusDI = 100 * ta.rma(minusDM, len) / trur
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
ta.rma(dx, len)
adx = dmi(adxLength)
adxSmooth = smoothType == "EMA" ? ta.ema(adx, smoothingLength) : ta.sma(adx, smoothingLength)
adxPass = not useADXFilter or adx > adxSmooth
atr = ta.atr(atrLength)
atrSmooth = smoothType == "EMA" ? ta.ema(atr, smoothingLength) : ta.sma(atr, smoothingLength)
atrPass = not useATRFilter or atr > atrSmooth
// ==============================================================================
// === SHORT FILTER LOGIC
// ==============================================================================
rsiShort = ta.rsi(close, rsiLengthShort)
bbBasis = ta.sma(close, bbLength)
bbDev = ta.stdev(close, bbLength)
bbLower = bbBasis - bbDev * 2
priceBelowBB = close < bbLower
priceBelowMAs = close < ma100 and close < ma500
rsiOversold = rsiShort < rsiThresholdShort
atrShort = ta.atr(atrLength)
atrShortSmoothed = smoothType == "EMA" ? ta.ema(atrShort, smoothingLength) : ta.sma(atrShort, smoothingLength)
atrShortPass = not useATRFilterShort or atrShort > atrShortSmoothed
emaGapTooWide = (ma100 - ma500) / ma500 * 100 > shortTrendGapPct
strongUptrendBlock = not useStrongUptrendBlock or not emaGapTooWide
// ==============================================================================
// === ENTRY CONDITIONS
// ==============================================================================
longCondition = enableLongs and priceAboveMAs and trendAlignment and rsiPass and adxPass and atrPass
shortCondition = enableShorts and priceBelowMAs and priceBelowBB and rsiOversold and atrShortPass and strongUptrendBlock
if longCondition
strategy.entry("Long", strategy.long)
if shortCondition
strategy.entry("Short", strategy.short)
// ==============================================================================
// === EXIT CONDITIONS
// ==============================================================================
longStop = strategy.position_avg_price * (1 - slPercentLong / 100)
strategy.exit("SL Long", from_entry="Long", stop=longStop)
if strategy.position_size > 0 and close < ma500
strategy.close("Long", comment="TP Below MA500")
shortStop = strategy.position_avg_price * (1 + slPercentShort / 100)
shortTP = strategy.position_avg_price * (1 - tpPercentShort / 100)
strategy.exit("SL/TP Short", from_entry="Short", stop=shortStop, limit=shortTP)