Chiến lược này sử dụng sự hội tụ và phân kỳ của chỉ số MACD để tạo ra tín hiệu giao dịch. Khi đường MACD vượt qua đường tín hiệu, và giá trị của đường MACD lớn hơn 1,5 hoặc nhỏ hơn -1,5, nó tạo ra tín hiệu dài và ngắn, tương ứng. Chiến lược đặt mức lợi nhuận và dừng lỗ cố định và giới thiệu khái niệm tỷ lệ rủi ro-lợi nhuận (R: R). Ngoài ra, nó sử dụng mức lỗ tối đa hàng ngày và giới hạn lợi nhuận và mức dừng lỗ chặt chẽ hơn để kiểm soát tốt hơn rủi ro.
Chiến lược này sử dụng sự hội tụ và chênh lệch của chỉ số MACD để tạo ra tín hiệu giao dịch trong khi giới thiệu các biện pháp kiểm soát rủi ro như tỷ lệ rủi ro-lợi nhuận, dừng lỗ và giới hạn hàng ngày. Mặc dù chiến lược có thể nắm bắt các chuyển động xu hướng và kiểm soát rủi ro ở một mức độ nào đó, vẫn còn chỗ cho tối ưu hóa và cải thiện. Trong tương lai, tối ưu hóa có thể được xem xét từ các khía cạnh như xác nhận tín hiệu, mức lợi nhuận và dừng lỗ, dừng lỗ và giới hạn hàng ngày để có được lợi nhuận mạnh mẽ hơn và đáng kể.
/*backtest start: 2023-05-28 00:00:00 end: 2024-06-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © DD173838 //@version=5 strategy("MACD Convergence Strategy with R:R, Daily Limits, and Tighter Stop Loss", overlay=true, default_qty_type=strategy.fixed, default_qty_value=1) // MACD settings fastLength = input.int(12, title="Fast Length", minval=1) slowLength = input.int(26, title="Slow Length", minval=1) signalSmoothing = input.int(9, title="Signal Smoothing", minval=1) source = input(close, title="Source") // Calculate MACD [macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing) // Plot MACD and signal line plot(macdLine, title="MACD Line", color=color.blue) plot(signalLine, title="Signal Line", color=color.red) // Define convergence conditions macdConvergenceUp = ta.crossover(macdLine, signalLine) and macdLine > 1.5 macdConvergenceDown = ta.crossunder(macdLine, signalLine) and macdLine < -1.5 // Define take profit and stop loss takeProfit = 600 stopLoss = 100 // Plot buy and sell signals on the chart plotshape(series=macdConvergenceDown, title="Short Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SHORT") plotshape(series=macdConvergenceUp, title="Long Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="LONG") // Execute short and long orders with defined take profit and stop loss if (macdConvergenceDown) strategy.entry("Short", strategy.short, qty=1, stop=high + (stopLoss / syminfo.mintick), limit=low - (takeProfit / syminfo.mintick)) if (macdConvergenceUp) strategy.entry("Long", strategy.long, qty=1, stop=low - (stopLoss / syminfo.mintick), limit=high + (takeProfit / syminfo.mintick)) // Trailing stop logic var float entryPrice = na var float trailingStopPrice = na if (strategy.position_size != 0) entryPrice := strategy.opentrades.entry_price(0) if (strategy.position_size > 0) // For long positions if (close - entryPrice > 300) trailingStopPrice := entryPrice + (close - entryPrice - 300) if (strategy.position_size < 0) // For short positions if (entryPrice - close > 300) trailingStopPrice := entryPrice - (entryPrice - close - 300) if (strategy.position_size > 0 and not na(trailingStopPrice) and close < trailingStopPrice) strategy.close("Long", comment="Trailing Stop") if (strategy.position_size < 0 and not na(trailingStopPrice) and close > trailingStopPrice) strategy.close("Short", comment="Trailing Stop") // Daily drawdown and profit limits var float startOfDayEquity = na if (na(startOfDayEquity) or ta.change(time('D')) != 0) startOfDayEquity := strategy.equity maxDailyLoss = 600 maxDailyProfit = 1800 currentDailyPL = strategy.equity - startOfDayEquity if (currentDailyPL <= -maxDailyLoss) strategy.close_all(comment="Max Daily Loss Reached") if (currentDailyPL >= maxDailyProfit) strategy.close_all(comment="Max Daily Profit Reached")