8기간 및 21기간 이동평균 전략


생성 날짜: 2024-01-17 17:45:45 마지막으로 수정됨: 2024-01-17 17:45:45
복사: 2 클릭수: 568
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

8기간 및 21기간 이동평균 전략

개요

이 전략은 듀얼 이동 평균, 8주기 및 21주기 이동 평균을 사용한다. 단기 이동 평균 위에 장기 이동 평균을 착용 할 때, 더 많은 일을; 단기 이동 평균 아래에 장기 이동 평균을 착용 할 때, 공백을 다.

이 전략은 또한 트렌드 없는 범위를 필터링하기 위해 이동 평균의 기울기 지표를 도입하여 트렌드가 뚜렷한 경우에만 거래 신호를 냅니다.

전략 원칙

이 전략의 핵심은 단기 이동 평균과 장기 이동 평균의 교차에 있다. 단기 이동 평균은 가격 변화의 트렌드를 더 빨리 포착할 수 있고, 장기 이동 평균은 노이즈에 대해 더 나은 필터링 효과를 가지고 있다. 단기 라인을 가로질러 다단계 트렌드를 표시할 때, 더 많은 이익을 얻는다. 단기 라인을 가로질러 긴 라인을 가로질러 공허 트렌드를 표시할 때, 공허 이익을 얻는다.

이 전략은 또한 기울기 경계를 설정한다. 기울기가 긍정적 인 경계를 초과할 때만 다중 신호가 발생하며, 기울기가 부정적인 경계를 초과할 때만 공백 신호가 발생한다. 이것은 명백한 추세가없는 간격을 필터링하여 거래 신호의 품질을 높일 수 있습니다.

특히, 이 전략의 거래 신호 생성 논리는 다음과 같습니다.

  1. 8주기 및 21주기 간단한 이동 평균을 계산합니다.
  2. 이 둘의 교차 신호를 탐지
  3. 21주기 이동 평균의 기울기를 계산합니다. 기울기는 역분열 함수 atan을 통해 계산됩니다.
  4. 다중 신호는 기울기가 설정된 정한 임값을 초과할 때만 생성됩니다.
  5. 좌표의 기울기가 설정된 마이너스 임계값보다 낮으면 공백 신호가 발생한다.

우위 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 전략은 간단하고 이해하기 쉽고 실행이 가능합니다.
  2. 기울기 지표를 도입하여 명백한 추세가 없는 구간을 필터링하여 신호 품질을 향상시킵니다.
  3. 이중 이동 평균을 사용하면 각자의 장점을 발휘하여 안정성을 높일 수 있습니다.
  4. 시장에 따라 변수를 조정할 수 있으며, 다른 거래 품종에 적응할 수 있습니다.
  5. 프로그램 간결성, 재개발 및 최적화 용이성

위험과 해결책

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

  1. 시장의 격렬한 변동이 있는 기간에는 잘못된 신호가 더 많이 나타날 수 있습니다.
  2. 이중선 교차는 그 자체로 더 많은 잘못된 신호를 생성할 수 있습니다.
  3. 하지만, 이 경우에도 트렌드 전환을 즉각적으로 파악할 수 없는 지연 현상이 나타났습니다.

이러한 위험에는 다음과 같은 측면에서 최적화할 수 있습니다.

  1. 이동 평균의 매개 변수를 시장 특성에 맞게 조정합니다.
  2. 기울기 절댓값을 최적화하고 매개 변수의 거친성을 향상시킵니다.
  3. 단편적 손실을 통제하기 위한 손해 방지 제도를 강화하는 것
  4. 다른 지표와 함께 필터링을 통해 신호 품질을 향상시킵니다.
  5. 더 거친 전략을 위해 적응형 변수 설정을 사용합니다.

최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 적응형 이동 평균을 사용하여 시장의 변동에 따라 변수를 조정합니다.
  2. 거래량 연계 분석을 늘리고, 회수시 잘못된 신호를 방지한다.
  3. 변동률 지표와 결합하여 신호의 품질과 시간 효율을 향상시킵니다.
  4. 기계 학습 알고리즘을 추가하여 매개 변수를 자동으로 최적화합니다.
  5. 더 복잡한 비선형 가격 모형을 탐색하기 위해 딥러닝 기술을 활용합니다.

요약하다

이 쌍 이동 평균 전략은 전반적으로 간단하고 실용적이며, diffs의 두 주기의 변수를 통해 서로 다른 추세 특성을 포착하고, 결합하여 거래 신호를 생성한다. 동시에, 기울기 기하값을 도입하면 신호 품질이 향상된다. 이 전략은 기본 전략으로 확장할 수 있으며, 최적화 공간과 확장 능력도 많다.

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