Chiến lược này kết hợp chỉ số Pivot Point SuperTrend và chỉ số Double Exponential Moving Average (DEMA) để tạo ra tín hiệu giao dịch bằng cách phân tích vị trí giá tương đối với hai chỉ số này. Khi giá vượt qua chỉ số Pivot Point SuperTrend và cao hơn chỉ số DEMA, một tín hiệu dài được tạo ra; khi giá vượt qua chỉ số Pivot Point SuperTrend và thấp hơn chỉ số DEMA, một tín hiệu ngắn được tạo ra. Chiến lược này có thể nắm bắt xu hướng thị trường trung và dài hạn đồng thời phản ứng với biến động giá ngắn hạn.
Bằng cách kết hợp chỉ số Pivot Point SuperTrend và chỉ số DEMA, chiến lược này có thể nắm bắt hiệu quả xu hướng thị trường trong khi cũng phản ứng với biến động ngắn hạn. Chiến lược có những lợi thế như khả năng theo dõi xu hướng mạnh mẽ, khả năng thích nghi mạnh mẽ và khả năng kiểm soát rủi ro mạnh mẽ, nhưng cũng phải đối mặt với các rủi ro như thiết lập tham số, thị trường giới hạn phạm vi và đảo ngược xu hướng. Thông qua tối ưu hóa tham số, lọc tín hiệu, quản lý vị trí và tối ưu hóa danh mục đầu tư, sự ổn định và lợi nhuận của chiến lược có thể được cải thiện hơn nữa để thích nghi tốt hơn với môi trường thị trường khác nhau.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Simple Combined Strategy: Pivot Point SuperTrend and DEMA", overlay=true) // Pivot Point SuperTrend settings prd = input.int(2, title="Pivot Point Period", minval=1, maxval=50) Factor = input.float(3.0, title="ATR Factor", minval=1, step=0.1) Pd = input.int(10, title="ATR Period", minval=1) // Double EMA settings demaLength = input.int(200, title="DEMA Length", minval=1) src = input(close, title="Source") // Pip settings pipValue = input.float(0.0001, title="Pip Value") stopLossPips = input.int(15, title="Stop Loss (pips)") takeProfitPips = input.int(35, title="Take Profit (pips)") // Pivot Point SuperTrend Calculation float ph = ta.pivothigh(prd, prd) float pl = ta.pivotlow(prd, prd) var float center = na if not na(ph) center := na(center) ? ph : (center * 2 + ph) / 3 if not na(pl) center := na(center) ? pl : (center * 2 + pl) / 3 Up = center - (Factor * ta.atr(Pd)) Dn = center + (Factor * ta.atr(Pd)) var float TUp = na var float TDown = na var int Trend = na if na(Trend) TUp := Up TDown := Dn Trend := close > Dn ? 1 : -1 else TUp := close[1] > TUp[1] ? math.max(Up, TUp[1]) : Up TDown := close[1] < TDown[1] ? math.min(Dn, TDown[1]) : Dn Trend := close > TDown[1] ? 1 : close < TUp[1] ? -1 : nz(Trend[1], 1) Trailingsl = Trend == 1 ? TUp : TDown linecolor = Trend == 1 ? color.lime : color.red plot(Trailingsl, color=linecolor, linewidth=2, title="PP SuperTrend") // Double EMA Calculation e1 = ta.ema(src, demaLength) e2 = ta.ema(e1, demaLength) dema = 2 * e1 - e2 plot(dema, "DEMA", color=color.new(#43A047, 0)) // Strategy Logic longCondition = close > Trailingsl and close > dema and strategy.position_size <= 0 shortCondition = close < Trailingsl and close < dema and strategy.position_size >= 0 // Plot signals plotshape(series=longCondition, title="Long", location=location.belowbar, color=color.green, style=shape.labelup, text="Long") plotshape(series=shortCondition, title="Short", location=location.abovebar, color=color.red, style=shape.labeldown, text="Short") // Strategy Entry and Exit if (longCondition) strategy.entry("Long", strategy.long, stop=close - (stopLossPips * pipValue), limit=close + (takeProfitPips * pipValue)) if (shortCondition) strategy.entry("Short", strategy.short, stop=close + (stopLossPips * pipValue), limit=close - (takeProfitPips * pipValue)) alertcondition(longCondition, title="Long Alert", message="Long Signal") alertcondition(shortCondition, title="Short Alert", message="Short Signal")