Chiến lược Supertrend và EMA là một chiến lược giao dịch kết hợp các chỉ số Supertrend và nhiều chỉ số EMA. Chiến lược này sử dụng chỉ số Supertrend để xác định hướng xu hướng của thị trường hiện tại, đồng thời sử dụng các chỉ số EMA trong các chu kỳ khác nhau để kích hoạt tín hiệu bán.
Nguyên tắc cốt lõi của chiến lược kết hợp Supertrend và EMA là sử dụng các đặc điểm của Supertrend và EMA để nắm bắt sự thay đổi xu hướng và biến động giá trên thị trường. Supertrend đánh giá xu hướng của thị trường hiện tại bằng cách so sánh giá đóng hiện tại với quỹ đạo giảm trong chu kỳ trước. Khi giá đóng, thị trường có xu hướng tăng; khi giá đóng, thị trường có xu hướng giảm.
Chiến lược Supertrend và EMA kết hợp để tạo thành một hệ thống giao dịch theo dõi xu hướng hoàn chỉnh bằng cách kết hợp các chỉ số Supertrend với nhiều chỉ số EMA. Chiến lược này sử dụng chỉ số Supertrend để xác định xu hướng thị trường, đồng thời tạo ra tín hiệu bán qua sự giao thoa của EMA, có những lợi thế như khả năng theo dõi xu hướng mạnh mẽ, xác nhận tín hiệu đáng tin cậy, tính thích nghi rộng rãi. Tuy nhiên, chiến lược cũng phải đối mặt với các rủi ro như tối ưu hóa tham số, biến động thị trường và đảo ngược xu hướng, cần tối ưu hóa và cải tiến bằng nhiều cách như tối ưu hóa tham số, lọc tín hiệu, ngăn chặn lỗ và chu kỳ đa dạng để tăng độ bền và lợi nhuận của chiến lược.
/*backtest start: 2023-06-01 00:00:00 end: 2024-06-06 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Supertrend EMA Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10) // Supertrend Parameters atrPeriod = input(10, title="ATR Period") src = input(hl2, title="Source") multiplier = input(3.0, title="ATR Multiplier", step=0.1) changeATR = input(true, title="Change ATR Calculation Method?") showSignals = input(true, title="Show Buy/Sell Signals?") highlighting = input(true, title="Highlighter On/Off?") // Calculate ATR atr = changeATR ? atr(atrPeriod) : sma(tr, atrPeriod) // Calculate Supertrend up = src - (multiplier * atr) dn = src + (multiplier * atr) up1 = nz(up[1], up) dn1 = nz(dn[1], dn) up := close[1] > up1 ? max(up, up1) : up 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 // Plot Supertrend upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) // EMA Parameters shortEmaLength = input(20, title="Short EMA Length") mediumEmaLength = input(50, title="Medium EMA Length") longEmaLength = input(100, title="Long EMA Length") longestEmaLength = input(200, title="Longest EMA Length") // Calculate EMA shortEma = ema(close, shortEmaLength) mediumEma = ema(close, mediumEmaLength) longEma = ema(close, longEmaLength) longestEma = ema(close, longestEmaLength) // Plot EMA plot(shortEma, color=color.red, title="EMA 20") plot(mediumEma, color=color.orange, title="EMA 50") plot(longEma, color=color.aqua, title="EMA 100") plot(longestEma, color=color.blue, title="EMA 200") // Define Buy and Sell Conditions buyCondition = crossover(shortEma, mediumEma) and trend == 1 sellCondition = crossunder(shortEma, mediumEma) and trend == -1 // Plot Buy/Sell Signals plotshape(series=buyCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=sellCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL") // Add Text Labels for Buy and Sell Signals if (buyCondition) label.new(bar_index, high, text="Buy", color=color.green, textcolor=color.white, style=label.style_label_up, yloc=yloc.abovebar) if (sellCondition) label.new(bar_index, low, text="Sell", color=color.red, textcolor=color.white, style=label.style_label_down, yloc=yloc.belowbar) // Strategy Entry and Exit if (buyCondition) strategy.entry("Buy", strategy.long) if (sellCondition) strategy.close("Buy") // Highlight Trend longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white fill(plot(ohlc4, title="", style=plot.style_circles, linewidth=0), upPlot, title="UpTrend Highlighter", color=longFillColor) fill(plot(ohlc4, title="", style=plot.style_circles, linewidth=0), dnPlot, title="DownTrend Highlighter", color=shortFillColor) // Alerts alertcondition(buyCondition, title="Buy Alert", message="Supertrend EMA Buy Signal") alertcondition(sellCondition, title="Sell Alert", message="Supertrend EMA Sell Signal")