Chiến lược này tạo ra tín hiệu mua và bán dựa trên sự chéo chéo của Trung bình Di chuyển Triệt để (EMA) 20 ngày và 200 ngày, được xác nhận bởi Chỉ số Sức mạnh Tương đối (RSI) và Chỉ số Divergence Convergence Divergence (MACD).
Bằng cách kết hợp các tín hiệu chéo EMA với xác nhận RSI và MACD, cùng với các phương pháp quản lý rủi ro dừng lỗ động và mục tiêu lợi nhuận cố định, chiến lược này nhằm mục đích đạt được lợi nhuận ổn định trong các thị trường xu hướng. Tuy nhiên, trong các thị trường hỗn loạn, chiến lược có thể phải đối mặt với rủi ro giao dịch thường xuyên và thua lỗ liên tiếp. Do đó, cần tối ưu hóa và cải tiến thêm để tăng khả năng thích nghi và độ bền của chiến lược.
/*backtest start: 2023-06-11 00:00:00 end: 2024-06-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMA Crossover Strategy with RSI and MACD Confirmation and Dynamic Trailing Stop Loss", overlay=true) // Calculate EMAs ema20 = ta.ema(close, 20) ema200 = ta.ema(close, 200) // Calculate RSI rsi = ta.rsi(close, 14) // Calculate MACD [macdLine, signalLine, _] = ta.macd(close, 12, 26, 9) // Plot EMAs, RSI, and MACD on the chart plot(ema20, color=color.blue, title="EMA 20") plot(ema200, color=color.red, title="EMA 200") hline(70, "Overbought", color=color.red) hline(30, "Oversold", color=color.green) plot(rsi, title="RSI", color=color.orange) hline(0, "Zero Line", color=color.gray) plot(macdLine, title="MACD Line", color=color.aqua) plot(signalLine, title="Signal Line", color=color.fuchsia) // Strategy parameters targetProfitPercent = 20 trailingStopIncrement = 10 // Strategy variables var float initialStopLevel = na var float trailingStopLevel = na // Strategy rules with RSI and MACD confirmation longCondition = ta.crossover(ema20, ema200) and rsi > 50 and macdLine > signalLine shortCondition = ta.crossunder(ema20, ema200) and rsi < 50 and macdLine < signalLine // Execute trades if (longCondition) strategy.entry("Buy Call", strategy.long) initialStopLevel := strategy.position_avg_price * (1 - 0.10) // Initial stop-loss at 10% below entry price if (shortCondition) strategy.entry("Buy Put", strategy.short) // Calculate profit and loss targets takeProfit = strategy.position_avg_price * (1 + targetProfitPercent / 100) // 20% profit target // Update trailing stop loss if (strategy.opentrades > 0) if (strategy.position_size > 0) // Long position if (strategy.netprofit >= takeProfit) // Update stop-loss based on profit increments if (trailingStopLevel == na) trailingStopLevel := strategy.position_avg_price * (1 - 0.10) // Initial trailing stop at 10% below entry price else if (strategy.position_avg_price * (1 - 0.10) > trailingStopLevel) trailingStopLevel := strategy.position_avg_price * (1 - 0.10) // Increase stop-loss to 10% below current price // Apply trailing stop loss strategy.exit("Take Profit", "Buy Call", stop=trailingStopLevel) // Plot buy and sell signals on the chart plotshape(series=longCondition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=shortCondition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")