칼만 필터 기반 트렌드 추적 전략

저자:차오장, 날짜: 2024-01-25 14:12:26
태그:

img

전반적인 설명

이 전략의 핵심은 가격 이동평균을 부드럽게 하기 위해 칼만 필터 기술을 사용하며, 일정 기간 내에 부드러운 이동평균의 촉각이 특정 임계치를 초과할 때 거래 신호를 생성하는 것이다. 이 전략은 더 명확하고 신뢰할 수 있는 트렌드 신호를 얻기 위해 잡음의 영향을 줄이기 위해 칼만 필터 기술을 사용하여 중장기 트렌드를 추적하는 것을 목표로 한다.

전략 원칙

이 전략의 핵심 논리는 주로 다음 단계를 포함합니다.

  1. 1분 가격의 단순한 이동 평균 (SMA) 을 원래 이동 평균으로 계산합니다.

  2. Kalman 필터는 원래의 이동 평균을 필터링하여 부드러운 이동 평균을 출력합니다.

  3. 평평한 이동평균의 촉각을 계산합니다.

  4. 매개 변수 기간을 정의하고 기간 내의 접착각을 통계적으로 합합니다.

  5. 기간 내 접각 각의 합이 360도 이상이면 구매 신호를 생성하고 -360도 이하라면 판매 신호를 생성한다.

이 설계로, 가격이 상승 또는 하락 추세를 보이는 경우, 이동 평균의 촉각은 점차 축적됩니다. 어느 정도 축적되면 거래 신호가 생성됩니다. 따라서 중장기 트렌드를 효과적으로 추적 할 수 있습니다.

칼만 필터는 현재 상태를 예측하면서 프로세스 노이즈와 측정 노이즈의 값을 예측하고 이러한 노이즈 값을 사용하여 더 정확하고 신뢰할 수있는 상태 추정치를 얻기 위해 현재 상태의 예측을 수정하는 재귀 알고리즘입니다.

이 전략에서, 가격의 SMA는 상태의 측정으로 볼 수 있다. 시장 소음에 영향을 받으면, 칼만 필터는 재귀적으로 가격의 진정한 경향을 추정하여 소음의 영향을 크게 줄이고, 그 후의 이동 평균 계산을 더 신뢰할 수 있게 하며, 따라서 더 안정적이고 정확한 거래 신호를 생산한다.

이점 분석

간단한 이동 평균 및 다른 기술 지표 전략에 비해 이 전략의 가장 큰 장점은 잡음의 영향을 줄이기 위해 칼만 필터를 사용함으로써 거래 신호가 더 명확하고 신뢰할 수 있다는 것입니다. 구체적인 장점은 주로 다음과 같은 측면에 반영됩니다.

  1. 잘못된 신호를 줄이십시오. 칼만 필터링은 적응적으로 잡음을 추정하고 제거함으로써 무작위 변동으로 인한 많은 잘못된 신호를 효과적으로 필터하여 생성된 거래 신호를 더 신뢰할 수 있습니다.

  2. 더 나은 추적 효과. 부드러운 이동 평균 모양은 더 부드럽고 중장기 가격 트렌드를 더 잘 반영하여 더 나은 트렌드 추적 효과를 달성합니다.

  3. 유연한 조정 가능한 매개 변수: 조정 가능한 매개 변수에는 이동 평균의 길이가 포함되며, 칼만 필터와 통계 주기의 매개 변수, 다양한 시장 환경에 유연하게 적응할 수 있습니다.

  4. 통제 가능한 위험: 이 전략은 단기 변동보다는 중장기 추세에 더 집중하여 좋은 위험과 수익 균형을 달성합니다.

  5. 이 전략의 핵심 알고리즘은 매우 간결하고 구현 및 테스트하기가 쉽습니다. 또한 매개 변수를 자동으로 최적화하기 위해 기계 학습 알고리즘을 도입하는 것과 같은 확장 공간을 제공합니다.

위험 분석

이 전략의 주요 위험은 또한 다음을 포함합니다.

  1. 트렌드 역전 위험. 이 전략은 트렌드 추적에 초점을 맞추고 있습니다. 급격한 트렌드 역전 경우 더 큰 손실로 이어질 것입니다. 이는 거래당 손실을 줄이기 위해 통계 주기를 적절히 단축함으로써 완화 될 수 있습니다.

  2. 매개 변수 최적화 위험. 부적절한 매개 변수 설정은 빈번한 거래 또는 신호 지연으로 이어질 수 있습니다. 충분한 테스트와 최적화가 필요합니다. 자동 최적화를 위해 기계 학습 알고리즘과 결합 할 수 있습니다.

  3. 과도한 최적화 위험. 역사적 데이터에 대한 과도한 최적화는 또한 비효율적인 매개 변수에 이어질 수 있습니다. 샘플 외부 유효성은 통제되어야합니다.

  4. 복잡성 위험이 증가합니다. 칼만 필터와 접각각 알고리즘을 도입하면 코드 복잡성이 증가합니다. 올바른 구현을 보장해야합니다.

