이 전략은 상대적 강도 지수 (RSI) 및 이동 평균 컨버전스 디버전스 (MACD) 지표에 의해 확인 된 20 일 및 200 일 지수 지수 이동 평균 (EMA) 의 크로스오버를 기반으로 구매 및 판매 신호를 생성합니다. 이 전략은 거래 위험을 관리하고 이익을 잠금하기 위해 동적 스톱 로스 및 고정 수익 목표 방법을 사용합니다.
이 전략은 EMA 크로스오버 신호를 RSI 및 MACD 확인과 함께 동적 스톱 로스 및 고정 수익 목표 리스크 관리 방법과 결합하여 트렌딩 시장에서 안정적인 수익을 달성하는 것을 목표로합니다. 그러나 불안정한 시장에서 전략은 빈번한 거래 및 연속 손실의 위험에 직면 할 수 있습니다. 따라서 전략의 적응력과 견고성을 향상시키기 위해 추가 최적화 및 개선이 필요합니다.
/*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")