이 전략은 트렌드를 따라 스윙 트레이딩 방법, EMA와 SMA 크로스오버, 스윙 하이/로 식별, 볼륨 필터링, 그리고 비율 기반의 영업 및 트레일링 스톱 로스 메커니즘을 활용한 종합적인 거래 시스템이다. 이 전략은 다차원 신호 확인을 강조하며 기술 지표의 시너지 효과를 통해 거래 정확성을 향상시킨다.
이 전략은 다층 신호 필터링 메커니즘을 사용하며, 기본 트렌드 결정에 EMA ((10) 와 SMA ((21) 크로스오버를 시작으로, 입시 시기를 위해 6바르 왼쪽/오른 피보트 포인트 브레이크오프를 사용하면서 충분한 유동성을 보장하기 위해 200주기 이동 평균 이상의 볼륨을 요구합니다. 이 시스템은 리스크 관리를 위해 2%의 수익을 취하고 1%의 트레일링 스톱 로스를 사용합니다. 가격이 볼륨 확인과 함께 스윙 최하위 이상으로 넘어갈 때 긴 포지션은 시작됩니다. 가격이 볼륨 확인과 함께 스윙 최하위 이하로 넘어갈 때 짧은 포지션은 취합니다.
이 전략은 중장기 트렌드를 따르는 데 적합한 이동 평균, 가격 브레이크, 및 볼륨 검증을 통해 완전한 거래 시스템을 구축합니다. 이 전략의 강점은 여러 신호 확인과 포괄적인 위험 관리에 있습니다. 그러나 다양한 시장에서의 성능은 주의가 필요합니다. 제안된 최적화, 특히 적응력으로 인해 전략은 안정성과 성능 향상에 대한 여지가 있습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-09 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 // Strategy combining EMA/SMA Crossover, Swing High/Low, Volume Filtering, and Percentage TP & Trailing Stop strategy("Swing High/Low Strategy with Volume, EMA/SMA Crossovers, Percentage TP and Trailing Stop", overlay=true) // --- Inputs --- source = close TITLE = input(false, title='Enable Alerts & Background Color for EMA/SMA Crossovers') turnonAlerts = input(true, title='Turn on Alerts?') colorbars = input(true, title="Color Bars?") turnonEMASMA = input(true, title='Turn on EMA1 & SMA2?') backgroundcolor = input(false, title='Enable Background Color?') // EMA/SMA Lengths emaLength = input.int(10, minval=1, title='EMA Length') smaLength = input.int(21, minval=1, title='SMA Length') ema1 = ta.ema(source, emaLength) sma2 = ta.sma(source, smaLength) // Swing High/Low Lengths leftBars = input.int(6, title="Left Bars for Swing High/Low", minval=1) rightBars = input.int(6, title="Right Bars for Swing High/Low", minval=1) // Volume MA Length volMaLength = input.int(200, title="Volume Moving Average Length") // Percentage Take Profit with hundredth place adjustment takeProfitPercent = input.float(2.00, title="Take Profit Percentage (%)", minval=0.01, step=0.01) / 100 // Trailing Stop Loss Option useTrailingStop = input.bool(true, title="Enable Trailing Stop Loss?") trailingStopPercent = input.float(1.00, title="Trailing Stop Loss Percentage (%)", minval=0.01, step=0.01) / 100 // --- Swing High/Low Logic --- pivotHigh(_leftBars, _rightBars) => ta.pivothigh(_leftBars, _rightBars) pivotLow(_leftBars, _rightBars) => ta.pivotlow(_leftBars, _rightBars) ph = fixnan(pivotHigh(leftBars, rightBars)) pl = fixnan(pivotLow(leftBars, rightBars)) // --- Volume Condition --- volMa = ta.sma(volume, volMaLength) // Declare exit conditions as 'var' so they are initialized var bool longExitCondition = na var bool shortExitCondition = na // --- Long Entry Condition: Close above Swing High & Volume >= 200 MA --- longCondition = (close > ph and volume >= volMa) if (longCondition) strategy.entry("Long", strategy.long) // --- Short Entry Condition: Close below Swing Low & Volume >= 200 MA --- shortCondition = (close < pl and volume >= volMa) if (shortCondition) strategy.entry("Short", strategy.short) // --- Take Profit and Trailing Stop Logic --- // For long position: Set take profit at the entry price + takeProfitPercent longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercent) shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercent) // --- Long Exit Logic --- if (useTrailingStop) // Trailing Stop for Long strategy.exit("Long Exit", "Long", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=longTakeProfitLevel) else // Exit Long on Take Profit only strategy.exit("Long Exit", "Long", limit=longTakeProfitLevel) // --- Short Exit Logic --- if (useTrailingStop) // Trailing Stop for Short strategy.exit("Short Exit", "Short", stop=na, trail_offset=strategy.position_avg_price * trailingStopPercent, limit=shortTakeProfitLevel) else // Exit Short on Take Profit only strategy.exit("Short Exit", "Short", limit=shortTakeProfitLevel) // --- Plot Swing High/Low --- plot(ph, style=plot.style_circles, linewidth=1, color=color.blue, offset=-rightBars, title="Swing High") plot(ph, style=plot.style_line, linewidth=1, color=color.blue, offset=0, title="Swing High") plot(pl, style=plot.style_circles, linewidth=1, color=color.red, offset=-rightBars, title="Swing High") plot(pl, style=plot.style_line, linewidth=1, color=color.red, offset=0, title="Swing High") // --- Plot EMA/SMA --- plot(turnonEMASMA ? ema1 : na, color=color.green, title="EMA") plot(turnonEMASMA ? sma2 : na, color=color.orange, title="SMA") // --- Alerts --- alertcondition(longCondition, title="Long Entry", message="Price closed above Swing High with Volume >= 200 MA") alertcondition(shortCondition, title="Short Entry", message="Price closed below Swing Low with Volume >= 200 MA") // --- Bar Colors for Visualization --- barcolor(longCondition ? color.green : na, title="Long Entry Color") barcolor(shortCondition ? color.red : na, title="Short Entry Color") bgcolor(backgroundcolor ? (ema1 > sma2 ? color.new(color.green, 50) : color.new(color.red, 50)) : na)