Sistem Perdagangan Momentum Rata-rata Pergerakan Ganda Mengikuti Tren dan Pembalikan

移动平均线 RSI ADX ATR 布林带 MA BB 动量 趋势 波动率
Tanggal Pembuatan: 2025-05-26 17:32:14 Akhirnya memodifikasi: 2025-05-26 17:32:14
menyalin: 0 Jumlah klik: 270
2
fokus pada
319
Pengikut

Sistem Perdagangan Momentum Rata-rata Pergerakan Ganda Mengikuti Tren dan Pembalikan Sistem Perdagangan Momentum Rata-rata Pergerakan Ganda Mengikuti Tren dan Pembalikan

Ringkasan

Sistem perdagangan trend tracking dan reversal ini adalah strategi perdagangan kuantitatif yang komprehensif, yang menggabungkan elemen trend tracking dan reversal trading. Strategi ini menggunakan moving averages dari dua periode yang berbeda (100 dan 500) untuk menentukan arah tren pasar, sambil mengintegrasikan beberapa indikator teknis sebagai kondisi penyaringan, termasuk RSI (indeks relatif kuat dan lemah), ADX (indeks arah rata-rata) dan ATR (nilai rata-rata gelombang nyata). Sistem ini memungkinkan banyak perdagangan arah, baik yang dapat dilakukan dengan kosong atau kosong, dan menerapkan aturan masuk dan keluar yang berbeda sesuai dengan kondisi pasar yang berbeda.

Prinsip Strategi

