Dual EMA Crossover Trend Tracking adalah strategi perdagangan kuantitatif yang menggunakan penunjuk EMA berganda untuk menentukan arah trend harga. Strategi ini mengira dua penunjuk EMA dengan parameter yang berbeza dan menggabungkan isyarat salib emas dan salib mati untuk menilai trend harga. Ia menghasilkan isyarat beli apabila EMA jangka pendek melintasi di atas EMA jangka panjang, dan isyarat jual apabila EMA jangka pendek melintasi di bawah EMA jangka panjang.
Penunjuk teras strategi ini adalah dua set EMA, termasuk EMA1 kitaran yang lebih lama dan EMA2 kitaran yang lebih pendek. Parameter EMA1 adalah 21 dan parameter EMA2 adalah 10. Strategi mengira kedua-dua EMA ini berdasarkan kitaran 4 jam.
Apabila EMA2 kitaran yang lebih pendek melintasi di atas EMA1 kitaran yang lebih lama, isyarat beli dihasilkan. Ini menunjukkan bahawa trend harga jangka pendek telah menguat dan trend menaik telah bermula. Apabila EMA2 kitaran yang lebih pendek melintasi di bawah EMA1 kitaran yang lebih lama, isyarat jual dihasilkan. Ini menunjukkan bahawa trend harga jangka pendek meningkat telah terganggu dan trend menurun telah bermula.
Untuk menapis isyarat yang salah, strategi ini menetapkan dua set penunjuk salib emas dan salib mati. Isyarat hanya dicetuskan apabila kedua-dua set penunjuk memberikan isyarat yang sama, yang dapat mengurangkan kesilapan yang disebabkan oleh turun naik harga.
Struktur EMA berganda dapat menangkap perubahan dalam trend jangka pendek dan sederhana untuk menentukan trend.
Penapisan tambahan dua set penunjuk salib emas dan salib mati dapat mengurangkan isyarat yang salah dan mengelakkan transaksi yang tidak perlu disebabkan oleh turun naik harga.
Penggunaan tahap empat jam untuk mengira penunjuk dapat mengatasi turun naik harga frekuensi tinggi.
Struktur strategi adalah mudah dan jelas, mudah difahami dan dilaksanakan, dan sesuai untuk aplikasi perdagangan kuantitatif.
Struktur EMA berganda kurang berkesan dalam menilai pasaran konsolidasi.
Indikator tahap 4 jam tidak cukup sensitif untuk bertindak balas terhadap peristiwa tiba-tiba. Berita tiba-tiba besar boleh menyebabkan pergerakan besar dalam masa 4 jam yang tidak dapat dikawal risiko dengan berkesan.
Strategi ini hanya bergantung kepada penunjuk teknikal tanpa menggabungkan analisis asas.
Risiko ini boleh dikawal dengan:
Tambah lebih banyak penunjuk EMA kitaran masa untuk mewujudkan kombinasi model.
Gunakan analisis sentimen teks untuk menentukan peristiwa tiba-tiba utama dan menyesuaikan kedudukan secara dinamik.
Menghubungkan perubahan dalam persekitaran ekonomi, dasar dan asas syarikat untuk menyesuaikan parameter secara dinamik.
Strategi ini boleh dioptimumkan lagi:
Tambah kombinasi model. Lebih banyak kombinasi penunjuk dengan parameter yang berbeza boleh ditubuhkan untuk meningkatkan kestabilan strategi.
Tambahkan mekanisme stop loss. Titik stop loss yang munasabah dapat mengawal kerugian tunggal dengan berkesan.
Pengoptimuman parameter dinamik. Parameter EMA boleh dioptimumkan secara automatik berdasarkan persekitaran pasaran yang berbeza.
Menggabungkan teknik pembelajaran mesin. Model seperti Tensorflow boleh dilatih untuk mengkategorikan trend harga dalam masa nyata.
Strategi pengesanan trend silang emas EMA berganda adalah strategi perdagangan trend yang mudah dan praktikal. Ia menggunakan penunjuk EMA berganda untuk menentukan trend harga jangka pendek dan sederhana untuk menangkap peluang pasaran arah. Pada masa yang sama, menggabungkan dua set penunjuk penapisan silang emas dan silang mati dapat mengurangkan perdagangan yang salah. Strategi ini mempunyai struktur yang mudah dan mudah dilaksanakan, menjadikannya sesuai untuk aplikasi perdagangan kuantitatif. Melalui pengoptimuman dan penambahbaikan berterusan, ia mempunyai potensi untuk memperluaskan lagi kelebihan strategi dan meningkatkan keuntungan yang stabil.
/*backtest start: 2023-02-22 00:00:00 end: 2024-02-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 /// Component Code Startt testStartYear = input(2017, "Backtest Start Year") testStartMonth = input(01, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testStopYear = input(2020, "Backtest Stop Year") testStopMonth = input(1, "Backtest Stop Month") testStopDay = input(1, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=bool, defval=false) testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na bgcolor(testPeriodBackgroundColor, transp=97) testPeriod() => true // Component Code Stop strategy(title="Ema cross strat", overlay=true) margin = input(true, title="Margin?") Margin = margin ? margin : false resCustom = input(title="EMA Timeframe", defval="240" ) source = close, len2 = input(21, minval=1, title="EMA1") len3 = input(10, minval=1, title="EMA2") ema2 = request.security(syminfo.tickerid,resCustom,ema(source,len2), lookahead=barmerge.lookahead_off) ema3 = request.security(syminfo.tickerid,resCustom,ema(source,len3), lookahead=barmerge.lookahead_off) mylong = crossover(ema3, ema2) myshort = crossunder(ema3,ema2) last_long = na last_short = na last_long := mylong ? time : nz(last_long[1]) last_short := myshort ? time : nz(last_short[1]) in_long = last_long > last_short ? 2 : 0 in_short = last_short > last_long ? 2 : 0 mylong2 = crossover(ema3, ema2) myshort2 = crossunder(ema3, ema2) last_long2 = na last_short2 = na last_long2 := mylong2 ? time : nz(last_long2[1]) last_short2 := myshort2 ? time : nz(last_short2[1]) in_long2 = last_long2 > last_short2 ? 0 : 0 in_short2 = last_short2 > last_long2 ? 0 : 0 condlongx = in_long + in_long2 condlong = crossover(condlongx, 1.9) condlongclose = crossunder(condlongx, 1.9) condshortx = in_short + in_short2 condshort = crossover(condshortx, 1.9) condshortclose = crossover(condshortx, 1.9) if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0 strategy.entry("Long", strategy.long, comment="Long") if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size > 0 strategy.close("Long",when = not Margin) if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0 strategy.entry("Short", strategy.short, comment="Short", when = Margin)