Strategi Dagangan Trend Berdasarkan EMA Crossover

Penulis:ChaoZhang, Tarikh: 2023-10-31 14:37:38
Tag:

img

Ringkasan

Idea teras strategi ini adalah menggunakan isyarat salib emas dan salib mati penunjuk EMA untuk membuat keputusan membeli dan menjual. Ia memetakan pelbagai set EMA cepat dan perlahan dan menghasilkan isyarat perdagangan berdasarkan persilangan mereka.

Logika Strategi

Strategi pertama menentukan beberapa garis EMA, termasuk EMA pantas ema1 ke ema6 dan EMA perlahan ema7 ke ema12. Ia kemudian menentukan isyarat beli buy_signal dan isyarat jual sell_signal:

  • Isyarat beli buy_signal dihasilkan apabila ema1 melintasi di atas ema3.

  • Isyarat jual sell_signal dihasilkan apabila ema1 melintasi bawah ema3.

Jadi apabila EMA jangka pendek melintasi di atas EMA jangka panjang, ia menunjukkan trend menaik di pasaran dan isyarat beli dicetuskan.

Strategi ini memantau persimpangan garis EMA untuk menentukan arah trend dan membuat keputusan membeli / menjual dengan sewajarnya.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Menggunakan garis EMA untuk menentukan trend boleh menapis bunyi pasaran jangka pendek dan menjadikan isyarat perdagangan lebih boleh dipercayai.

  2. Merangka pelbagai EMA dapat mengenal pasti perubahan trend dengan lebih tepat.

  3. Strategi ini mudah dan jelas. Isyarat perdagangan dihasilkan oleh silang EMA, menjadikannya mudah difahami dan dilaksanakan untuk perdagangan kuant.

  4. Parameter tempoh EMA boleh disesuaikan untuk menyesuaikan diri dengan produk dan pasaran yang berbeza.

Analisis Risiko

Risiko strategi ini termasuk:

  1. Garis EMA mempunyai kesan kelewatan yang boleh melambatkan isyarat perdagangan.

  2. Pemilihan parameter EMA yang tidak betul boleh menghasilkan isyarat yang salah.

  3. EMA cross gagal menyaring isyarat palsu dalam pasaran yang berbeza dengan berkesan.

  4. Terdapat risiko pemasangan berlebihan kerana ruang yang terhad untuk mengoptimumkan parameter EMA.

Penyelesaian:

  1. Tambah penapis dengan penunjuk lain untuk mengelakkan isyarat yang salah dalam pasaran pelbagai.

  2. Stabiliti ujian parameter tempoh yang berbeza untuk mengelakkan pemasangan berlebihan.

  3. Sesuaikan parameter atau tambah mekanisme keluar untuk mengawal risiko.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan lagi dalam aspek berikut:

  1. Tambah stop loss ke kedudukan keluar apabila kerugian mencapai ambang.

  2. Melaksanakan logik kemasukan semula dengan isyarat beli / jual tambahan.

  3. Mengoptimumkan parameter tempoh silang EMA untuk hasil yang terbaik.

  4. Memasukkan penunjuk lain untuk pengesahan multifaktor untuk meningkatkan kualiti isyarat.

  5. Penyesuaian parameter ujian pada produk yang berbeza untuk mencari penerapan yang optimum.

  6. Pertimbangkan slippage dalam perdagangan langsung dan optimum melalui backtesting.

Ringkasan

Ini adalah strategi trend berikut yang mudah berdasarkan persilangan EMA. Ia boleh mengenal pasti perubahan trend tetapi juga mempunyai risiko seperti kesan lag dan whipsaws. Peningkatan dengan stop loss, pengoptimuman parameter, pengesahan multifaktor dan lain-lain dapat meningkatkan prestasi strategi dalam backtesting dan perdagangan langsung.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//Companion Strategy script to my Cloud Study. Enjoy! -MP
// study("MP's Cloud Study", overlay=true)
strategy(title="MP's Cloud Strat'", shorttitle="MP's Cloud Strat", overlay=true, precision=6, pyramiding=0, initial_capital=10000, currency="USD", default_qty_type=strategy.percent_of_equity,calc_on_order_fills= false, calc_on_every_tick=false, default_qty_value=100.0, commission_type=strategy.commission.percent, commission_value=0.05)

//bgcolor ( color=black, transp=20, title='Blackground', editable=true)

src = close, len1 = input(2, minval=1, title="Short EMA")
src2 = close, len3 = input(7, minval=1, title="Long EMA")
emaShort = ema(src, len1)
emaLong = ema(src2, len3)


StartYear = input(2018, "Start Year")
StartMonth = input(01, "Start Month")
StartDay = input(18, "Start Day")

 
StopYear = input(2018, "Stop Year")
StopMonth = input(12, "Stop Month")
StopDay = input(26, "Stop Day")
tradeStop = timestamp(StopYear,StopMonth,StopDay,0,0)

