Hull Moving Average 및 Kalman 필터 기반 트렌드 추적 전략

저자:차오장, 날짜: 2023-11-01 17:10:49
태그:

img

전반적인 설명

이 전략은 트렌드 추적 전략에 속하는 가격 트렌드를 식별하고 추적하기 위해 헐 이동 평균과 칼만 필터를 결합합니다. 거래 신호를 생성하기 위해 서로 다른 기간을 가진 두 개의 헐 이동 평균을 사용하고 신호 품질과 전략 안정성을 향상시키는 것을 목표로 신호를 부드럽게하기 위해 칼만 필터를 채택합니다.

전략 논리

  • 이 전략은 거래 신호를 구성하기 위해 24 기간 Hull Moving Average (hma) 와 24 기간 Triple Hull Moving Average (hma3) 를 사용합니다.

  • HMA가 HMA3를 넘으면 구매 신호가 생성됩니다. HMA가 HMA3를 넘으면 판매 신호가 생성됩니다.

  • 칼만 필터는 기본적으로 비활성화되어 있습니다. 활성화되면, 과도한 소음을 필터링하고 신호 품질을 향상시키기 위해 hma와 hma3를 부드럽게합니다.

  • 칼만 필터는 예측 및 수정 단계를 통해 신호에서 무작위 잡음을 제거합니다. 각 측정과 마지막 예측 사이의 차이는 다음 측정을 더 정확하게 예측하기 위해 수정 항목으로 취급됩니다. 예측 및 수정을 반복함으로써 잡음의 영향을 점차적으로 줄여 신호를 매끄럽게 할 수 있습니다.

  • 이 전략은 Kalman 필터를 활용하여 무작위 변동을 필터링하고 지속적인 트렌드를 추적함으로써 이동 평균 전략의 안정성을 향상시킵니다.

장점

  • 이중 이동 평균 시스템은 단일 이동 평균에 비해 지속적인 경향을 더 잘 식별 할 수 있습니다.

  • 헐 이동평균은 가중된 계산을 통해 최근 가격에 더 많은 무게를 부여하여 가격 변화를 더 민감하게 파악합니다.

  • 칼만 필터는 신호에서 무작위 잡음을 효과적으로 필터링하여 잘못된 신호를 줄이고 신호 품질을 향상시킬 수 있습니다.

  • 기간과 칼만 필터 이득과 같은 조정 가능한 매개 변수는 전략이 다른 시장 조건에 적응 할 수있게합니다.

  • 크로스 페리오드 기술을 채택하면 과도한 무작위 변동에 의해 오도되는 것을 피하여 더 지속적인 신호를 생성합니다.

  • 시각 인터페이스는 조작을 쉽게 하기 위해 신호와 트렌드 상태를 직관적으로 표시합니다.

위험성

  • 이중 이동 평균은 트렌드 전환점에 잘못된 신호를 생성하는 경향이 있으며, 역전을 적시에 파악할 수 없습니다.

  • 이동평균이 뒤떨어지는 것은 빠른 가격 전환의 기회를 놓칠 수 있습니다.

  • 급변하는 시장에는 적합하지 않습니다. 격동적인 단계에서 사용을 피해야 합니다.

  • 칼만 필터 매개 변수는 전략 성능에 영향을 줄 수 있습니다. 너무 큰 이득은 유효한 신호를 필터링할 수 있습니다.

  • 더 긴 기간은 반응이 느리고 짧은 기간은 소음에 취약합니다. 시장 조건에 따라 매개 변수 조정이 필요합니다.

  • 고정되지 않은 장기/단기 보유 기간은 포지션이 없는 비활동 시간으로 이어지며 자본 활용 효율을 감소시킵니다.

강화

  • 변동성을 기반으로 동적으로 매개 변수를 최적화하는 적응 이동 평균을 시도해보세요.

  • 변동성 측정치를 포함하여 불안정한 시장에서 거래를 피하고 명백한 추세에 따라만 거래하십시오.

  • 손실을 제한하고 위험 통제를 개선하기 위해 Stop Loss를 설정합니다.

  • 추적 감수성과 노이즈 필터 레벨을 균형을 맞추기 위해 칼만 필터 매개 변수를 최적화합니다.

  • 부피와 같은 다른 지표와 신호 유효성을 확인하고, 트렌드 지속을 위해 볼링거 밴드.

  • 기계 학습을 활용하여 매개 변수를 훈련하고 전략의 견고성과 적응력을 향상시킵니다.

결론

이 전략은 지속적인 트렌드를 효과적으로 식별하고 듀얼 헐 MAs와 칼만 필터를 통해 신호 품질을 향상시킵니다. 안정적인 수익을 위해 매개 변수 최적화, 시장 적응성 및 위험 통제를 참고하십시오. 기계 학습 및 정량 분석을 통해 추가 개선이 가능합니다. 지속적인 개선은 견고하고 효율적인 트렌드 추적 시스템을 형성 할 것입니다.


/*backtest
start: 2022-10-25 00:00:00
end: 2023-10-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Hull Trend with Kahlman Strategy Backtest", shorttitle="HMA-Kahlman Trend Strat", overlay=true)

src       = input(hl2,   "Price Data")
length    = input(24,    "Lookback")
showcross = input(true,  "Show cross over/under")
gain      = input(10000, "Gain")
k         = input(true,  "Use Kahlman")

hma(_src, _length) =>
    wma((2 * wma(_src, _length / 2)) - wma(_src, _length), round(sqrt(_length)))
    
hma3(_src, _length) =>
    p = length/2
    wma(wma(close,p/3)*3 - wma(close,p/2) - wma(close,p),p)

kahlman(x, g) =>
    kf = 0.0
    dk = x - nz(kf[1], x)
    smooth = nz(kf[1],x)+dk*sqrt((g/10000)*2)
    velo = 0.0
    velo := nz(velo[1],0) + ((g/10000)*dk)
    kf := smooth+velo
  
a = k ? kahlman(hma(src, length), gain) : hma(src, length)
b = k ? kahlman(hma3(src, length), gain) : hma3(src, length)
c = b > a ? color.lime : color.red
crossdn = a > b and a[1] < b[1]
crossup = b > a and b[1] < a[1]

p1 = plot(a,color=c,linewidth=1,transp=75)
p2 = plot(b,color=c,linewidth=1,transp=75)
fill(p1,p2,color=c,transp=55)
plotshape(showcross and crossdn ? a : na, location=location.absolute, style=shape.labeldown, color=color.red, size=size.tiny, text="S", textcolor=color.white, transp=0, offset=-1)
plotshape(showcross and crossup ? a : na, location=location.absolute, style=shape.labelup, color=color.green, size=size.tiny, text="B", textcolor=color.white, transp=0, offset=-1)

longCondition = crossup
if (longCondition)
    strategy.entry("LE", strategy.long)

shortCondition = crossdn
if (shortCondition)
    strategy.entry("SE", strategy.short)
    


더 많은