이중 이동 평균 전략

저자:차오장, 날짜: 2024-01-17 17:45:45
태그:

img

전반적인 설명

이 전략은 이중 이동 평균, 특히 8 기간 및 21 기간을 사용합니다. 짧은 MA가 더 긴 MA를 넘을 때 긴 신호를 생성하고 짧은 MA가 더 긴 MA를 넘을 때 짧은 신호를 생성합니다.

이 전략은 또한 유동 평균 라인의 기울기를 통합하여 트렌드가 아닌 기간을 필터링하고 트렌드가 더 명백할 때 신호를 생성합니다.

원칙

이 전략의 핵심은 단기 및 장기 이동 평균의 교차에 있다. 더 짧은 MA는 트렌드 변화를 더 빨리 포착할 수 있으며, 더 긴 MA는 더 나은 노이즈 필터링 효과를 가지고 있다. 더 짧은 MA가 더 긴 MA를 넘어서면 긴 신호로 이어질 때 상승 추세가 제안된다. 더 짧은 MA가 더 긴 MA를 넘어서면 짧은 신호로 이어질 때 하락 추세가 제안된다.

이 전략은 또한 기울기 문턱을 설정합니다. 기울기가 긍정적 인 문턱 값보다 크면만 긴 신호가 생성됩니다. 기울기가 부정적인 문턱 값보다 작을 때만 짧은 신호가 생성됩니다. 이것은 두드러진 추세가 존재하지 않는 구역을 필터링하는 데 도움이되며 더 높은 품질의 거래 신호가 발생합니다.

특히, 거래 신호를 생성하는 논리는 다음과 같습니다.

  1. 8주기 및 21주기 간단한 이동평균을 계산합니다.
  2. 이 둘 사이의 교차 신호를 감지
  3. 아탄 함수를 사용하여 21기준 이동 평균 선의 기울기를 계산합니다.
  4. 기울기가 미리 설정된 긍정적 임계값을 초과할 때만 긴 신호를 생성합니다.
  5. 기울기가 미리 설정된 마이너스 문턱 이하로 떨어지면 단축 신호를 생성합니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 전략 아이디어는 간단하고 이해하기/시행하기 쉽다
  2. 기울기 인덱스를 포함하면 트렌드가 아닌 기간을 필터링하고 신호 품질을 향상시킵니다.
  3. 이중 이동 평균을 사용하는 것은 두 가지 모두 강점을 발휘하여 견고성을 향상시킵니다.
  4. 매개 변수는 다른 거래 도구에 맞게 조정할 수 있습니다.
  5. 간단한 프로그램 구현은 추가 최적화를 촉진

위험 분석

이 전략에는 몇 가지 위험이 있습니다.

  1. 강력한 시장 변동 시 더 많은 잘못된 신호가 발생할 수 있습니다.
  2. 크로스오버 자체는 일부 잘못된 신호를 생산하는 경향이 있습니다.
  3. 어느 정도의 지연이 있고, 트렌드 반전을 즉시 파악할 수 없습니다.

이러한 위험을 기반으로 최적화 할 수있는 몇 가지 방법:

  1. 시장 특성에 맞게 MA 매개 변수를 조정
  2. 강도를 높이기 위해 기울기 문턱을 최적화
  3. 단일 손실을 제어하기 위해 스톱 손실 메커니즘을 추가
  4. 신호를 필터링하기 위해 다른 지표를 포함
  5. 견고성을 향상시키기 위해 적응 파라미터 설정을 사용

최적화 방향

전략 최적화를 위한 몇 가지 방향:

  1. 변동성에 기초한 매개 변수를 조정하는 적응형 MA를 사용
  2. 통합 과정에서 오류를 피하기 위해 부피 분석을 포함
  3. 품질과 시기를 높이기 위해 변동성 지수를 추가합니다.
  4. 자동 매개 변수 최적화를 위해 기계 학습을 추가
  5. 더 복잡한 비선형 패턴을 발견하기 위해 딥 러닝을 활용합니다.

결론

요약하자면, 이 이중 MA 전략은 간단하고 실용적입니다. 두 기간 매개 변수를 통해 다른 트렌드 특성을 캡처하고 거래 신호를 생성하기 위해 결합함으로써. 한편, 기울기 문턱을 통합하면 신호 품질이 향상됩니다. 이 전략은 광범위한 최적화 공간과 잠재력으로 확장을위한 기본으로 사용될 수 있습니다.


/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//written by sixpathssenin
//@version=4
strategy(title="Dual Moving Average",initial_capital=10000,overlay=true)

ma1= sma(close,8)
ma2= sma(close,21)

angleCriteria = input(title="Angle", type=input.integer, defval=7, minval=1, maxval=13)

i_lookback   = input(2,     "Angle Period", input.integer, minval = 1)
i_atrPeriod  = input(10,    "ATR Period",   input.integer, minval = 1)
i_angleLevel = input(6,     "Angle Level",  input.integer, minval = 1)
i_maSource   = input(close, "MA Source",    input.source)

f_angle(_src, _lookback, _atrPeriod) =>
    rad2degree = 180 / 3.141592653589793238462643  //pi 
    ang = rad2degree * atan((_src[0] - _src[_lookback]) / atr(_atrPeriod)/_lookback)
    ang
_angle = f_angle(ma2, i_lookback, i_atrPeriod)

plot(ma1,color=#FF0000)
plot(ma2,color=#00FF00)

crosso=crossover(ma1,ma2) 
crossu=crossunder(ma1,ma2)

_lookback = 15

f_somethingHappened(_cond, _lookback) =>
    bool _crossed = false
    for i = 1 to _lookback
        if _cond[i]
            _crossed := true
    _crossed
    
longcrossed = f_somethingHappened(crosso,_lookback)
shortcrossed = f_somethingHappened(crossu,_lookback)

long = longcrossed and _angle > angleCriteria
short= shortcrossed and _angle < -(angleCriteria)


if(long)
    strategy.entry("Long",strategy.long)
if(short)
    strategy.entry("short",strategy.short)
    


더 많은