Chiến lược này kết hợp trung bình chuyển động biểu thức (EMA) và chỉ số siêu xu hướng để tạo ra tín hiệu mua và bán. Một tín hiệu mua được tạo ra khi giá vượt qua đường EMA 20 ngày và chỉ số siêu xu hướng đang có xu hướng tăng. Một tín hiệu bán được tạo ra khi giá vượt qua đường EMA 20 ngày và chỉ số siêu xu hướng đang có xu hướng giảm. Chiến lược nhằm mục đích nắm bắt các điều kiện thị trường xu hướng trong khi sử dụng đường EMA như một điều kiện lọc để giảm các tín hiệu sai.
Chiến lược này tạo ra tín hiệu mua và bán bằng cách kết hợp EMA 20 ngày và chỉ số Supertrend, nhằm mục đích nắm bắt các điều kiện thị trường xu hướng. Ưu điểm của chiến lược nằm ở sự đơn giản của nó và sự kết hợp của EMA và chỉ số Supertrend, có thể làm giảm hiệu quả các tín hiệu sai. Tuy nhiên, trong các thị trường hỗn loạn, chiến lược có thể giao dịch thường xuyên và thiếu các biện pháp quản lý rủi ro.
/*backtest start: 2023-06-11 00:00:00 end: 2024-06-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("20 EMA and Supertrend Strategy", overlay=true) // Inputs emaLength = input(20, title="EMA Length") supertrendMultiplier = input.float(3.0, title="Supertrend Multiplier") supertrendPeriod = input(10, title="Supertrend Period") // EMA Calculation ema = ta.ema(close, emaLength) // Supertrend Calculation Periods = supertrendPeriod src = hl2 Multiplier = supertrendMultiplier changeATR= input.bool(true, title="Change ATR Calculation Method?") showsignals = input.bool(true, title="Show Buy/Sell Signals?") highlighting = input.bool(true, title="Highlighter On/Off?") atr2 = ta.sma(ta.tr, Periods) atr = changeATR ? ta.atr(Periods) : atr2 up = src - (Multiplier * atr) up1 = na(up[1]) ? up : up[1] up := close[1] > up1 ? math.max(up, up1) : up dn = src + (Multiplier * atr) dn1 = na(dn[1]) ? dn : dn[1] dn := close[1] < dn1 ? math.min(dn, dn1) : dn trend = 1 trend := na(trend[1]) ? trend : trend[1] 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(series=buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0)) plotshape(series=buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.white) 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(series=sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0)) plotshape(series=sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.white) mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=1) longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 90) : color.new(color.white, 0)) : color.new(color.white, 0) shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 90) : color.new(color.white, 0)) : color.new(color.white, 0) fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor) fill(mPlot, dnPlot, title="DownTrend Highlighter", 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!") // Buy and Sell Signals based on EMA and Supertrend buySignalEMA = ta.crossover(close, ema) and trend == 1 sellSignalEMA = ta.crossunder(close, ema) and trend == -1 // Plot EMA plot(ema, color=color.blue, title="20 EMA") // Plot Buy and Sell Signals plotshape(series=buySignalEMA, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY") plotshape(series=sellSignalEMA, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL") // Strategy Entries and Exits if (buySignalEMA) strategy.entry("Buy", strategy.long) if (sellSignalEMA) strategy.close("Buy")