이중 이동 평균 추세 추종 전략


생성 날짜: 2024-03-22 13:56:44 마지막으로 수정됨: 2024-03-22 13:56:44
복사: 1 클릭수: 501
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이중 이동 평균 추세 추종 전략

개요

이 전략은 두 개의 이동 평균의 교차를 사용하여 시장 추세의 변화를 판단하고 추세에 따라 거래합니다. 단기 평균선 위에 장기 평균선을 통과할 때 더 많이하고, 단기 평균선 아래에 장기 평균선을 통과할 때 공백을 만들고, 추세 방향에 따라 거래합니다.

전략 원칙

이 전략의 핵심은 두 개의 이동 평균입니다: 빠른 평균 (기본 주기는 32입니다) 및 느린 평균 (기본 주기는 32입니다. 파라미터를 통해 조정할 수 있습니다). 종결 가격 상위/하위에서 두 개의 평균을 통과하면 트렌드가 역전되는 것을 나타냅니다.

  • 빠른 평행선에서 느린 평행선을 통과할 때, 더 많이 하세요.
  • 빠른 평균선 아래의 느린 평균선을 통과하면 공백을 다.
  • 다중을 가지고 있을 때, 빠른 평균선 아래로 느린 평균선을 통과하고, 평다중과 공백을 만든다
  • 공표가 있을 때, 빠른 평균선에서 느린 평균선을 통과하고, 공허하고, 더 많은 것을 한다.

이러한 평행선 교차 방식으로, 전략은 추세를 따라 올라가는 추세에서 더 많은 주문을, 하향 추세에서 빈 주문을 보유 할 수 있습니다. 추세가 반전 신호가 나타나기 전까지.

장점 분석 Advantage Analysis

  1. 동향 추적: 이 전략은 동향을 평평선 교차로 판단하여 시장의 주요 동향을 효과적으로 포착하고 따라할 수 있다.
  2. 간단하고 사용하기 쉬운: 전략 논리는 명확하고, 두 개의 평행선만 사용되며, 파라미터 설정은 간단하고, 이해하기 쉽고, 숙지하기 쉽다.
  3. 광범위하게 적용: 전략은 품종과 주기적으로 광범위하게 적용되며, 여러 시장에서 사용할 수 있다.
  4. 적시 중단: 트렌드가 역전될 때, 전략은 적시 청산하여 손실을 통제할 수 있다.

위험 분석 Risk Analysis

  1. 흔들리는 시장에서 더 나쁜 성과: 시장이 흔들리는 상황에서 자주 교차하는 신호는 전략이 자주 거래되어 더 많은 손실을 초래합니다.
  2. 갑작스러운 상황에 대한 반응이 부족하다: 급격한 상황 (예: 급격한 상승 또는 폭락) 에 대응하기 위해 전략이 부족하여 큰 손실이 발생할 수 있다.
  3. 매개 변수 최적화 난이도: 평균선 매개 변수의 최적화에는 많은 역사적 데이터와 재검토가 필요하며, 매개 변수가 미래의 효과에 대한 지침성은 제한적이다.

위와 같은 위험에 대해 ATR 또는 평균 실제 파장 필터와 같은 적절한 필터를 추가하여 불안정한 시장에서 과도한 거래를 줄이는 것을 고려할 수 있습니다. 합리적인 스톱로드를 설정하여 단편 손실을 제어하고 시장에 적응하기 위해 지속적으로 최적화 된 매개 변수를 설정합니다. 그러나 전략 자체의 한계를 완전히 회피하는 것은 어렵습니다.

최적화 방향 Optimization Direction

  1. 트렌드 확인: 거래 신호가 생성된 후, MACD, DMI 등과 같은 트렌드 확인 지표가 추가되어 신호를 필터링 할 수 있습니다.
  2. 다이내믹 스톱: ATR과 같은 지표에 따라 다이내믹 스톱 지점을 설정하여 고정된 비율이나 가격 스톱 대신 위험을 더 잘 제어 할 수 있습니다.
  3. 포지션 관리: 트렌드 강도, 변동률 등의 지표에 따라 포지션 크기를 동적으로 조정하고, 트렌드가 강할 때 포지션을 늘리고, 트렌드가 약할 때 포지션을 줄인다.
  4. 다주기 다단계: 일선+4시간선과 같은 여러 단계의 평균선 시스템을 고려하여 서로 필터링하고 확인하여 트렌드 파악의 정확성을 높인다.
  5. 매개 변수 적응: 유전 알고리즘과 같은 매개 변수 적응 최적화 방법을 도입하여 전략 매개 변수가 다른 시장 상태에 적응할 수 있도록 한다.

위와 같은 최적화는 복잡한 시장에 대응하는 전략의 능력을 향상시킬 수 있지만, 과도한 최적화는 곡선 적합으로 이어져 향후 성능이 좋지 않을 수 있습니다.

요약

쌍평선 트렌드 추적 전략은 평선 교차로 트렌드를 포착하여 간단하고 사용하기 쉽고 적용이 넓다는 특징이 있다. 그러나 그것은 변동 시장에서 성능이 좋지 않으며, 극단적인 상황에 대한 대응이 부족하며, 변수 최적화가 더 어렵다. 더 많은 필터링 지표, 동적 정지 손실, 위치 관리, 다중 주기 결합, 변수 자체 적응과 같은 방법을 도입하여 전략에 최적화를 할 수 있다. 그러나 평선 전략 자체의 한계는 완전히 규율하고, 실재에서 여전히 신중해야하며, 시장 특성에 따라 유연하게 조정한다.

전략 소스 코드
/*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')