이 전략은 거래 신호를 생성하기 위해 MACD 지표의 컨버전스 및 디버전스를 사용합니다. MACD 라인이 신호 라인을 통과하고 MACD 라인의 값이 각각 1.5 이상 또는 -1.5 미만일 때 긴 신호와 짧은 신호를 생성합니다. 이 전략은 고정된 영리 및 스톱 로스 수준을 설정하고 리스크 리워드 비율 (R: R) 의 개념을 도입합니다. 또한 매일 최대 손실과 이익 제한과 더 긴 트레일링 스톱 로스를 사용하여 위험을 더 잘 제어합니다.
이 전략은 리스크-어워드 비율, 트레일링 스톱-러스, 그리고 일일 리미트와 같은 리스크 제어 조치를 도입하면서 거래 신호를 생성하기 위해 MACD 지표의 컨버전스 및 분리를 사용합니다. 전략은 트렌드 움직임을 포착하고 어느 정도 위험을 제어 할 수 있지만 여전히 최적화 및 개선의 여지가 있습니다. 미래에 최적화는 더 견고하고 상당한 수익을 얻기 위해 신호 확인, 수익 및 스톱-러스 수준, 트레일링 스톱-러스 및 일일 리미트와 같은 측면에서 고려 될 수 있습니다.
/*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")