Sumber dimuat naik... memuat...

Sistem Perdagangan Pengesanan EMA Dual Chain Hybrid Momentum

Penulis:ChaoZhang, Tarikh: 2024-11-29 17:04:57
Tag:EMAMA

img

Ringkasan

Strategi ini adalah sistem dagangan inovatif berdasarkan Exponential Moving Averages (EMA), menangkap peluang pasaran melalui dua rantaian dagangan bebas yang ditetapkan di dalam jangka masa yang berbeza. Strategi ini mengintegrasikan kelebihan trend jangka panjang yang mengikuti dan perdagangan momentum jangka pendek, menghasilkan isyarat dagangan melalui persilangan EMA di dalam jangka masa mingguan, harian, 12 jam, dan 9 jam untuk analisis pasaran berbilang dimensi.

Prinsip Strategi

Strategi ini menggunakan reka bentuk rantaian ganda, dengan setiap rantaian mempunyai logik masuk dan keluar yang unik:

Rantai 1 (Tren jangka panjang) menggunakan jangka masa mingguan dan harian:

  • Isyarat kemasukan: Dihasilkan apabila harga penutupan melintasi EMA pada jangka masa mingguan
  • Isyarat keluar: Dihasilkan apabila harga penutupan melintasi di bawah EMA pada jangka masa harian
  • Tempoh EMA lalai adalah 10, boleh diselaraskan mengikut keperluan

Rantai 2 (Penggerak Jangka Pendek) menggunakan jangka masa 12 jam dan 9 jam:

  • Isyarat kemasukan: Dihasilkan apabila harga penutupan melintasi EMA pada jangka masa 12 jam
  • Isyarat keluar: Dihasilkan apabila harga penutupan melintasi di bawah EMA dalam jangka masa 9 jam
  • Tempoh EMA lalai adalah 9, boleh diselaraskan mengikut keperluan

Kelebihan Strategi

  1. Analisis pasaran berbilang dimensi: Pengambilan trend pasaran yang komprehensif melalui gabungan jangka masa
  2. Kemudahan yang tinggi: Dua rantai boleh diaktifkan atau dilumpuhkan secara bebas
  3. Kawalan risiko yang kukuh: Pengesahan jangka masa berbilang mengurangkan isyarat palsu
  4. Keupayaan penyesuaian parameter yang kuat: Tempoh dan jangka masa EMA boleh diselaraskan
  5. Fungsi backtesting lengkap: Tetapan tempoh ujian terbina dalam untuk pengesahan strategi

Risiko Strategi

  1. Risiko pembalikan trend: Mungkin menunjukkan kelewatan di pasaran yang tidak menentu
  2. Risiko konfigurasi jangka masa: Pasar yang berbeza mungkin memerlukan kombinasi jangka masa yang berbeza
  3. Risiko pengoptimuman parameter: Pengoptimuman berlebihan boleh membawa kepada pemasangan berlebihan
  4. Risiko tumpang tindih isyarat: Pencetus serentak dari kedua-dua rantaian boleh meningkatkan risiko kedudukan

Cadangan kawalan risiko:

  • Tetapkan paras stop loss yang munasabah
  • Penyesuaian parameter berdasarkan ciri pasaran
  • Melakukan pengujian balik yang menyeluruh sebelum perdagangan langsung
  • Pengukuran kedudukan kawalan mengikut dagangan

Arahan Pengoptimuman Strategi

  1. Pengoptimuman Penapisan Isyarat:
  • Tambah mekanisme pengesahan jumlah
  • Menggabungkan penunjuk turun naik
  • Sertakan pengesahan kekuatan trend
  1. Pengoptimuman Kawalan Risiko:
  • Membangunkan mekanisme stop-loss dinamik
  • Sistem pengurusan kedudukan reka bentuk
  • Tambah fungsi kawalan pengeluaran
  1. Pengoptimuman Tempoh:
  • Penyelidikan kombinasi jangka masa yang optimum
  • Membangunkan mekanisme jangka masa penyesuaian
  • Tambah fungsi pengenalan keadaan pasaran

Ringkasan

Sistem Dagangan Pelacakan Momentum EMA Rantai Berganda mencapai analisis pasaran berbilang dimensi melalui gabungan inovatif strategi purata bergerak jangka panjang dan jangka pendek. Reka bentuk sistem ini fleksibel dan boleh disesuaikan mengikut keadaan pasaran dan gaya peniaga yang berbeza, menunjukkan kepraktisan yang kuat. Melalui kawalan risiko yang betul dan pengoptimuman berterusan, strategi ini berpotensi untuk mencapai pulangan yang stabil dalam perdagangan sebenar. Pedagang dinasihatkan untuk melakukan pengujian balik dan pengoptimuman parameter yang menyeluruh sebelum pelaksanaan langsung untuk mencapai hasil perdagangan yang optimum.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='Dual Chain Strategy', shorttitle='DualChain', overlay=true)

