Chiến lược này sử dụng chỉ số G-channel để xác định hướng xu hướng của thị trường, đồng thời kết hợp các chỉ số EMA và ATR để tối ưu hóa điểm vào và thoát. Ý tưởng chính của chiến lược là: Khi giá phá vỡ đường dẫn G và làm nhiều khi ở dưới EMA, phá vỡ đường dẫn G và làm rỗng khi ở trên EMA. Đồng thời, sử dụng ATR để thiết lập điểm dừng và dừng động, dừng lỗ là 2 lần ATR và dừng lại là 4 lần ATR.
Chiến lược này xây dựng một hệ thống giao dịch theo dõi xu hướng đơn giản và hiệu quả thông qua các chỉ số như kênh G, EMA, ATR. Có thể đạt được hiệu quả tốt trong tình trạng xu hướng, nhưng hoạt động chung trong tình trạng xung đột. Sau đó, chiến lược có thể được tối ưu hóa từ các khía cạnh của bộ lọc xu hướng, tối ưu hóa tham số, quản lý vị trí, chiến lược kết hợp, v.v., để nâng cao hơn nữa sức khỏe và khả năng sinh lợi của chiến lược.
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// Full credit to AlexGrover: https://www.tradingview.com/script/fIvlS64B-G-Channels-Efficient-Calculation-Of-Upper-Lower-Extremities/
strategy ("G-Channel Trend Detection with EMA Strategy and ATR", shorttitle="G-Trend EMA ATR Strategy", overlay=true)
// Inputs for G-Channel
length = input(100, title="G-Channel Length")
src = input(close, title="Source")
// G-Channel Calculation
var float a = na
var float b = na
a := max(src, nz(a[1])) - (nz(a[1] - b[1]) / length)
b := min(src, nz(b[1])) + (nz(a[1] - b[1]) / length)
avg = (a + b) / 2
// G-Channel Signals
crossup = b[1] < close[1] and b > close
crossdn = a[1] < close[1] and a > close
bullish = barssince(crossdn) <= barssince(crossup)
c = bullish ? color.lime : color.red
// Plot G-Channel Average
p1 = plot(avg, "Average", color=c, linewidth=1, transp=90)
p2 = plot(close, "Close price", color=c, linewidth=1, transp=100)
fill(p1, p2, color=c, transp=90)
// Show Buy/Sell Labels
showcross = input(true, title="Show Buy/Sell Labels")
plotshape(showcross and not bullish and bullish[1] ? avg : na, location=location.absolute, style=shape.labeldown, color=color.red, size=size.tiny, text="Sell", textcolor=color.white, transp=0, offset=-1)
plotshape(showcross and bullish and not bullish[1] ? avg : na, location=location.absolute, style=shape.labelup, color=color.lime, size=size.tiny, text="Buy", textcolor=color.white, transp=0, offset=-1)
// Inputs for EMA
emaLength = input(50, title="EMA Length")
emaValue = ema(close, emaLength)
// Plot EMA
plot(emaValue, title="EMA", color=color.blue, linewidth=1)
// ATR Calculation
atrLength = input(14, title="ATR Length")
atrValue = atr(atrLength)
// Strategy Conditions
buyCondition = bullish and close < emaValue
sellCondition = not bullish and close > emaValue
// Stop Loss and Take Profit Levels
longStopLoss = close - 2 * atrValue
longTakeProfit = close + 4 * atrValue
shortStopLoss = close + 2 * atrValue
shortTakeProfit = close - 4 * atrValue
// Execute Strategy with ATR-based stop loss and take profit
if (buyCondition)
strategy.entry("Buy", strategy.long)
strategy.exit("Sell", "Buy", stop=longStopLoss, limit=longTakeProfit)
if (sellCondition)
strategy.entry("Sell", strategy.short)
strategy.exit("Cover", "Sell", stop=shortStopLoss, limit=shortTakeProfit)
// Plot Buy/Sell Signals on the chart
plotshape(series=buyCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY", offset=-1)
plotshape(series=sellCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL", offset=-1)