Chiến lược này kết hợp chỉ số MACD với phương pháp quản lý tiền Martingale hạn chế để nắm bắt các cơ hội giao dịch khi xu hướng thị trường thay đổi. Một tín hiệu mua được tạo ra khi đường nhanh MACD vượt qua đường chậm, và một tín hiệu bán được tạo ra khi đường nhanh vượt qua đường chậm. Đồng thời, chiến lược sử dụng phương pháp Martingale hạn chế để kiểm soát rút tiền, với tối đa 3 vị trí bổ sung. Chiến lược đặt mức lợi nhuận cố định và dừng lỗ 1% cho mỗi giao dịch.
Chiến lược này nắm bắt xu hướng thông qua chỉ số MACD trong khi sử dụng Martingale hạn chế để kiểm soát giảm giá, có thể đạt được kết quả tốt trong thị trường xu hướng. Tuy nhiên, chiến lược cũng có một số rủi ro nhất định, chẳng hạn như thất bại tín hiệu và lỗ dừng cố định. Bằng cách giới thiệu các chỉ số khác, tối ưu hóa cài đặt tham số, kích thước vị trí và các phương pháp khác, độ mạnh mẽ và lợi nhuận của chiến lược này có thể được cải thiện hơn nữa.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Advanced MACD Strategy with Limited Martingale", overlay=true, initial_capital=100) // MACD 설정 fastLength = 15 slowLength = 30 signalSmoothing = 9 [macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalSmoothing) // 계약수 및 이전 거래 결과 기록 var float contractSize = 0.01 var int martingaleCount = 0 // 마틴게일 카운트 var float lastTradeResult = 0 // 매수 및 매도 조건 longCondition = ta.crossover(macdLine, signalLine) shortCondition = ta.crossunder(macdLine, signalLine) // 매수 신호 if (longCondition) strategy.entry("Long", strategy.long, qty=contractSize) lastTradeResult := strategy.netprofit // 매도 신호 if (shortCondition) strategy.entry("Short", strategy.short, qty=contractSize) lastTradeResult := strategy.netprofit // 익절 및 손절 조건 strategy.close("Long", when=(close / strategy.position_avg_price >= 1.01)) strategy.close("Short", when=(strategy.position_avg_price / close >= 1.01)) strategy.close("Long", when=(close / strategy.position_avg_price <= 0.99)) strategy.close("Short", when=(strategy.position_avg_price / close <= 0.99)) // 마틴게일 전략 적용 if (strategy.netprofit < lastTradeResult) if (martingaleCount < 3) contractSize := contractSize * 2 martingaleCount := martingaleCount + 1 else contractSize := 0.01 martingaleCount := 0 else contractSize := 0.01 martingaleCount := 0 // 매수, 매도 포인트 화살표로 표시 plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="Buy") plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")