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