Chiến lược Đường trung bình động kép và Siêu xu hướng


Ngày tạo: 2023-09-28 15:12:50 sửa đổi lần cuối: 2023-09-28 15:12:50
sao chép: 0 Số nhấp chuột: 923
1
tập trung vào
1617
Người theo dõi

Tổng quan

Chiến lược này dựa trên sự giao thoa của đường trung bình di chuyển 21 và 55 để tạo ra tín hiệu mua và bán, đồng thời kết hợp với chỉ số siêu xu hướng để lọc các tín hiệu giả mạo.

Nguyên tắc chiến lược

Mã đầu tiên xác định đường trung bình di chuyển của đường 21 ((EMA1) và đường 55 ((EMA2)). Một tín hiệu mua được tạo ra khi EMA1 đi qua EMA2; một tín hiệu bán được tạo ra khi EMA1 đi qua EMA2.

Để lọc các tín hiệu sai, mã đã thêm một chỉ số siêu xu hướng. Chỉ số siêu xu hướng dựa trên ATR sóng thực trung bình, kết hợp các điểm cao và thấp gần đây của giá để xác định hướng xu hướng. Mã đặt xu hướng tăng trên đường ray và xu hướng giảm dưới đường ray.

Bằng cách này, chỉ có tín hiệu mua được tạo ra khi EMA1 đi qua EMA2 khi xu hướng tăng; chỉ có tín hiệu bán được tạo ra khi EMA1 đi qua EMA2 khi xu hướng giảm. Bằng cách lọc các chỉ số siêu xu hướng, bạn có thể tránh tín hiệu giả được tạo ra khi xu hướng chuyển đổi.

Ngoài ra, các đường 200 ngày và 233 ngày được thêm vào mã để đánh giá xu hướng dài hạn, chỉ tạo ra tín hiệu giao dịch khi xu hướng dài hạn phù hợp.

Lợi thế chiến lược

  1. Đường trung bình di chuyển kép kết hợp với chỉ số xu hướng siêu, có thể xác định hiệu quả hướng xu hướng, lọc các tín hiệu giả.

  2. Bằng cách điều chỉnh các tham số đường trung bình di chuyển, bạn có thể điều chỉnh độ nhạy của chiến lược để thích ứng với các môi trường thị trường khác nhau.

  3. Thêm vào đó, tính toán trung bình dài hạn có thể tránh được rủi ro của sự không nhất quán trong xu hướng dài hạn.

  4. Quy tắc rõ ràng, dễ hiểu, điều chỉnh tham số dễ dàng, phù hợp với giao dịch định lượng.

  5. Dấu hiệu mua bán được hiển thị, hoạt động rõ ràng.

Rủi ro chiến lược

  1. Chiến lược hai đường trung bình di chuyển dễ gây ra tín hiệu sai tại các điểm biến xu hướng. Cần chú ý để nhận ra các biến đổi tiềm năng.

  2. Thiết lập tham số đường trung bình di chuyển không đúng có thể bỏ lỡ xu hướng hoặc tạo ra quá nhiều tín hiệu sai. Cần điều chỉnh tham số cho các thị trường khác nhau.

  3. Tỷ lệ giao dịch có thể cao hơn, cần chú ý đến việc kiểm soát chi phí giao dịch.

  4. Các tham số chỉ số siêu xu hướng cần được tối ưu hóa, nếu không có thể lọc các tín hiệu chính xác hoặc lưu trữ các tín hiệu sai.

  5. Đường trung bình dài hạn có thể gây ra tín hiệu chậm trễ, cần nắm bắt hợp lý thời gian chuyển hướng.

Tối ưu hóa chiến lược

  1. Kiểm tra các kết hợp đường trung bình di chuyển khác nhau để tìm tham số tối ưu.

  2. Tối ưu hóa các tham số của chỉ số siêu xu hướng, cân bằng hiệu ứng lọc và độ trễ.

  3. Thêm các chỉ số phụ trợ khác, chẳng hạn như chỉ số giao dịch, để xác minh thêm tín hiệu.

  4. Các yếu tố khác, bao gồm các chỉ số cảm xúc, tin tức và các yếu tố khác, được sử dụng để đánh giá điểm biến đổi tiềm năng.

  5. Các tham số tối ưu hóa động theo phương pháp học máy.

Tóm tắt

Chiến lược này kết hợp các lợi thế của chỉ số đường trung bình di chuyển kép và chỉ số xu hướng siêu, có thể khám phá xu hướng và lọc các tín hiệu sai. Có thể cải thiện hiệu quả chiến lược liên tục thông qua điều chỉnh tham số và xác minh các chỉ số hỗ trợ. Mặc dù có một số rủi ro, nhưng có thể được kiểm soát thông qua các phương tiện quản lý rủi ro.

Mã nguồn chiến lược
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bhavikmota

//@version=4
strategy("EMA & Supertrend", overlay = true)

//length = input(9, minval=1)
//ema1 = ema(close, length)
//ema2 = ema(ema1, length)
//ema3 = ema(ema2, length)

//shortest = ema(close, 20)
//short = ema(close, 50)
//longer = ema(close, 100)
//longest = ema(close, 200)


//for Ema1
len1 = input(21, minval=1)
//src1 = input(close)
ema1 = ema(close,len1)
plot(ema1, color=color.red, linewidth=1)

//for Ema2
len2 = input(55, minval=1)
//src2 = input(close)
ema2 = ema(close,len2)
plot(ema2, color=color.green, linewidth=1)

//for Ema3
len3 = input(200, minval=1)
//src3 = input(close)
ema3 = ema(close,len3)
plot(ema3, color=color.blue, linewidth=1)

//for Ema4
len4 = input(233, minval=1)
//src4 = input(close)
ema4 = ema(close,len4)
plot(ema4, color=color.black, linewidth=1)


Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")


//Trading logic

Enterlong = crossover(ema1,ema2) or (close>ema1 and close>ema2 and ema1>ema2) and close>ema4// positive ema crossover
Exitlong = crossunder(close,ema2) // candle closes below supertrend

Entershort = crossunder(ema1,ema2) or (close<ema1 and close<ema2 and ema2<ema1) and close<ema4// negative ema crossover
Exitshort = crossover(close,ema2) // candle closes above supertrend

//Execution Logic - Placing Order

start = timestamp(2008,1,1,0,0)

if time>= start
    strategy.entry("long", strategy.long, when=Enterlong)
    strategy.close("long",when=Exitlong)
//strategy.entry("short",strategy.short,100,when=Entershort)
//strategy.close("short",when=Exitshort)