이 전략은 트렌드를 따르는 거래 시스템으로 여러 가지 간단한 이동 평균 (SMA) 을 스토카스틱 오시일레이터와 결합합니다. 가격 구역과 트렌드 식별 조건을 설정하여 시장 추세가 명확하게 정의 될 때 거래를 실행합니다. 이 전략은 시장 움직임에 따라 포지션 관리를 조정하는 동적 스톱-로스 메커니즘을 사용하여 수익을 보호하고 조기 출출을 피합니다.
이 전략은 몇 가지 핵심 요소에 기반합니다.
이 전략은 여러 가지 기술 지표를 결합하여 강력한 트렌드 추적 기능과 위험 관리 메커니즘을 갖춘 포괄적인 거래 시스템을 구축합니다. 특정 시장 조건에서 과제에 직면 할 수 있지만 지속적인 최적화와 정밀화는 다양한 시장 환경에서 안정적인 성능을 유지하는 데 도움이 될 수 있습니다. 트레이더는 라이브 트레이딩에서 전략을 구현할 때 포지션 크기를 제어하고 적절한 스톱 로스를 설정하고 시장 조건에 따라 매개 변수를 조정하는 것이 좋습니다.
/*backtest start: 2024-11-26 00:00:00 end: 2024-12-25 08:00:00 period: 4h basePeriod: 4h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Purple SMA Strategy", overlay=true) // === INPUTS === zoneLength = input.int(20, "Price Zone Length", minval=5) tickSize = input.float(1.0, "Tick Size for Hard Stop") hardStopTicks = input.int(50, "Hard Stop Loss in Ticks") // === CALCULATE ZONES === h = ta.highest(high, zoneLength) l = ta.lowest(low, zoneLength) priceRange = h - l lvl5 = h lvl4 = l + (priceRange * 0.75) // Orange line lvl3 = l + (priceRange * 0.50) // Yellow line lvl2 = l + (priceRange * 0.25) // Green line lvl1 = l // === INDICATORS === sma19 = ta.sma(close, 19) sma74 = ta.sma(close, 74) // === CANDLE COLOR CONDITIONS === isGreenCandle = close > open isRedCandle = close < open // === CONTINUOUS TREND DETECTION === isThreeGreenCandles = close > open and close[1] > open[1] and close[2] > open[2] isThreeRedCandles = close < open and close[1] < open[1] and close[2] < open[2] var bool inGreenTrend = false var bool inRedTrend = false // Update trends if isThreeGreenCandles inGreenTrend := true inRedTrend := false if isThreeRedCandles inRedTrend := true inGreenTrend := false if (inGreenTrend and isRedCandle) or (inRedTrend and isGreenCandle) inGreenTrend := false inRedTrend := false // === STOCHASTIC CONDITIONS === k = ta.stoch(close, high, low, 60) d = ta.sma(k, 10) isOverbought = d >= 80 isOversold = d <= 20 stochUp = d > d[1] stochDown = d < d[1] // === SMA COLOR LOGIC === sma19Color = if isOverbought and stochUp color.green else if isOverbought and stochDown color.red else if isOversold and stochUp color.green else if isOversold and stochDown color.red else if stochUp color.blue else if stochDown color.purple else color.gray sma74Color = sma74 < sma19 ? color.green : color.red // === CROSSING CONDITIONS === crossUpSMA = ta.crossover(close, sma74) crossDownSMA = ta.crossunder(close, sma74) // === ENTRY CONDITIONS === buyCondition = crossUpSMA and close > lvl4 sellCondition = crossDownSMA and close < lvl2 // === POSITION MANAGEMENT === var float stopLevel = na var bool xMode = false // Entry and Stop Loss if buyCondition strategy.entry(id="Long", direction=strategy.long) stopLevel := close - (hardStopTicks * tickSize) xMode := false if sellCondition strategy.entry(id="Short", direction=strategy.short) stopLevel := close + (hardStopTicks * tickSize) xMode := false // Update stops based on X's if strategy.position_size != 0 and (inGreenTrend or inRedTrend) xMode := true if strategy.position_size > 0 // Long position stopLevel := low else // Short position stopLevel := high // Exit logic if strategy.position_size > 0 // Long position if low <= stopLevel strategy.close(id="Long") else if xMode and not (inGreenTrend or inRedTrend) strategy.close(id="Long") if strategy.position_size < 0 // Short position if high >= stopLevel strategy.close(id="Short") else if xMode and not (inGreenTrend or inRedTrend) strategy.close(id="Short") // === PLOTTING === plot(sma19, "SMA 19", color=sma19Color, linewidth=2) plot(sma74, "SMA 74", color=sma74Color, linewidth=2) plot(lvl5, "Upper Zone Top", color=color.red, linewidth=2) plot(lvl4, "Upper Zone Bottom", color=color.orange, linewidth=2) plot(lvl3, "Middle Line", color=color.yellow, linewidth=2) plot(lvl2, "Lower Zone Top", color=color.green, linewidth=2) plot(lvl1, "Lower Zone Bottom", color=color.blue, linewidth=2) // Plot X signals plotshape(inGreenTrend, title="Bullish Line", style=shape.xcross, location=location.belowbar, color=color.white, size=size.tiny) plotshape(inRedTrend, title="Bearish Line", style=shape.xcross, location=location.abovebar, color=color.white, size=size.tiny) // Zone fills var p1 = plot(lvl5, display=display.none) var p2 = plot(lvl4, display=display.none) var p3 = plot(lvl2, display=display.none) var p4 = plot(lvl1, display=display.none) fill(p1, p2, color=color.new(color.red, 90)) fill(p3, p4, color=color.new(color.green, 90)) // Plot entry signals plotshape(buyCondition, title="Buy", style=shape.square, location=location.belowbar, color=color.new(color.blue, 20), size=size.tiny, text="BUY", textcolor=color.blue) plotshape(sellCondition, title="Sell", style=shape.square, location=location.abovebar, color=color.new(color.red, 20), size=size.tiny, text="SELL", textcolor=color.red)