이 전략은 이중 이동 평균 채널을 기반으로 한 동적 트렌드 다음 시스템이며, 위험 관리 메커니즘과 결합됩니다. 상위 대역이 높은 가격과 하위 대역이 낮은 가격을 사용하여 계산되는 두 가지 간단한 이동 평균 (SMA) 을 사용하여 거래 채널을 구성합니다. 시스템은 폐쇄 가격이 5 개의 연속 바에서 상위 대역 위에 남아있을 때 입구 신호를 생성하고, 가격이 5 개의 연속 바에서 하위 대역 아래에 떨어지거나 가장 높은 지점에서 25% 회귀 할 때 출구 신호를 생성하여 동적 트렌드 추적 및 위험 통제를 달성합니다.
핵심 원칙은 두 개의 이동 평균 채널을 통해 가격 동향을 포착하고 엄격한 입출시장치를 설정하는 것을 포함합니다. 1. 진입 메커니즘: 트렌드 연속성과 유효성을 보장하기 위해 5 일 연속으로 상위 밴드 위에 가격을 유지해야합니다. 2. 출구 메커니즘: 두 단계로 작동 합니다. - 트렌드 오차 출구: 5 일 연속으로 가격이 하위 범위를 넘어지면 트렌드 역전 가능성을 나타냅니다. - 스톱 로스 출구: 가격이 가장 높은 지점에서 25%로 다시 움직일 때 활성화되어 과도한 손실을 방지합니다. 포지션 관리: 포지션 크기를 결정하기 위해 계좌 자금의 일정한 비율을 사용하여 효과적인 자본 할당을 보장합니다.
이 전략은 두 개의 이동 평균 채널을 통해 트렌드를 따르는 완전한 거래 시스템을 구축하고, 효과적인 트렌드 추적 및 리스크 통제를 달성하기 위해 엄격한 엔트리 확인과 두 가지 출구 메커니즘을 결합합니다. 이 전략의 강점은 명확한 실행 논리와 포괄적인 리스크 제어에 있습니다.
/*backtest start: 2025-01-02 00:00:00 end: 2025-01-09 00:00:00 period: 10m basePeriod: 10m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("Moving Average Channel (MAC)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // Parameters for Moving Averages upperMALength = input.int(10, title="Upper MA Length") lowerMALength = input.int(8, title="Lower MA Length") stopLossPercent = input.float(25.0, title="Stop Loss (%)", minval=0.1) / 100 // Calculate Moving Averages upperMA = ta.sma(high, upperMALength) lowerMA = ta.sma(low, lowerMALength) // Plot Moving Averages plot(upperMA, color=color.red, title="Upper Moving Average") plot(lowerMA, color=color.green, title="Lower Moving Average") // Initialize variables var int upperCounter = 0 var int lowerCounter = 0 var float entryPrice = na var float highestPrice = na // Update counters based on conditions if (low <= upperMA) upperCounter := 0 else upperCounter += 1 if (high >= lowerMA) lowerCounter := 0 else lowerCounter += 1 // Entry condition: 5 consecutive bars above the Upper MA if (upperCounter == 5 and strategy.position_size == 0) strategy.entry("Long", strategy.long) highestPrice := high // Initialize highest price // Update the highest price after entry if (strategy.position_size > 0) highestPrice := na(highestPrice) ? high : math.max(highestPrice, high) // Exit condition: 5 consecutive bars below the Lower MA if (lowerCounter == 5 and strategy.position_size > 0) strategy.close("Long", comment="Exit: 5 bars below Lower MA") // Stop-loss condition: Exit if market closes below 25% of the highest price since entry stopLossCondition = low < highestPrice * (1 - stopLossPercent) if (stopLossCondition and strategy.position_size > 0) strategy.close("Long", comment="Exit: Stop Loss")