이 전략은 멀티 타임프레임 분석, 이동 평균, 모멘텀 지표 및 변동성 지표를 결합한 종합적인 트렌드 다음 거래 시스템이다. 이 시스템은 단기 및 장기 지수 이동 평균 (EMA) 의 크로스오버를 통해 트렌드 방향을 식별하고, 과잉 구매 / 과잉 판매 조건에 대한 상대 강도 지표 (RSI) 를 사용하며, 모멘텀 확인을 위해 MACD를 통합하고, 트렌드 필터로 더 높은 시간 프레임 EMA를 사용합니다. 이 시스템은 시장 변동성에 적응하는 ATR 기반의 역동적 스톱 로스 및 영리 메커니즘을 사용합니다.
이 전략은 거래 결정에 대한 다층 검증 메커니즘을 사용합니다.
이 시스템은 여러 조건이 충족되면 거래에 들어갈 수 있습니다. EMA 크로스오버, RSI가 극단적 인 수준에 있지 않고, 올바른 MACD 방향 및 더 높은 시간 프레임 트렌드 확인. 출구는 고정 수익 목표와 함께 트레이닝 스톱을 결합합니다.
이 전략은 트렌드 트레이딩 시스템으로, 여러 가지 기술 지표와 엄격한 리스크 관리 프로토콜을 결합하여 트렌딩 시장에서 안정적인 수익을 얻을 수 있습니다. 이 시스템은 매우 확장 가능하며 최적화를 통해 다양한 시장 환경에 적응할 수 있습니다. 라이브 트레이딩 전에 철저한 백테스팅과 매개 변수 최적화가 권장됩니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-24 00:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Trend Following with ATR, MTF Confirmation, and MACD", overlay=true) // Parameters emaShortPeriod = input.int(9, title="Short EMA Period", minval=1) emaLongPeriod = input.int(21, title="Long EMA Period", minval=1) rsiPeriod = input.int(14, title="RSI Period", minval=1) rsiOverbought = input.int(70, title="RSI Overbought", minval=50) rsiOversold = input.int(30, title="RSI Oversold", minval=1) atrPeriod = input.int(14, title="ATR Period", minval=1) atrMultiplier = input.float(1.5, title="ATR Multiplier", minval=0.1) takeProfitATRMultiplier = input.float(2.0, title="Take Profit ATR Multiplier", minval=0.1) // Multi-timeframe settings htfEMAEnabled = input.bool(true, title="Use Higher Timeframe EMA Confirmation?", inline="htf") htfEMATimeframe = input.timeframe("D", title="Higher Timeframe", inline="htf") // MACD Parameters macdShortPeriod = input.int(12, title="MACD Short Period", minval=1) macdLongPeriod = input.int(26, title="MACD Long Period", minval=1) macdSignalPeriod = input.int(9, title="MACD Signal Period", minval=1) // Select trade direction tradeDirection = input.string("Both", title="Trade Direction", options=["Both", "Long", "Short"]) // Calculating indicators emaShort = ta.ema(close, emaShortPeriod) emaLong = ta.ema(close, emaLongPeriod) rsiValue = ta.rsi(close, rsiPeriod) atrValue = ta.atr(atrPeriod) // Calculate MACD [macdLine, macdSignalLine, _] = ta.macd(close, macdShortPeriod, macdLongPeriod, macdSignalPeriod) // Higher timeframe EMA confirmation htfEMALong = request.security(syminfo.tickerid, htfEMATimeframe, ta.ema(close, emaLongPeriod)) // Trading conditions longCondition = ta.crossover(emaShort, emaLong) and rsiValue < rsiOverbought and (not htfEMAEnabled or close > htfEMALong) and macdLine > macdSignalLine shortCondition = ta.crossunder(emaShort, emaLong) and rsiValue > rsiOversold and (not htfEMAEnabled or close < htfEMALong) and macdLine < macdSignalLine // Plotting EMAs plot(emaShort, title="EMA Short", color=color.green) plot(emaLong, title="EMA Long", color=color.red) // Plotting MACD hline(0, "Zero Line", color=color.gray) plot(macdLine - macdSignalLine, title="MACD Histogram", color=color.green, style=plot.style_histogram) plot(macdLine, title="MACD Line", color=color.blue) plot(macdSignalLine, title="MACD Signal Line", color=color.red) // Trailing Stop-Loss and Take-Profit levels var float trailStopLoss = na var float trailTakeProfit = na if (strategy.position_size > 0) // Long Position trailStopLoss := na(trailStopLoss) ? close - atrValue * atrMultiplier : math.max(trailStopLoss, close - atrValue * atrMultiplier) trailTakeProfit := close + atrValue * takeProfitATRMultiplier strategy.exit("Exit Long", "Long", stop=trailStopLoss, limit=trailTakeProfit, when=shortCondition) if (strategy.position_size < 0) // Short Position trailStopLoss := na(trailStopLoss) ? close + atrValue * atrMultiplier : math.min(trailStopLoss, close + atrValue * atrMultiplier) trailTakeProfit := close - atrValue * takeProfitATRMultiplier strategy.exit("Exit Short", "Short", stop=trailStopLoss, limit=trailTakeProfit, when=longCondition) // Strategy Entry if (longCondition and (tradeDirection == "Both" or tradeDirection == "Long")) strategy.entry("Long", strategy.long) if (shortCondition and (tradeDirection == "Both" or tradeDirection == "Short")) strategy.entry("Short", strategy.short) // Plotting Buy/Sell signals 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") // Plotting Trailing Stop-Loss and Take-Profit levels plot(strategy.position_size > 0 ? trailStopLoss : na, title="Long Trailing Stop Loss", color=color.red, linewidth=2, style=plot.style_line) plot(strategy.position_size < 0 ? trailStopLoss : na, title="Short Trailing Stop Loss", color=color.green, linewidth=2, style=plot.style_line) plot(strategy.position_size > 0 ? trailTakeProfit : na, title="Long Take Profit", color=color.blue, linewidth=2, style=plot.style_line) plot(strategy.position_size < 0 ? trailTakeProfit : na, title="Short Take Profit", color=color.orange, linewidth=2, style=plot.style_line)