최적화 방향

위의 위험을 고려할 때 이 전략의 최적화 방향은 다음과 같습니다.

  1. 스톱 로스 및 포지션 사이징을 도입하십시오. 적절한 스톱 로스는 단일 거래 손실 위험을 효과적으로 제어 할 수 있습니다. 동적 포지션 사이징은 또한 시장 조건에 따라 포지션을 헤지 리스크로 조정 할 수 있습니다.

  2. 자동 매개 변수 최적화. 기계 학습 최적화 알고리즘은 과도한 최적화 위험을 피하기 위해 자동 매개 변수 최적화를 달성 할 수 있습니다.

  3. 다른 지표를 통합합니다. 다른 지표는 전략의 안정성을 향상시키기 위해 지표 조합을 형성하기 위해 전략에 통합 될 수 있습니다.

  4. 효율성 평가 증가 더 포괄적이고 정확한 결론을 위해 전략의 효율성과 안정성을 평가하기 위해 더 많은 위험 조정 지표를 도입하십시오.

  5. 더 많은 제품으로 확장. 효과적 인 경우 더 많은 제품으로 확장하는 것을 고려 할 수 있습니다. 중장기에는 더 풍부한 샘플을 축적하고 크로스 제품 매개 변수 최적화를 촉진합니다.

결론

일반적으로, 이 전략은 비교적 간단하고 실용적인 트렌드 추적 전략이다. 전통적인 이동 평균 전략에 비해 칼만 필터 알고리즘의 도입은 가장 큰 혁신 포인트이며, 이는 또한 전략이 보다 명확하고 신뢰할 수 있는 거래 신호를 생산할 수 있게 한다. 추가 최적화로, 이 전략은 더 나은 결과를 얻을 것으로 예상된다. 전반적으로, 이 전략은 양적 거래 전략에 대한 새로운 아이디어를 제공하며 추가 연구와 응용을 가치가 있다.


/*backtest
start: 2024-01-17 00:00:00
end: 2024-01-24 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@library=math
strategy("策略360°(测试)", overlay=true)

// 定义1分钟均线
ma1 = request.security(syminfo.tickerid, "1", ta.sma(close, 1)) // 在这里使用了 math.sma() 函数
//plot(ma1, color=color.yellow, title="原始均线")

// 定义卡尔曼滤波函数,参考了[1](https://www.tradingview.com/pine-script-docs/en/v5/language/Methods.html)和[2](https://www.tradingview.com/pine-script-docs/en/v5/language/Operators.html)的代码
kalman(x, g) => 
    kf = 0.0 
    dk = x - nz(kf[1], x) // 在这里使用了 nz() 函数
    smooth = nz(kf[1], x) + dk * math.sqrt(g * 2) // 在这里使用了 math.sqrt() 函数
    velo = 0.0 
    velo := nz(velo[1], 0) + g * dk // 在这里使用了 nz() 函数
    kf := smooth + velo 
    kf 

// 定义卡尔曼滤波后的均线
ma2 = kalman(ma1, 0.01) 
plot(ma2, color=color.blue, title="卡尔曼滤波后的均线")

// 定义切线角
angle = math.todegrees(math.atan(ma2 - ma2[1])) // 在这里使用了 math.degrees() 和 math.atan() 函数

// 定义累加的切线角
cum_angle = 0.0
cum_angle := nz(cum_angle[1], 0) + angle // 在这里使用了 nz() 函数

// 定义30分钟周期
period = 30 // 您可以根据您的需要修改这个参数

// 定义周期内的切线角总和
sum_angle = 0.0
sum_angle := math.sum(angle, period) // 在这里使用了 math.sum() 函数,把周期内的切线角总和改成简单地把 5 个切线角相加

// 定义买入和卖出条件
buy = sum_angle > 360// 在这里使用了 math.radians() 函数
sell = sum_angle < -360

// 执行买入和卖出操作
strategy.entry("Long", strategy.long, when=buy)
strategy.close("Short", when=buy)
strategy.entry("Short", strategy.short, when=sell)
strategy.close("Long", when=sell)

// 绘制曲线图
plot(sum_angle, color=color.green, title="周期内的切线角总和")
plot(angle, color=color.red, title="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角


더 많은