10EMA Strategi Pengesanan Trend Ganda

Penulis:ChaoZhang, Tarikh: 2023-12-29 16:03:55
Tag:

img

Ringkasan

Strategi ini adalah strategi pengesanan trend berdasarkan silang ganda 10EMA dan 50EMA. Ia menggabungkan 10EMA pada carta jam sebagai penilaian tambahan untuk mencari arah trend secara dinamik dalam pasaran banteng dan beruang yang bergantian, dan mencapai pemantauan stop loss automatik.

Prinsip Strategi

Logik teras strategi ini adalah berdasarkan salib emas dan salib kematian 10EMA dan 50EMA. Khususnya, apabila 10EMA melintasi di atas 50EMA untuk membentuk salib emas, ia dinilai bahawa pasaran telah memasuki trend menaik; apabila 10EMA melintasi di bawah 50EMA untuk membentuk salib kematian, ia dinilai bahawa pasaran telah memasuki trend menurun.

Buka kedudukan panjang atau pendek dalam 1-5 bar selepas salib emas atau salib maut. Di samping itu, strategi ini juga memperkenalkan 10EMA pada carta jam sebagai penghakiman tambahan. Posisi panjang dibuka hanya apabila 10EMA pada carta jam berada dalam trend menaik selepas salib emas, dan kedudukan pendek dibuka hanya apabila 10EMA pada carta jam berada dalam trend menurun selepas salib maut, dengan itu menapis beberapa isyarat palsu.

Selepas membuka kedudukan, strategi ini menggunakan kaedah mengambil keuntungan dan menghentikan kerugian untuk mengesan stop loss + pesanan had. Mengesan stop loss boleh mengunci keuntungan dan memaksimumkan keuntungan urus niaga; pesanan had memastikan bahawa kedudukan ditutup apabila harga mencapai sasaran untuk mendapatkan keuntungan.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah bahawa semasa menggunakan persilangan EMA untuk menilai arah trend utama, ia juga memperkenalkan penunjuk tambahan untuk menapis isyarat, yang secara berkesan dapat menapis persilangan palsu untuk meningkatkan kebolehpercayaan isyarat.

Berbanding dengan strategi penunjuk tunggal, strategi ini dapat menilai arah trend dan amplitud dengan lebih tepat. Berbanding dengan stop loss tradisional, strategi ini menggunakan teknologi stop loss yang lebih maju untuk mengunci keuntungan dengan lebih baik.

Analisis Risiko

Risiko utama yang dihadapi oleh strategi ini adalah whipsaws yang berkala dan pembalikan trend. Apabila isyarat persilangan palsu berturut-turut berlaku, strategi boleh dibuang. Di samping itu, pembalikan harga selepas membuka kedudukan juga boleh menyebabkan kerugian.

Untuk mengurangkan risiko whipsaws, penunjuk tambahan ditambahkan untuk menapis isyarat. Untuk mengawal risiko pembalikan trend, julat stop loss yang agak toleran diterima pakai, dan tetapan keuntungan terhad juga membantu mengurangkan risiko ini. Apabila stop loss dicetuskan, juga mungkin untuk mempertimbangkan untuk memasuki semula arah trend.

Arahan pengoptimuman

Terdapat beberapa arah pengoptimuman untuk strategi ini: pertama, kombinasi parameter yang berbeza seperti tempoh EMA dan bar kelewatan kedudukan boleh diuji untuk mencari parameter yang optimum; kedua, lebih banyak penunjuk tambahan seperti MACD dan BOLL boleh diperkenalkan untuk penapisan isyarat untuk meningkatkan kualiti isyarat; ketiga, logik stop loss dan mengambil keuntungan boleh dioptimumkan, seperti mengamalkan kaedah stop loss lain seperti stop loss masa dan stop loss berayun; keempat, lebih banyak keadaan pasaran boleh digabungkan untuk mencetuskan isyarat perdagangan strategi, seperti hanya mencetuskan isyarat semasa tempoh masa tertentu atau julat fluktuasi.

Ringkasan

