Chiến lược này kết hợp chỉ số MACD và phương pháp quản lý tiền Martingale để nắm bắt các chuyển động thị trường xu hướng trong khi kiểm soát rủi ro. Chiến lược sử dụng sự chéo chéo của đường nhanh và đường chậm MACD như các tín hiệu giao dịch, và áp dụng một số lượng hạn chế phương pháp tiếp cận Martingale để kiểm soát kích thước vị trí. Khi một giao dịch thua lỗ xảy ra, chiến lược sẽ tăng gấp đôi số hợp đồng cho giao dịch tiếp theo, tối đa ba lần, để phục hồi lỗ trước đó. Đồng thời, chiến lược đặt ra các điều kiện lấy lợi nhuận và dừng lỗ để kiểm soát rủi ro hơn nữa.
Bằng cách kết hợp chỉ số MACD và phương pháp quản lý tiền Martingale, chiến lược này tìm cách kiếm lợi nhuận từ các thị trường xu hướng trong khi kiểm soát rủi ro. Logic chiến lược rõ ràng và dễ thực hiện, nhưng vẫn có những rủi ro liên quan đến đòn bẩy Martingale và hạn chế tỷ lệ lấy lợi nhuận và dừng lỗ cố định. Trong tương lai, chiến lược có thể được tối ưu hóa bằng cách điều chỉnh động cách tiếp cận đòn bẩy, tối ưu hóa tín hiệu giao dịch, áp dụng các phương pháp lấy lợi nhuận và dừng lỗ thích nghi và thực hiện quản lý vị trí để cải thiện độ bền và lợi nhuận của chiến lược.
/*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("Advanced MACD Strategy with Limited Martingale", overlay=true, initial_capital=500) // MACD 설정 변경 fastLength = 15 slowLength = 30 signalSmoothing = 9 [macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalSmoothing) // 계약수 및 이전 거래 결과 기록 var float contractSize = 0.02 // 계약 수를 0.05로 시작 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.015)) 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.02 // 리셋 할 때 0.05로 리셋 martingaleCount := 0 else contractSize := 0.02 // 초기화 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")