
Strategi pengesanan trend EMA berganda adalah strategi perdagangan kuantitatif yang menggunakan indikator EMA berganda untuk menentukan arah trend harga. Strategi ini menentukan trend harga dengan mengira dua set parameter EMA yang berbeza, menggabungkan sinyal EMA berganda dan yang mati. Ia menghasilkan isyarat beli apabila EMA yang lebih pendek menembusi EMA yang lebih panjang; ia menghasilkan isyarat jual apabila EMA yang lebih pendek menembusi EMA yang lebih panjang.
Indeks utama strategi ini adalah dua set EMA, termasuk satu set EMA1 dengan tempoh yang lebih lama dan satu set EMA2 dengan tempoh yang lebih pendek. Strategi ini mengira kedua-dua set EMA dengan garis 4 jam sebagai tempoh asas.
Apabila tempoh yang lebih pendek EMA2 melalui tempoh yang lebih lama EMA1, menghasilkan isyarat beli. Ini menunjukkan bahawa trend jangka pendek harga menjadi kuat dan mula memasuki pergerakan menaik. Apabila tempoh yang lebih pendek EMA2 melalui tempoh yang lebih lama EMA1, menghasilkan isyarat jual. Ini menunjukkan bahawa trend kenaikan jangka pendek harga terputus dan mula memasuki pergerakan menurun.
Untuk menyaring isyarat kesilapan, strategi menetapkan dua set penunjuk garpu emas dan garpu mati. Hanya apabila kedua-dua set penunjuk memberi isyarat pada masa yang sama, ia akan mencetuskan pembelian dan penjualan yang sesuai. Ini dapat mengurangkan perdagangan yang salah akibat pergerakan harga.
Risiko ini boleh dikawal dengan cara berikut:
Strategi ini masih boleh dioptimumkan lagi:
Menambah portfolio model. Anda boleh membina lebih banyak kombinasi indikator parameter yang berbeza, meningkatkan kestabilan strategi.
Menambah mekanisme penangguhan kerugian. Menetapkan titik penangguhan yang munasabah, yang dapat mengawal kerugian tunggal dengan berkesan.
Pengoptimuman parameter dinamik. Parameter EMA boleh dioptimumkan secara automatik mengikut keadaan pasaran yang berbeza.
Menggabungkan teknologi pembelajaran mesin. Menggunakan kerangka kerja seperti Tensorflow, model latihan untuk meramalkan trend harga dalam masa nyata.
Strategi pengesanan trend binari EMA adalah strategi perdagangan trend yang mudah dan praktikal. Ia menggunakan indikator EMA binari untuk menilai trend jangka pendek dalam harga untuk menangkap peluang pergerakan arah.
/*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)