
Ý tưởng chính của chiến lược này là sử dụng các tín hiệu giao dịch vàng và chết của chỉ số EMA để thực hiện các hoạt động mua và bán. Nó đồng thời vẽ nhiều nhóm EMA nhanh và chậm và sử dụng các giao dịch của chúng để đánh giá tín hiệu giao dịch.
Chiến lược này đầu tiên xác định một loạt các đường trung bình EMA, bao gồm đường trung bình EMA nhanh từ eMA1 đến eMA6 và đường trung bình EMA chậm từ eMA7 đến eMA12. Tiếp theo xác định tín hiệu mua buy_signal và sell_signal:
Do đó, khi đường trung bình EMA ngắn hạn trên đường trung bình EMA dài hạn, thị trường đang có xu hướng tăng, mua; khi đường trung bình EMA ngắn hạn dưới đường trung bình EMA dài hạn, thị trường đang có xu hướng giảm, bán.
Chiến lược này được sử dụng để đánh giá xu hướng bằng cách theo dõi các đường chéo của đường trung bình EMA để đưa ra quyết định mua và bán.
Chiến lược này có một số lợi thế:
Sử dụng chỉ số đường trung bình của EMA để đánh giá xu hướng, đường trung bình của EMA đối với biến động giá là mịn hơn, có thể lọc ra tiếng ồn thị trường ngắn hạn, làm cho tín hiệu giao dịch đáng tin cậy hơn.
Việc vẽ nhiều nhóm đường trung bình EMA cùng một lúc có thể xác định chính xác hơn sự thay đổi của xu hướng. Sự giao nhau của các đường EMA nhanh và chậm có thể tránh bỏ lỡ các điểm biến đổi xu hướng quan trọng.
Chiến lược đơn giản và rõ ràng, tín hiệu giao dịch được phát ra thông qua giao dịch EMA, dễ hiểu thực hiện, phù hợp với giao dịch định lượng.
Các tham số chu kỳ EMA có thể được tùy chỉnh, có thể điều chỉnh các tham số theo các giống và thị trường khác nhau, đáp ứng linh hoạt với sự thay đổi của thị trường.
Chiến lược này cũng có những rủi ro sau:
Đường trung bình EMA có tính chậm trễ, có thể trì hoãn tín hiệu giao dịch.
Lựa chọn không đúng các tham số EMA có thể tạo ra tín hiệu giao dịch sai.
EMA Cross không có khả năng lọc hiệu quả các tín hiệu giả gây ra bởi vùng dao động.
Có nguy cơ quá phù hợp, các tham số EMA có không gian tối ưu hóa giới hạn.
Phản ứng:
Bộ lọc kết hợp với các chỉ số khác để tránh phát ra tín hiệu sai trong vùng rung.
Kiểm tra tính ổn định của các tham số khác nhau của chu kỳ, để ngăn chặn sự phù hợp quá mức.
Điều chỉnh phù hợp các tham số chiến lược hoặc tăng cơ chế Exit, kiểm soát rủi ro.
Chiến lược này cũng có thể được tối ưu hóa theo các khía cạnh sau:
Tăng chiến lược dừng lỗ, dừng lỗ và rút ra sau khi lỗ đạt đến một mức độ nhất định.
Thêm vào đó là cơ chế tái nhập thị trường, tức là thiết lập tín hiệu mua lại và bán lại.
Tối ưu hóa các tham số EMA giao thoa mua và bán để tìm các tham số tối ưu nhất.
Kết hợp các chỉ số khác để đánh giá, xác thực đa yếu tố, cải thiện chất lượng tín hiệu.
Kiểm tra các thông số tối ưu hóa của các giống khác nhau để tìm ra phạm vi ứng dụng tốt nhất.
Cân nhắc các yếu tố trượt trong giao dịch trên đĩa cứng, điều chỉnh lại.
Chiến lược này sử dụng đường trung bình EMA để đánh giá xu hướng giao dịch, mua và bán dựa trên tín hiệu giao dịch, và là một chiến lược theo dõi xu hướng đơn giản hơn. Nó có lợi thế trong việc đánh giá xu hướng thay đổi, nhưng cũng có nguy cơ bị tụt hậu và dao động.
/*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")