Prinsip-prinsip inti dari strategi ini adalah mekanisme double-verifikasi yang didasarkan pada identifikasi tren dan konfirmasi momentum:

  1. Identifikasi trenStrategi: Menggunakan Moving Average 100 Periode dan 500 Periode (EMA atau SMA pilihan) untuk menentukan tren pasar. Ketika MA100 berada di atas MA500, dianggap sebagai tren naik; sebaliknya mungkin tren turun.

  2. Syarat Masuk

    • Harga harus lebih tinggi dari MA100 dan MA500
    • Kondisi filter tren yang dapat dipilih: MA100 > MA500
    • Syarat filter RSI yang dapat dipilih: RSI harus lebih tinggi dari rata-rata rata-rata
    • Kondisi penyaringan ADX yang dapat dipilih: ADX harus lebih tinggi dari rata-rata rata-ratanya untuk memastikan kekuatan tren
    • Kondisi penyaringan ATR yang dapat dipilih: ATR harus lebih tinggi dari rata-rata rata-ratanya untuk memastikan volatilitas yang memadai
  3. Syarat untuk masuk dengan kepala kosong

    • Harga harus di bawah MA100 dan MA500
    • Harga harus di bawah Brin yang turun (menunjukkan oversold)
    • RSI harus berada di bawah ambang batas yang ditetapkan (default 33, yang menunjukkan oversold)
    • Kondisi penyaringan ATR yang dapat dipilih
    • Pemblokiran kenaikan kuat: Jika MA100 lebih tinggi dari MA500 melebihi persentase yang ditetapkan, tidak masuk ke posisi kosong ((hindari melakukan shorting dalam tren kenaikan kuat)
  4. Manajemen risiko dan strategi keluar

    • Stop loss multihead: disetel sebagai persentase di bawah harga masuk (default 3%)
    • Banyak pemain tambahan: harga turun di bawah MA500
    • Stop loss: setel sebagai persentase di atas harga masuk (default 3%)
    • Stop head: disetel sebagai persentase di bawah harga masuk (default 4%)
    • Manajemen dana: 100% dana akun digunakan secara default untuk setiap transaksi, memungkinkan penambahan piramida sekali

Desain ini memungkinkan strategi untuk menangkap peluang gelombang besar di pasar yang sedang tren, sekaligus mencari titik balik dalam kondisi oversold.

Keunggulan Strategis

  1. Sangat mudah beradaptasiStrategi: Memberikan kemampuan kustomisasi yang sangat tinggi melalui beberapa filter pilihan (RSI, ADX, ATR) yang dapat disesuaikan dengan lingkungan pasar dan gaya pedagang yang berbeda. Pengguna dapat secara fleksibel mengaktifkan atau mematikan filter ini sesuai dengan kondisi pasar saat ini.

  2. Transaksi dua arahBerbeda dengan trend-following atau reversal system, strategi ini menggabungkan dua metode perdagangan, baik yang dapat dilakukan dalam tren bullish maupun shorting dalam kondisi oversold ekstrem, meningkatkan peluang untuk mendapatkan keuntungan.

  3. Penghakiman Tren Kecerdasan: Menggunakan sistem dual-equilibrium ((MA100 dan MA500) memberikan penilaian tren yang lebih andal, dibandingkan dengan sistem equilibrium tunggal yang lebih mampu menyaring penipuan.

  4. Adaptasi fluktuasi dinamisDengan menggunakan filter ATR, strategi dapat secara otomatis beradaptasi dengan perubahan volatilitas pasar, menghindari perdagangan yang sering terjadi dalam lingkungan yang rendah dan mengurangi biaya transaksi yang tidak perlu.

  5. Mencegah Perburuan BerbalikTrading over the counter menggunakan mekanisme “pemblokiran kenaikan kuat”, yang melarang shorting ketika MA100 lebih tinggi dari MA500 di atas persentase yang ditetapkan, yang efektif menghindari risiko yang disebabkan oleh ketidakseimbangan dalam situasi kenaikan kuat.

  6. Mekanisme multiple confirmationSinyal masuk memerlukan beberapa indikator teknis untuk dikonfirmasi bersama, yang secara signifikan mengurangi probabilitas sinyal palsu dan meningkatkan stabilitas strategi.

  7. Mekanisme FleksibelStrategi: Logika keluar yang berbeda dirancang untuk multihead dan blank, multihead dapat digunakan sebagai stop loss dinamis melalui MA500, sedangkan blank memiliki target stop-loss tetap, sesuai dengan karakteristik perdagangan arah yang berbeda.

Risiko Strategis

  1. Parameter SensitivitasStrategi bergantung pada beberapa parameter teknis dan parameter yang dapat menyebabkan perbedaan yang signifikan dalam hasil pengukuran. Dalam perdagangan nyata, parameter optimal dapat berubah seiring dengan perubahan kondisi pasar, dan ada risiko over-fitting data historis. Solusi adalah menggunakan optimasi bertahap dan pengujian ke depan untuk memverifikasi kehandalan parameter.

  2. Risiko keterlambatanIndikator seperti Moving Average pada dasarnya merupakan indikator yang tertinggal, yang mungkin tidak dapat menangkap titik-titik pergeseran dalam waktu yang tepat di pasar yang sangat berfluktuasi, yang menyebabkan keterlambatan masuk atau keluar. Disarankan untuk mengurangi siklus moving average atau menambahkan indikator utama lainnya di pasar yang sangat berfluktuasi.

  3. Performa yang buruk pada periode transisiPada pasar yang bergoyang atau pada periode konversi tren, strategi dapat menghasilkan sinyal palsu yang sering terjadi, yang menyebabkan kerugian berturut-turut. Solusinya adalah dengan menambahkan mekanisme identifikasi kondisi pasar, yang secara otomatis menurunkan posisi atau menangguhkan perdagangan ketika pasar yang bergoyang diidentifikasi.

  4. Manajemen risikoStrategi menggunakan 100% dana akun secara default, ditambah dengan satu kali penambahan piramida yang diizinkan, kemungkinan penarikan yang lebih besar dalam situasi yang tidak menguntungkan. Disarankan untuk menyesuaikan ukuran posisi sesuai dengan toleransi risiko pribadi, dan menghindari menggunakan seluruh dana dalam perdagangan.

  5. Risiko likuiditas: Pada pasar atau periode yang kurang likuiditas, mungkin menghadapi risiko peningkatan slippage atau tidak dapat bertransaksi dengan harga yang diharapkan.

  6. Risiko dari Black Swan: Stop loss persentase tetap mungkin tidak dapat dilaksanakan secara efektif dalam kondisi pasar yang ekstrim, terutama jika harga melonjak. Disarankan untuk menetapkan batas kerugian maksimum dan mempertimbangkan untuk melindungi risiko ekstrim dari derivatif seperti opsi.

Arah optimasi strategi

  1. Memperkenalkan klasifikasi status pasarStrategi saat ini menggunakan pengaturan parameter yang sama untuk kondisi pasar yang berbeda (trend, oscillation, high volatility, low volatility), Anda dapat mempertimbangkan untuk menambahkan fungsi identifikasi kondisi pasar dan mengoptimalkan kombinasi parameter yang berbeda untuk kondisi yang berbeda. Implementasi spesifik dapat membedakan kondisi pasar melalui indikator volatilitas (seperti persentase ATR) atau indikator kekuatan tren (seperti ADX threshold).

  2. Pengelolaan dana yang optimalStrategi saat ini menggunakan dana akun dengan proporsi tetap, dapat ditingkatkan menjadi manajemen posisi dinamis berdasarkan volatilitas, meningkatkan posisi di lingkungan yang rendah dan mengurangi posisi di lingkungan yang tinggi untuk mencapai keseimbangan risiko. Anda dapat menggunakan nilai relatif ATR untuk secara dinamis menyesuaikan proporsi dana per transaksi.

  3. Tambahkan filter waktuBeberapa pasar mungkin akan berkinerja lebih baik atau lebih buruk pada periode waktu tertentu. Anda dapat menambahkan fitur penyaringan waktu untuk menghindari periode berkinerja buruk dalam sejarah. Ini dapat dilakukan dengan menganalisis kinerja strategi pada periode waktu yang berbeda (seperti waktu perdagangan Asia, Eropa, Amerika Serikat).

  4. Konfirmasi multi-frame waktu: Strategi saat ini hanya berjalan pada satu frame waktu ((3 jam), Anda dapat mempertimbangkan untuk menambahkan pengesahan tren pada frame waktu yang lebih tinggi, dan hanya masuk jika arah tren pada frame waktu yang lebih tinggi sesuai, meningkatkan tingkat kemenangan. Misalnya, sinyal multihead pada grafik 3 jam hanya dijalankan ketika tren di atas.

  5. Stop loss dan stallStop loss dan stop loss diganti dengan persentase tetap berdasarkan volatilitas pasar yang dinamis, sehingga strategi dapat beradaptasi dengan lebih baik dengan lingkungan yang berbeda. Anda dapat menggunakan kelipatan ATR untuk mengatur stop loss dan stop loss, dan secara otomatis memperluas jangkauan stop loss ketika volatilitas meningkat.

  6. Mengintegrasikan indikator emosi: Menambahkan indikator sentimen pasar sebagai filter tambahan, seperti volume perdagangan, tingkat dana (untuk kontrak permanen) atau premi berjangka, untuk menghindari perdagangan yang berlawanan dalam keadaan emosional yang ekstrem. Indikator ini dapat berfungsi sebagai sinyal peringatan bahwa pasar terlalu panas atau terlalu dingin.

  7. Optimalisasi Pembelajaran Mesin: Menggunakan algoritma pembelajaran mesin untuk secara dinamis memilih kombinasi parameter yang optimal, secara otomatis menyesuaikan parameter strategi berdasarkan kondisi pasar terbaru. Hal ini dapat dilakukan dengan mengimplementasikan optimasi parameter atau metode pembelajaran dengan cara menguatkan jendela bergulir.

Meringkaskan

Binary Equity Trend Tracking and Reversal Trading System adalah strategi perdagangan kuantitatif yang dirancang dengan baik, yang menawarkan kemampuan adaptasi dan kustomisasi yang tinggi dengan menggabungkan sistem equity, indikator momentum, dan filter volatilitas, sambil mempertahankan kehalusan strategi. Keunggulan inti dari strategi ini adalah mekanisme pengkonfirmasi ganda dan sistem penyaringan yang fleksibel, yang memungkinkannya untuk beradaptasi dengan lingkungan pasar yang berbeda.

Namun, seperti semua strategi perdagangan, ia juga menghadapi tantangan seperti sensitivitas parameter, keterbelakangan, dan perubahan kondisi pasar. Dengan diperkenalkannya klasifikasi kondisi pasar, manajemen dana dinamis, analisis multi-frame timeframe, dan optimasi pembelajaran mesin, stabilitas dan adaptasi strategi diharapkan dapat ditingkatkan lebih lanjut.

Yang terpenting, trader harus memahami sepenuhnya prinsip dan batasan strategi ini, menyesuaikan sesuai dengan preferensi risiko pribadi dan pengalaman pasar, dan selalu mematuhi prinsip-prinsip manajemen risiko yang ketat. Tidak ada strategi perdagangan yang sempurna, tetapi dengan optimasi terus menerus dan penerapan yang hati-hati, sistem ini dapat menjadi senjata yang kuat dalam toolkit trader.

Kode 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)