Chiến lược này là một hệ thống giao dịch định lượng dựa trên các đường trung bình động, chỉ số RSI và dừng lỗ. Nó kết hợp các chỉ số theo xu hướng và động lực từ phân tích kỹ thuật, đạt được giao dịch kiểm soát rủi ro thông qua các điều kiện nhập và thoát nghiêm ngặt.
Chiến lược này sử dụng đường trung bình di chuyển đơn giản 200 ngày (SMA) làm cơ sở để đánh giá xu hướng, kết hợp với Chỉ số sức mạnh tương đối (RSI) để tạo ra các tín hiệu giao dịch. 1. Sử dụng SMA 200 ngày để đánh giá xu hướng chính, chỉ xem xét các vị trí dài khi giá trên mức trung bình 2. Xác định các tín hiệu bán quá mức khi RSI giảm xuống dưới ngưỡng đã đặt trước (bất định 40) 3. Khởi động long entry khi cả hai điều kiện được đáp ứng và thời gian chờ kể từ khi thoát cuối cùng (thông thường 10 ngày) đã trôi qua 4. Bảo vệ lợi nhuận trong thời gian giữ vị trí thông qua dừng lỗ cuối cùng (bên định 5%) 5. Ra khỏi vị trí khi giá phá vỡ dưới điểm dừng hoặc SMA 200 ngày
Đây là một chiến lược giao dịch định lượng với cấu trúc hoàn chỉnh và logic rõ ràng. Nó theo đuổi lợi nhuận ổn định trong khi kiểm soát rủi ro bằng cách kết hợp nhiều chỉ số kỹ thuật. Mặc dù có chỗ tối ưu hóa, khung cơ bản có tính thực tế và khả năng mở rộng tốt. Chiến lược này phù hợp với các nhà đầu tư trung và dài hạn và thích nghi tốt với các môi trường thị trường khác nhau.
/*backtest start: 2025-01-09 00:00:00 end: 2025-01-16 00:00:00 period: 15m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("200 SMA Crossover Strategy", overlay=false) // Define inputs smaLength = input.int(200, title="SMA Length") rsiLength = input.int(14, title="RSI Length") rsiThreshold = input.float(40, title="RSI Threshold") trailStopPercent = input.float(5.0, title="Trailing Stop Loss (%)") waitingPeriod = input.int(10, title="Waiting Period (Days)") // Calculate 200 SMA sma200 = ta.sma(close, smaLength) // Calculate RSI rsi = ta.rsi(close, rsiLength) // Plot the 200 SMA and RSI plot(sma200, color=color.blue, linewidth=2, title="200 SMA") plot(rsi, color=color.purple, title="RSI", display=display.none) // Define buy and sell conditions var isLong = false var float lastExitTime = na var float trailStopPrice = na // Explicitly declare timeSinceExit as float float timeSinceExit = na(lastExitTime) ? na : (time - lastExitTime) / (24 * 60 * 60 * 1000) canEnter = na(lastExitTime) or timeSinceExit > waitingPeriod buyCondition = close > sma200 and rsi < rsiThreshold and canEnter if (buyCondition and not isLong) strategy.entry("Buy", strategy.long) trailStopPrice := na isLong := true // Update trailing stop loss if long if (isLong) trailStopPrice := na(trailStopPrice) ? close * (1 - trailStopPercent / 100) : math.max(trailStopPrice, close * (1 - trailStopPercent / 100)) // Check for trailing stop loss or sell condition if (isLong and (close < trailStopPrice or close < sma200)) strategy.close("Buy") lastExitTime := time isLong := false // Plot buy and sell signals plotshape(series=buyCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=(isLong and close < trailStopPrice) or close < sma200, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")