Sistem Perdagangan Mengikuti Trend Momentum Purata Pergerakan Dwi dan Pembalikan

移动平均线 RSI ADX ATR 布林带 MA BB 动量 趋势 波动率
Tarikh penciptaan: 2025-05-26 17:32:14 Akhirnya diubah suai: 2025-05-26 17:32:14
Salin: 0 Bilangan klik: 270
2
fokus pada
319
Pengikut

Sistem Perdagangan Mengikuti Trend Momentum Purata Pergerakan Dwi dan Pembalikan Sistem Perdagangan Mengikuti Trend Momentum Purata Pergerakan Dwi dan Pembalikan

Gambaran keseluruhan

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 Strategi

Prinsip-prinsip utama strategi ini adalah mekanisme pengesahan dua kali ganda berdasarkan pengenalan trend dan pengesahan momentum:

  1. 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.

  2. Syarat kemasukan

    • Harga mestilah sama-sama lebih tinggi daripada MA100 dan MA500
    • Keadaan penapisan trend yang boleh dipilih: MA100 > MA500
    • Syarat penapisan RSI yang boleh dipilih: RSI mestilah lebih tinggi daripada rata-rata lancarnya
    • Syarat penapisan ADX yang boleh dipilih: ADX mestilah lebih tinggi daripada rata-rata rata-rata untuk memastikan kekuatan trend
    • Keadaan penapisan ATR pilihan: ATR mestilah lebih tinggi daripada rata-rata rata-rata untuk memastikan turun naik yang mencukupi
  3. Syarat kemasukan kosong

    • Harga mestilah sama-sama di bawah MA100 dan MA500
    • Harga mestilah lebih rendah daripada harga Brin yang turun (yang menunjukkan penjualan berlebihan)
    • RSI mestilah lebih rendah daripada had yang ditetapkan (default 33, yang menunjukkan oversold)
    • Syarat penapisan ATR pilihan
    • Pemblokiran kenaikan kuat: jika MA100 lebih tinggi daripada MA500 melebihi peratusan yang ditetapkan, jangan masuk ke dalam posisi kosong ((Elakkan melakukan shorting dalam trend kenaikan kuat)
  4. Pengurusan risiko dan strategi keluar

    • Hentian berbilang kepala: ditetapkan sebagai peratusan di bawah harga kemasukan (default 3%)
    • Perlawanan tambahan: harga turun ke bawah MA500
    • Hentian kosong: ditetapkan sebagai peratusan di atas harga kemasukan (default 3%)
    • Blankhead Stopper: ditetapkan sebagai peratusan di bawah harga kemasukan (default 4%)
    • Pengurusan dana: 100% dana akaun digunakan secara lalai untuk setiap urus niaga, membolehkan satu kali penambahan piramid

Reka bentuk ini membolehkan strategi untuk menangkap peluang gelombang besar di pasaran yang sedang tren, sambil mencari titik balik dalam keadaan oversold.

Kelebihan Strategik

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. Mekanisme pengesahan bergandaSinyal masuk memerlukan pengesahan bersama beberapa petunjuk teknikal, yang secara ketara mengurangkan kebarangkalian isyarat palsu dan meningkatkan kestabilan strategi.

  7. 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.

Risiko Strategik

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

Arah pengoptimuman strategi

  1. 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).

  2. 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.

  3. 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).

  4. 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.

  5. 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.

  6. 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.

  7. 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.

ringkaskan

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.

Kod sumber strategi
/*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)