// User inputs for enabling/disabling chains
enableChain1 = input.bool(true, title='Enable Chain 1')
enableChain2 = input.bool(true, title='Enable Chain 2')

// User inputs for the first chain
len1 = input.int(10, minval=1, title='Length Chain 1 EMA', group="Chain 1")
src1 = input(close, title='Source Chain 1', group="Chain 1")
tf1_entry = input.timeframe("W", title='Chain 1 Entry Timeframe', group="Chain 1")
tf1_exit = input.timeframe("D", title='Chain 1 Exit Timeframe', group="Chain 1")

// Weekly timeframe EMA for Chain 1
entryEMA1 = request.security(syminfo.tickerid, tf1_entry, ta.ema(src1, len1))

// Daily timeframe EMA for Chain 1
exitEMA1 = request.security(syminfo.tickerid, tf1_exit, ta.ema(src1, len1))

// User inputs for the second chain
len2 = input.int(9, minval=1, title='Length Chain 2 EMA', group="Chain 2")
src2 = input(close, title='Source Chain 2', group="Chain 2")
tf2_entry = input.timeframe("720", title='Chain 2 Entry Timeframe (12H)', group="Chain 2")  // 12 hours
tf2_exit = input.timeframe("540", title='Chain 2 Exit Timeframe (9H)', group="Chain 2")    // 9 hours

// Entry timeframe EMA for Chain 2
entryEMA2 = request.security(syminfo.tickerid, tf2_entry, ta.ema(src2, len2))

// Exit timeframe EMA for Chain 2
exitEMA2 = request.security(syminfo.tickerid, tf2_exit, ta.ema(src2, len2))

// Plotting Chain 1 EMAs
plot(enableChain1 ? entryEMA1 : na, title='Chain 1 Entry EMA', color=color.new(color.blue, 0))
plot(enableChain1 ? exitEMA1 : na, title='Chain 1 Exit EMA', color=color.new(color.yellow, 0))

// Plotting Chain 2 EMAs
plot(enableChain2 ? entryEMA2 : na, title='Chain 2 Entry EMA', color=color.new(color.green, 0))
plot(enableChain2 ? exitEMA2 : na, title='Chain 2 Exit EMA', color=color.new(color.red, 0))

// Backtesting period
startDate = input(timestamp('2015-07-27'), title="StartDate")
finishDate = input(timestamp('2026-01-01'), title="FinishDate")
time_cond = true

// Entry Condition (Chain 1)
bullishChain1 = enableChain1 and ta.crossover(src1, entryEMA1)
bearishChain1 = enableChain1 and ta.crossunder(src1, entryEMA1)

// Exit Condition (Chain 1)
exitLongChain1 = enableChain1 and ta.crossunder(src1, exitEMA1)
exitShortChain1 = enableChain1 and ta.crossover(src1, exitEMA1)

// Entry Condition (Chain 2)
bullishChain2 = enableChain2 and ta.crossover(src2, entryEMA2)
bearishChain2 = enableChain2 and ta.crossunder(src2, entryEMA2)

// Exit Condition (Chain 2)
exitLongChain2 = enableChain2 and ta.crossunder(src2, exitEMA2)
exitShortChain2 = enableChain2 and ta.crossover(src2, exitEMA2)

// Debugging: Plot entry signals for Chain 1
plotshape(bullishChain1, color=color.new(color.green, 0), style=shape.labelup, text='BUY C1', location=location.belowbar)
plotshape(bearishChain1, color=color.new(color.red, 0), style=shape.labeldown, text='SELL C1', location=location.abovebar)

// Debugging: Plot entry signals for Chain 2
plotshape(bullishChain2, color=color.new(color.green, 0), style=shape.labelup, text='BUY C2', location=location.belowbar)
plotshape(bearishChain2, color=color.new(color.red, 0), style=shape.labeldown, text='SELL C2', location=location.abovebar)

// Trade Execution for Chain 1
if bullishChain1 and time_cond
    strategy.entry('BUY_Chain_1', strategy.long)

if bearishChain1 and time_cond
    strategy.entry('SELL_Chain_1', strategy.short)

// Exit trades based on daily conditions for Chain 1
if exitLongChain1 and strategy.opentrades > 0
    strategy.close(id='BUY_Chain_1', when=exitLongChain1)

if exitShortChain1 and strategy.opentrades > 0
    strategy.close(id='SELL_Chain_1', when=exitShortChain1)

// Trade Execution for Chain 2
if bullishChain2 and time_cond
    strategy.entry('BUY_Chain_2', strategy.long)

if bearishChain2 and time_cond
    strategy.entry('SELL_Chain_2', strategy.short)

// Exit trades based on daily conditions for Chain 2
if exitLongChain2 and strategy.opentrades > 0
    strategy.close(id='BUY_Chain_2', when=exitLongChain2)

if exitShortChain2 and strategy.opentrades > 0
    strategy.close(id='SELL_Chain_2', when=exitShortChain2)

// Close all positions outside the backtesting period
if not time_cond
    strategy.close_all()


Berkaitan

Lebih lanjut