
Idea utama strategi ini adalah menggunakan isyarat garpu emas dan garpu mati dalam indikator EMA untuk melakukan operasi beli dan jual. Ia secara serentak memetakan beberapa kumpulan EMA cepat dan lambat, dan menggunakan persimpangan mereka untuk membuat keputusan mengenai isyarat perdagangan.
Strategi ini mula-mula mentakrifkan pelbagai set garis purata EMA, termasuk garis purata EMA cepat ema1 hingga ema6 dan garis purata EMA perlahan ema7 hingga ema12. Kemudian mentakrifkan isyarat beli buy_signal dan isyarat jual sell_signal:
Oleh itu, apabila EMA jangka pendek melintasi EMA jangka panjang, ia menunjukkan bahawa pasaran berada dalam trend naik, membeli; apabila EMA jangka pendek melintasi EMA jangka panjang, ia menunjukkan bahawa pasaran berada dalam trend menurun, menjual.
Strategi untuk menentukan arah trend dengan memantau persilangan garis rata-rata EMA untuk membuat keputusan membeli dan menjual.
Strategi ini mempunyai beberapa kelebihan:
Menggunakan indikator EMA rata-rata untuk menilai trend, EMA rata-rata lebih lancar terhadap perubahan harga, dapat menyaring bunyi pasaran jangka pendek, menjadikan isyarat perdagangan lebih dipercayai.
Menggambar beberapa set garis rata-rata EMA pada masa yang sama, perubahan trend dapat dinilai dengan lebih tepat. Persaingan garis EMA yang cepat dan perlahan dapat mengelakkan kehilangan titik perubahan trend yang penting.
Strategi mudah dan jelas, menghantar isyarat dagangan melalui EMA cross, mudah difahami untuk dilaksanakan, sesuai untuk dagangan kuantitatif.
Parameter kitaran EMA boleh disesuaikan, parameter boleh disesuaikan mengikut varieti dan pasaran yang berbeza, dan fleksibel untuk menghadapi perubahan pasaran.
Strategi ini juga mempunyai risiko:
EMA rata-rata mempunyai keterlambatan dan mungkin melambatkan isyarat perdagangan.
Mengambil kombinasi parameter EMA yang salah boleh menghasilkan isyarat dagangan yang salah.
EMA Cross tidak dapat menyaring dengan berkesan isyarat palsu yang disebabkan oleh zon getaran.
Terdapat risiko kecocokan berlebihan, ruang yang terhad untuk parameter EMA untuk dioptimumkan.
Kaedah pencegahan:
Penapisan digabungkan dengan penunjuk lain untuk mengelakkan isyarat salah di kawasan gegaran.
Uji kestabilan parameter berkala yang berbeza untuk mengelakkan kesesuaian berlebihan.
Menyesuaikan set parameter strategi atau menambah mekanisme keluar untuk mengawal risiko.
Strategi ini juga boleh dioptimumkan dalam beberapa aspek:
Tambah strategi hentikan kerugian, hentikan kerugian dan keluar selepas kerugian mencapai tahap tertentu.
Menambah mekanisme kemasukan semula ke pasaran, iaitu menetapkan isyarat untuk membeli dan menjual semula.
Mengoptimumkan kombinasi parameter kitaran silang EMA yang dibeli dan dijual untuk mencari parameter yang paling optimum.
Menambah penilaian indikator lain, melakukan pengesahan pelbagai faktor, meningkatkan kualiti isyarat.
Uji optimasi parameter pelbagai jenis untuk mencari ruang yang paling sesuai.
Mempertimbangkan faktor slippage dalam perdagangan cakera keras, melakukan penyesuaian pengukuran semula.
Strategi ini menggunakan arah trend penilaian silang perlahan EMA, membeli dan menjual berdasarkan isyarat silang, dan merupakan strategi penjejakan trend yang lebih mudah. Ia mempunyai kelebihan menilai perubahan trend, tetapi juga terdapat risiko keterlambatan dan rantaian bergolak.
/*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")