Strategi Pelacakan Tren EMA Dual

Penulis:ChaoZhang, Tanggal: 2024-02-29 11:45:42
Tag:

img

Gambaran umum

Strategi Pelacakan Tren Crossover Dual EMA adalah strategi perdagangan kuantitatif yang menggunakan indikator EMA ganda untuk menentukan arah tren harga. Strategi ini menghitung dua indikator EMA dengan parameter yang berbeda dan menggabungkan sinyal golden cross dan dead cross untuk menilai tren harga. Ini menghasilkan sinyal beli ketika EMA periode yang lebih pendek melintasi EMA periode yang lebih lama, dan sinyal jual ketika EMA periode yang lebih pendek melintasi di bawah EMA periode yang lebih lama.

Logika Strategi

Indikator inti dari strategi ini adalah dua set EMA, termasuk siklus EMA1 yang lebih lama dan siklus EMA2 yang lebih pendek. Parameter EMA1 adalah 21 dan parameter EMA2 adalah 10.

Ketika EMA2 siklus pendek melintasi di atas EMA1 siklus panjang, sinyal beli dihasilkan. Ini menunjukkan bahwa tren harga jangka pendek telah menguat dan tren kenaikan telah dimulai. Ketika EMA2 siklus pendek melintasi di bawah EMA1 siklus panjang, sinyal jual dihasilkan. Ini menunjukkan bahwa tren kenaikan harga jangka pendek telah terganggu dan tren penurunan telah dimulai.

Analisis Keuntungan

  • Struktur EMA ganda dapat secara efektif menangkap perubahan tren jangka pendek dan menengah untuk menentukan tren.

  • Penyaringan tambahan dari dua set indikator golden cross dan dead cross dapat mengurangi sinyal yang salah dan menghindari transaksi yang tidak perlu yang disebabkan oleh fluktuasi harga.

  • Penggunaan tingkat 4 jam untuk menghitung indikator dapat mengatasi fluktuasi harga frekuensi tinggi.

  • Struktur strategi sederhana dan jelas, mudah dimengerti dan diimplementasikan, dan cocok untuk aplikasi perdagangan kuantitatif.

Analisis Risiko

  • Struktur EMA ganda kurang efektif dalam menilai pasar konsolidasi.

  • Indikator level 4 jam tidak cukup sensitif untuk menanggapi peristiwa mendadak. Berita mendadak besar dapat menyebabkan pergerakan besar dalam waktu 4 jam yang tidak dapat dikendalikan risiko secara efektif.

  • Strategi ini hanya didasarkan pada indikator teknis tanpa menggabungkan analisis fundamental.

Risiko ini dapat dikendalikan dengan:

  1. Tambahkan lebih banyak indikator EMA siklus waktu untuk menetapkan kombinasi model.

  2. Gunakan analisis sentimen teks untuk menentukan peristiwa mendadak utama dan menyesuaikan posisi secara dinamis.

  3. Mengasosiasikan perubahan lingkungan ekonomi, kebijakan dan dasar perusahaan untuk menyesuaikan parameter secara dinamis.

Optimalisasi

Strategi dapat dioptimalkan lebih lanjut:

  1. Tambahkan kombinasi model. Lebih banyak kombinasi indikator dengan parameter yang berbeda dapat ditetapkan untuk meningkatkan stabilitas strategi.

  2. Tambahkan mekanisme stop loss. titik stop loss yang masuk akal dapat secara efektif mengendalikan kerugian tunggal.

  3. Optimasi parameter dinamis. parameter EMA dapat dioptimalkan secara otomatis berdasarkan lingkungan pasar yang berbeda.

Kesimpulan


/*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)

Lebih banyak