//src = close, 
//len1 = input(3, minval=1, title="Fast EMA 1")
len2 = input(3, minval=1, title="Fast EMA 2")
//len3 = input(8, minval=1, title="Fast EMA 3")
len4 = input(5, minval=1, title="Fast EMA 4")
len5 = input(8, minval=1, title="Fast EMA 5")
len6 = input(10, minval=1, title="Fast EMA 6")
//Slow EMA
len7 = input(30, minval=1, title="Slow EMA 7")
len8 = input(35, minval=1, title="Slow EMA 8")
len9 = input(40, minval=1, title="Slow EMA 9")
len10 = input(45, minval=1, title="Slow EMA 10")
len11 = input(50, minval=1, title="Slow EMA 11")
len12 = input(60, minval=1, title="Slow EMA 12")

//Fast EMA
ema1 = ema(src, len1)
ema2 = ema(src, len2)
ema3 = ema(src, len3)
ema4 = ema(src, len4)
ema5 = ema(src, len5)
ema6 = ema(src, len6)
//Slow EMA
ema7 = ema(src, len7)
ema8 = ema(src, len8)
ema9 = ema(src, len9)
ema10 = ema(src, len10)
ema11 = ema(src, len11)
ema12 = ema(src, len12)

//Fast EMA Color Rules
//colfastL = (ema1 > ema2 and ema2 > ema3 and ema3 > ema4 and ema4 > ema5 and ema5 > ema6)
colfastS = (ema1 < ema2 and ema2 < ema3 and ema3 < ema4 and ema4 < ema5 and ema5 < ema6)
//Slow EMA Color Rules
//colslowL = ema7 > ema8 and ema8 > ema9 and ema9 > ema10 and ema10 > ema11 and ema11 > ema12 
//colslowS = ema7 < ema8 and ema8 < ema9 and ema9 < ema10 and ema10 < ema11 and ema11 < ema12 
//Fast EMA Final Color Rules
//colFinal = colfastL and colslowL? aqua : colfastS and colslowS? orange : gray
//Slow EMA Final Color Rules
//colFinal2 = colslowL  ? lime : colslowS ? red : gray
//Fast EMA Plots
p1=plot(ema1, title="Fast EMA 1", style=line, linewidth=2, color=silver)
plot(ema2, title="Fast EMA 2", style=line, linewidth=1, color=silver)
plot(ema3, title="Fast EMA 3", style=line, linewidth=1, color=silver)
plot(ema4, title="Fast EMA 4", style=line, linewidth=1, color=silver)
plot(ema5, title="Fast EMA 5", style=line, linewidth=1, color=silver)
p2=plot(ema6, title="Fast EMA 6", style=line, linewidth=2, color=silver)
fill(p1,p2,color=silver, transp=60)
//Slow EMA Plots
//p3=plot(ema7, title="Slow EMA 7", style=line, linewidth=4, color=colFinal2)
//plot(ema8, title="Slow EMA 8", style=line, linewidth=3, color=colFinal2)
//plot(ema9, title="Slow EMA 9", style=line, linewidth=3, color=colFinal2)
//plot(ema10, title="Slow EMA 10", style=line, linewidth=3, color=colFinal2)
//plot(ema11, title="Slow EMA 11", style=line, linewidth=3, color=colFinal2)
//p4=plot(ema12, title="Slow EMA 12", style=line, linewidth=4, color=colFinal2)
//fill(p3,p4, color=silver, transp=60)



//Plot the Ribbon
ma1=plot( emaShort,color=rising(emaShort,2)?green:red,linewidth=1,join=true,transp=20,title="Short")
ma2=plot( emaLong,color=rising(emaLong,2)?green:red,linewidth=1,join=true,transp=20,title="Long")
fcolor = emaShort>emaLong?green:red
fill(ma1,ma2,color=fcolor,transp=80,title="Ribbon Fill")


//fast = 4, slow = 16
//fastMA = ema(close, fast)
//slowMA = ema(close, slow)
//plot(fastMA, color=green, title = "buy/sell")
//plot(slowMA, color=red, title = "base")


//Conditions
buy_signal = crossover(ema1,ema3)
sell_signal = crossunder(ema1,ema3)

plotshape(sell_signal, style=shape.triangleup, color = red, text="Start Short")
plotshape(buy_signal, style=shape.triangledown, color = green, text="Start Long")

alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=position b=long t=market l= | delay=30 | e= s= b=short l= t=market q=0.01')
alertcondition(buy_signal, title = 'Buy/Long', message =  'e= s= c=position b=short t=market l= | delay=30 | e= s= b=long l= t=market q=0.01')

//alertcondition(sell_signal, title = 'Sell/Short', message = 'e= s= c=order b=buy | delay=3 | e= b=sell q=99% p=0.70% u=currency')
//alertcondition(buy_signal, title = 'Buy/Long', message =  'e= s= c=order b=sell | delay=30 | e= b=buy q=80 p=0.1% u=currency')


testStartYear = input(2018, "From Year") 
testStartMonth = input(1, "From Month")
testStartDay = input(1, "From Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "To Year")
testStopMonth = input(1, "To Month")
testStopDay = input(1, "To Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

if testPeriod()
    if buy_signal
        strategy.entry("Long", true)
    

    if sell_signal
        strategy.close("Long")

Lebih lanjut