Chiến lược này đưa ra quyết định giao dịch dựa trên độ nghiêng của đường trung bình động (MA) và vị trí tương đối của giá đối với MA. Khi độ nghiêng của MA lớn hơn ngưỡng độ nghiêng tối thiểu và giá trên MA, chiến lược bắt đầu một vị trí dài. Ngoài ra, chiến lược sử dụng Trailing Stop Loss để quản lý rủi ro và cho phép tái nhập trong điều kiện cụ thể. Chiến lược nhằm mục đích nắm bắt các cơ hội trong xu hướng tăng trong khi tối ưu hóa lợi nhuận và rủi ro thông qua các cơ chế dừng lỗ và tái nhập năng động.
Chiến lược xác định xu hướng dựa trên độ nghiêng của đường trung bình động và vị trí tương đối của giá so với đường trung bình động. Nó sử dụng Trailing Stop Loss và các cơ chế tái nhập điều kiện để quản lý giao dịch. Điểm mạnh của chiến lược nằm trong khả năng theo dõi xu hướng, bảo vệ dừng lỗ năng động và nắm bắt các cơ hội tái nhập. Tuy nhiên, chiến lược cũng có những nhược điểm tiềm ẩn, chẳng hạn như độ nhạy của tham số, lỗi nhận dạng xu hướng, tần suất dừng lỗ và rủi ro tái nhập.
/*backtest start: 2024-05-01 00:00:00 end: 2024-05-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MA Incline Strategy with Trailing Stop-Loss and Conditional Re-Entry", overlay=true, calc_on_every_tick=true) // Input parameters windowSize = input.int(10, title="Window Size") maLength = input.int(150, title="Moving Average Length") minSlope = input.float(0.001, title="Minimum Slope") trailingStopPercentage = input.float(2.8, title="Trailing Stop Percentage (%)") / 100 reEntryPercentage = input.float(4.2, title="Re-Entry Percentage Above MA (%)") / 100 // Calculate the moving average ma = ta.sma(close, maLength) // Calculate the slope of the moving average over the window size previousMa = ta.sma(close[windowSize], maLength) slopeMa = (ma - previousMa) / windowSize // Check conditions isAboveMinSlope = slopeMa > minSlope isAboveMa = close > ma // Variables to track stop loss and re-entry condition var bool stopLossOccurred = false var float trailStopPrice = na // Buy condition buyCondition = isAboveMinSlope and isAboveMa and ((not stopLossOccurred) or (stopLossOccurred and low < ma * (1 + reEntryPercentage))) // Execute strategy if (buyCondition and strategy.opentrades == 0) if (stopLossOccurred and close < ma * (1 + reEntryPercentage)) strategy.entry("Long", strategy.long) stopLossOccurred := false else if (not stopLossOccurred) strategy.entry("Long", strategy.long) // Trailing stop-loss if (strategy.opentrades == 1) // Calculate the trailing stop price trailStopPrice := close * (1 - trailingStopPercentage) // Use the built-in strategy.exit function with the trailing stop strategy.exit("Trail Stop", "Long", stop=close * (1 - trailingStopPercentage)) // Exit condition sellCondition = ta.crossunder(close, ma) if (sellCondition and strategy.opentrades == 1) strategy.close("Long") // Check if stop loss occurred if (strategy.closedtrades > 0) lastExitPrice = strategy.closedtrades.exit_price(strategy.closedtrades - 1) if (not na(trailStopPrice) and lastExitPrice <= trailStopPrice) stopLossOccurred := true // Reset stop loss flag if the price crosses below the MA if (ta.crossunder(close, ma)) stopLossOccurred := false