
이 전략은 두 개의 이동 평균의 교차를 사용하여 시장 추세의 변화를 판단하고 추세에 따라 거래합니다. 단기 평균선 위에 장기 평균선을 통과할 때 더 많이하고, 단기 평균선 아래에 장기 평균선을 통과할 때 공백을 만들고, 추세 방향에 따라 거래합니다.
이 전략의 핵심은 두 개의 이동 평균입니다: 빠른 평균 (기본 주기는 32입니다) 및 느린 평균 (기본 주기는 32입니다. 파라미터를 통해 조정할 수 있습니다). 종결 가격 상위/하위에서 두 개의 평균을 통과하면 트렌드가 역전되는 것을 나타냅니다.
이러한 평행선 교차 방식으로, 전략은 추세를 따라 올라가는 추세에서 더 많은 주문을, 하향 추세에서 빈 주문을 보유 할 수 있습니다. 추세가 반전 신호가 나타나기 전까지.
위와 같은 위험에 대해 ATR 또는 평균 실제 파장 필터와 같은 적절한 필터를 추가하여 불안정한 시장에서 과도한 거래를 줄이는 것을 고려할 수 있습니다. 합리적인 스톱로드를 설정하여 단편 손실을 제어하고 시장에 적응하기 위해 지속적으로 최적화 된 매개 변수를 설정합니다. 그러나 전략 자체의 한계를 완전히 회피하는 것은 어렵습니다.
위와 같은 최적화는 복잡한 시장에 대응하는 전략의 능력을 향상시킬 수 있지만, 과도한 최적화는 곡선 적합으로 이어져 향후 성능이 좋지 않을 수 있습니다.
쌍평선 트렌드 추적 전략은 평선 교차로 트렌드를 포착하여 간단하고 사용하기 쉽고 적용이 넓다는 특징이 있다. 그러나 그것은 변동 시장에서 성능이 좋지 않으며, 극단적인 상황에 대한 대응이 부족하며, 변수 최적화가 더 어렵다. 더 많은 필터링 지표, 동적 정지 손실, 위치 관리, 다중 주기 결합, 변수 자체 적응과 같은 방법을 도입하여 전략에 최적화를 할 수 있다. 그러나 평선 전략 자체의 한계는 완전히 규율하고, 실재에서 여전히 신중해야하며, 시장 특성에 따라 유연하게 조정한다.
/*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')