Strategi pengesanan trend silang ganda 10EMA ini menilai arah trend semasa melalui salib emas dan salib kematian EMA, menetapkan pengesanan stop loss dan mengambil keuntungan terhad untuk mengunci keuntungan dan mengawal risiko, sambil menggabungkan penunjuk tambahan untuk menapis isyarat dan meningkatkan kualiti isyarat. Berbanding dengan penunjuk tunggal dan strategi stop loss tradisional, strategi ini mempunyai kelebihan seperti penilaian yang tepat, mekanisme stop profit yang dioptimumkan, dll. Ia dapat menangkap keuntungan trend dengan berkesan sambil mengawal risiko, menjadikannya sesuai untuk akaun dagangan konvensional. Sudah tentu masih ada ruang untuk peningkatan untuk strategi ini, seperti meningkatkan lagi prestasi strategi melalui pengoptimuman parameter dan memperkenalkan lebih banyak penunjuk tambahan.


/*backtest
start: 2022-12-22 00:00:00
end: 2023-12-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("10ema Strat 9", overlay=true, format=format.price)
//#region // inputs for candles
//time
t1 = time(timeframe.period,"0930-1500") //last hour of market is not ideal for trading
// candle status
bullish = close > open and barstate.isconfirmed
bearish = open > close and barstate.isconfirmed
bullcandle = ta.valuewhen(bullish, close, 0)
bearcandle = ta.valuewhen(bearish, close, 0)
ema1 = input.int(10, minval=1, title="short ema")
ema2 = input.int(50, minval=1, title="long ema")
ema3 = input.int(200, minval=1, title="hourly 10 ema")
//@variable Input for source
src = input(close, title="Source")
offsetema = input.int(title="Offset", defval=0, minval=-500, maxval=500)
sema = ta.ema(src, ema1)//@variable Input for smaller ema1
lema = ta.ema(src, ema2)//@variable Input for longer ema2
hema = ta.ema(src, ema3)// @variable Input for hourly ema3
bullcrosscount = ta.barssince(ta.crossover(sema,lema)) //@variable Input 10/50 cross higher
bearcrosscount = ta.barssince(ta.crossunder(sema,lema)) //@variable Input 10/50 cross lower
ideallong = bullcrosscount <= 5 //number of candles after the cross
idealshort = bearcrosscount <= 5 //number of candles after the cross

emabull = (sema > lema) and bearish and close > sema and close > hema and ideallong and t1 and barstate.isconfirmed
xemabull = ta.barssince(emabull)
dbullema = emabull and emabull[1] and xemabull <=1
bullentry = if dbullema
    ta.valuewhen(emabull[1], high + 0.05, 0)
else 
    ta.valuewhen(emabull, high + 0.05, 0)
bullentryh = dbullema ? bullentry[1] : bullentry
bullentrylow = ta.valuewhen(emabull, low - 0.05, 0)
bullstop = (bullentryh - bullentrylow) <= 1.00 ? bullentryh - 1.00 : (bullentryh - bullentrylow) <= 10.40 ? bullentrylow : na
bulltarget = (bullentryh - bullstop) * 1.62 + bullentryh

// bear setup
emabear = (sema < lema) and bullish and close < sema and close < hema and idealshort and t1 and barstate.isconfirmed
xemabear = ta.barssince(emabear)
dbearema = emabear and emabear [1] and xemabear <=1
bearentry = if dbearema
    ta.valuewhen(emabear[1], low - 0.05, 0)
else
    ta.valuewhen(emabear, low - 0.05, 0)
bearentryh = dbearema ? bearentry[1] : bearentry
bearentryhigh = ta.valuewhen(emabear, high + 0.05, 0)
bearstop = (bearentryhigh - bearentryh) <= 1.00 ? bearentryh + 1.00 : (bearentryh - bearentryhigh) <= 10.40 ? bearentryhigh : na
beartarget = bearentryh - (bearstop-bearentryh) * 1.62

bullclose = (xemabull <=7) and bullish and bullcrosscount >=1 and barstate.isconfirmed //number of candles for a close above
bearclose = (xemabear <=7) and bearish and bearcrosscount >=1 and barstate.isconfirmed //number of candles for a close below
buyzone = ta.barssince(bullclose)
shortzone =  ta.barssince(bearclose)
idealbuy = close >= bullentryh and bullclose and (buyzone<=7)
idealsell = close <= bearentryh and bearclose and (shortzone<=7)

// // bull setup on chart
// if sema > lema and xemabull < 50
//     var line line_bullentry = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(0, 200, 0), style=line.style_solid, width=1)
//     if emabull
//         line.set_xy1(line_bullentry, x=bar_index, y=bullentryh)
//         line.set_xy2(line_bullentry, x=bar_index, y=bullentryh)
//         alert("EMA-bullish", alert.freq_once_per_bar_close)
//     line.set_x2(line_bullentry, x=bar_index)
//     var line line_bullstop = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(250, 0, 0), style=line.style_solid, width=1)
//     if emabull
//         line.set_xy1(line_bullstop, x=bar_index, y=bullstop)
//         line.set_xy2(line_bullstop, x=bar_index, y=bullstop)
//     line.set_x2(line_bullstop, x=bar_index)    
//     var line line_bulltarget = line.new(bar_index, na, bar_index + 1, na, color=color.rgb(200, 100, 200), style=line.style_solid, width=1)
//     if emabull
//         line.set_xy1(line_bulltarget, x=bar_index, y=bulltarget)
//         line.set_xy2(line_bulltarget, x=bar_index, y=bulltarget)
//     line.set_x2(line_bulltarget, x=bar_index)

// //bear setup on chart
// if sema < lema and xemabear < 50
//     var line line_bearentry = line.new(bar_index, na, bar_index, na, color=color.rgb(0, 200, 0), style=line.style_solid, width=1)
//     if emabear
//         line.set_xy1(line_bearentry, x=bar_index, y=bearentryh)
//         line.set_xy2(line_bearentry, x=bar_index, y=bearentryh)
//         alert("EMA-bearish", alert.freq_once_per_bar_close)
//     line.set_x2(line_bearentry, x=bar_index)
//     var line line_bearstop = line.new(bar_index, na, bar_index, na, color=color.rgb(250, 0, 0), style=line.style_solid, width=1)
//     if emabear
//         line.set_xy1(line_bearstop, x=bar_index, y=bearstop)
//         line.set_xy2(line_bearstop, x=bar_index, y=bearstop)
//     line.set_x2(line_bearstop, x=bar_index)
//     var line line_beartarget = line.new(bar_index, na, bar_index, na, color=color.rgb(200, 100, 200), style=line.style_solid, width=1)
//     if emabear
//         line.set_xy1(line_beartarget, x=bar_index, y=beartarget)
//         line.set_xy2(line_beartarget, x=bar_index, y=beartarget)
//     line.set_x2(line_beartarget, x=bar_index)

//#endregion
//execution 
if idealbuy
    strategy.close("sell", comment=na)	
    strategy.entry("buy", strategy.long, limit=bullentryh, stop=bullstop, comment="buy")
strategy.exit("exit","buy", trail_points = low, trail_offset = 5, qty_percent=100, limit=bulltarget, stop=bullstop)

if idealsell
	strategy.close("buy",comment=na)
    strategy.entry("sell", strategy.short, limit=bearentryh, stop=bearstop, comment="sell")
strategy.exit("exit","sell", trail_points = low, trail_offset = 5, qty_percent=100, limit=beartarget, stop=bearstop)
// strategy.close_all(time == close_day) 
//#region // graphical analysis
//Plots
plotshape(emabull, location=location.belowbar, title='emabull')
plotshape(idealbuy, style=shape.circle, color=color.green, title="bull close")
plotshape(emabear, title='emabear')
plotshape(idealsell, location=location.belowbar, style=shape.circle, color=color.red, title="bear close")

// //Dashboard
// var label id = na
// label.delete(id)   // Delete last label
// i_offsetLabel = input(15, "Data Dashboard Offset") 
// offset = i_offsetLabel * (time - time[1])
// dynamicText = "= Bull Setup ="
// id := label.new(x=time + offset, y=open, xloc=xloc.bar_time, text=dynamicText, color=color.rgb(255, 255, 255), size=size.normal)
// label.set_textcolor(id, color.rgb(0, 0, 0))
// label.set_text(id=id, text=dynamicText)
// label.set_textalign(id, text.align_left)
// label.set_text(id=id, text=dynamicText)
// f_round( _val, _decimals) => 
//     _p = math.pow(10, _decimals)
//     math.round(math.abs(_val) * _p) / _p * math.sign(_val)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bulltarget,2)) + "  :Target"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bullentryh,2)) + "  :Entry"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bullstop,2)) + "  :Stop"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + "= Bear Setup ="
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bearstop,2)) + "  :Stop"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(bearentryh,2)) + "  :Entry"
// label.set_text(id=id, text=dynamicText)
// dynamicText := dynamicText + "\n" + str.tostring(f_round(beartarget,2)) + "  :Target"
// label.set_text(id=id, text=dynamicText)
// //#endregion

Lebih lanjut