이 전략은 시장 트렌드의 변화를 결정하기 위해 두 개의 이동 평균의 교차를 사용하여 트렌드 방향에 따라 구매/판매 결정을 내립니다. 단기 MA가 장기 MA보다 높을 때 길게 이동하고 단기 MA가 장기 MA보다 낮을 때 짧게 이동하여 트렌드를 따라가기를 목표로합니다.
이 전략의 핵심은 두 개의 이동 평균입니다: 빠른 MA (부 default 기간 32) 및 느린 MA (또한 부 default 기간 32), 매개 변수를 통해 조정됩니다. 닫기 가격이 이 두 MA에 의해 형성 된 채널 위에 / 아래에 넘을 때, 트렌드 반전을 나타냅니다. 그리고 전략은 그에 따라 구매 / 판매 신호를 생성합니다.
이 MA 크로스오버 방법을 통해 전략은 트렌드를 따라가며 상승 트렌드에서 긴 포지션과 하락 트렌드에서 짧은 포지션을 유지하여 반전 신호가 나타나기 전까지 할 수 있습니다.
이러한 위험을 해결하기 위해 ATR 또는 평균 진정한 범위 필터와 같은 적절한 필터를 추가하여 범위 시장에서 과잉 거래를 줄일 수 있으며 단일 거래 손실을 제어하기 위해 합리적인 스톱 손실을 설정하고 시장에 적응하기 위해 매개 변수를 지속적으로 최적화 할 수 있습니다. 그러나 전략의 고유 한계는 완전히 피하기가 어렵습니다.
위의 최적화는 복잡한 시장을 처리 할 수있는 전략의 능력을 향상시킬 수 있지만 곡선 적합성과 미래 성과가 좋지 않을 수있는 과도한 최적화를 피하기 위해 주의해야합니다.
이중 MA 트렌드 다음 전략은 MA 크로스오버를 통해 트렌드를 포착합니다. 간단하고 사용하기 쉽고 널리 적용됩니다. 그러나 시장 범위에서 성능이 좋지 않으며 극단적인 움직임에 적절히 반응하지 않으며 매개 변수 최적화에 어려움을 겪고 있습니다.
전략은 더 많은 필터링 지표, 동적 스톱 로스, 포지션 사이징, 멀티 타임프레임 분석 및 적응 매개 변수를 도입하여 최적화 할 수 있습니다. 그러나 MA 전략의 고유 한 한계는 완전히 피하기 어렵고 시장 특성에 따라 유연한 조정을 통해 실시간 거래에서 여전히 주의가 필요합니다.
전체적으로, 이 전략은 기본 트렌드를 따르는 전략으로 사용될 수 있지만, 단독으로 서 있는 것은 어렵고 전략 포트폴리오의 일부로 더 적합합니다.
/*backtest start: 2023-03-16 00:00:00 end: 2024-03-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //study(title="Demo - SSL Basic", shorttitle="Demo - SSL Basic", overlay=true) strategy(title='Demo - SSL Basic', shorttitle='Demo - SSL Basic', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.15) // Backtest Date Range start_date_long = input(title='Backtest Long Start Date', defval=timestamp('01 Jan 2018 00:00 +0530')) end_date_long = input(title='Backtest Long End Date', defval=timestamp('25 Jan 2030 00:00 +0530')) backtest_range = true // Inputs maType = input.string(title='SSL MA Type', options=['SMA', 'EMA', 'WMA'], defval='SMA') sslLen = input(title='SSL Length', defval=32) showCross = input(title='Show Crossover?', defval=true) showEntry = input(title='Show Entry?', defval=true) showTrend = input(title='Show Trend Colors?', defval=true) // Calc MA for SSL Channel calc_ma(close, len, type) => float result = 0 if type == 'SMA' // Simple result := ta.sma(close, len) result if type == 'EMA' // Exponential result := ta.ema(close, len) result if type == 'WMA' // Weighted result := ta.wma(close, len) result result // Add SSL Channel maHigh = calc_ma(high, sslLen, maType) maLow = calc_ma(low, sslLen, maType) Hlv = int(na) Hlv := close > maHigh ? 1 : close < maLow ? -1 : Hlv[1] sslDown = Hlv < 0 ? maHigh : maLow sslUp = Hlv < 0 ? maLow : maHigh ss1 = plot(sslDown, title='Down SSL', linewidth=2, color=showTrend ? na : color.red) ss2 = plot(sslUp, title='Up SSL', linewidth=2, color=showTrend ? na : color.lime) // Conditions longCondition = ta.crossover(sslUp, sslDown) shortCondition = ta.crossover(sslDown, sslUp) // Strategy if shortCondition strategy.close('Long', comment='Long Exit', alert_message='JSON') if longCondition strategy.close('Short', comment='Short Exit', alert_message='JSON') if backtest_range and longCondition strategy.entry('Long', strategy.long, comment='Long Entry', alert_message='JSON') if backtest_range and shortCondition strategy.entry('Short', strategy.short, comment= 'Short Entry', alert_message='JSON') // Plots fill(ss1, ss2, color=showTrend ? sslDown < sslUp ? color.new(color.lime, transp=75) : color.new(color.red, transp=75) : na, title='Trend Colors')