이 전략의 핵심은 가격 이동평균을 부드럽게 하기 위해 칼만 필터 기술을 사용하며, 일정 기간 내에 부드러운 이동평균의 촉각이 특정 임계치를 초과할 때 거래 신호를 생성하는 것이다. 이 전략은 더 명확하고 신뢰할 수 있는 트렌드 신호를 얻기 위해 잡음의 영향을 줄이기 위해 칼만 필터 기술을 사용하여 중장기 트렌드를 추적하는 것을 목표로 한다.
이 전략의 핵심 논리는 주로 다음 단계를 포함합니다.
1분 가격의 단순한 이동 평균 (SMA) 을 원래 이동 평균으로 계산합니다.
Kalman 필터는 원래의 이동 평균을 필터링하여 부드러운 이동 평균을 출력합니다.
평평한 이동평균의 촉각을 계산합니다.
매개 변수 기간을 정의하고 기간 내의 접착각을 통계적으로 합합니다.
기간 내 접각 각의 합이 360도 이상이면 구매 신호를 생성하고 -360도 이하라면 판매 신호를 생성한다.
이 설계로, 가격이 상승 또는 하락 추세를 보이는 경우, 이동 평균의 촉각은 점차 축적됩니다. 어느 정도 축적되면 거래 신호가 생성됩니다. 따라서 중장기 트렌드를 효과적으로 추적 할 수 있습니다.
칼만 필터는 현재 상태를 예측하면서 프로세스 노이즈와 측정 노이즈의 값을 예측하고 이러한 노이즈 값을 사용하여 더 정확하고 신뢰할 수있는 상태 추정치를 얻기 위해 현재 상태의 예측을 수정하는 재귀 알고리즘입니다.
이 전략에서, 가격의 SMA는 상태의 측정으로 볼 수 있다. 시장 소음에 영향을 받으면, 칼만 필터는 재귀적으로 가격의 진정한 경향을 추정하여 소음의 영향을 크게 줄이고, 그 후의 이동 평균 계산을 더 신뢰할 수 있게 하며, 따라서 더 안정적이고 정확한 거래 신호를 생산한다.
간단한 이동 평균 및 다른 기술 지표 전략에 비해 이 전략의 가장 큰 장점은 잡음의 영향을 줄이기 위해 칼만 필터를 사용함으로써 거래 신호가 더 명확하고 신뢰할 수 있다는 것입니다. 구체적인 장점은 주로 다음과 같은 측면에 반영됩니다.
잘못된 신호를 줄이십시오. 칼만 필터링은 적응적으로 잡음을 추정하고 제거함으로써 무작위 변동으로 인한 많은 잘못된 신호를 효과적으로 필터하여 생성된 거래 신호를 더 신뢰할 수 있습니다.
더 나은 추적 효과. 부드러운 이동 평균 모양은 더 부드럽고 중장기 가격 트렌드를 더 잘 반영하여 더 나은 트렌드 추적 효과를 달성합니다.
유연한 조정 가능한 매개 변수: 조정 가능한 매개 변수에는 이동 평균의 길이가 포함되며, 칼만 필터와 통계 주기의 매개 변수, 다양한 시장 환경에 유연하게 적응할 수 있습니다.
통제 가능한 위험: 이 전략은 단기 변동보다는 중장기 추세에 더 집중하여 좋은 위험과 수익 균형을 달성합니다.
이 전략의 핵심 알고리즘은 매우 간결하고 구현 및 테스트하기가 쉽습니다. 또한 매개 변수를 자동으로 최적화하기 위해 기계 학습 알고리즘을 도입하는 것과 같은 확장 공간을 제공합니다.
이 전략의 주요 위험은 또한 다음을 포함합니다.
트렌드 역전 위험. 이 전략은 트렌드 추적에 초점을 맞추고 있습니다. 급격한 트렌드 역전 경우 더 큰 손실로 이어질 것입니다. 이는 거래당 손실을 줄이기 위해 통계 주기를 적절히 단축함으로써 완화 될 수 있습니다.
매개 변수 최적화 위험. 부적절한 매개 변수 설정은 빈번한 거래 또는 신호 지연으로 이어질 수 있습니다. 충분한 테스트와 최적화가 필요합니다. 자동 최적화를 위해 기계 학습 알고리즘과 결합 할 수 있습니다.
과도한 최적화 위험. 역사적 데이터에 대한 과도한 최적화는 또한 비효율적인 매개 변수에 이어질 수 있습니다. 샘플 외부 유효성은 통제되어야합니다.
복잡성 위험이 증가합니다. 칼만 필터와 접각각 알고리즘을 도입하면 코드 복잡성이 증가합니다. 올바른 구현을 보장해야합니다.
위의 위험을 고려할 때 이 전략의 최적화 방향은 다음과 같습니다.
스톱 로스 및 포지션 사이징을 도입하십시오. 적절한 스톱 로스는 단일 거래 손실 위험을 효과적으로 제어 할 수 있습니다. 동적 포지션 사이징은 또한 시장 조건에 따라 포지션을 헤지 리스크로 조정 할 수 있습니다.
자동 매개 변수 최적화. 기계 학습 최적화 알고리즘은 과도한 최적화 위험을 피하기 위해 자동 매개 변수 최적화를 달성 할 수 있습니다.
다른 지표를 통합합니다. 다른 지표는 전략의 안정성을 향상시키기 위해 지표 조합을 형성하기 위해 전략에 통합 될 수 있습니다.
효율성 평가 증가 더 포괄적이고 정확한 결론을 위해 전략의 효율성과 안정성을 평가하기 위해 더 많은 위험 조정 지표를 도입하십시오.
더 많은 제품으로 확장. 효과적 인 경우 더 많은 제품으로 확장하는 것을 고려 할 수 있습니다. 중장기에는 더 풍부한 샘플을 축적하고 크로스 제품 매개 변수 최적화를 촉진합니다.
일반적으로, 이 전략은 비교적 간단하고 실용적인 트렌드 추적 전략이다. 전통적인 이동 평균 전략에 비해 칼만 필터 알고리즘의 도입은 가장 큰 혁신 포인트이며, 이는 또한 전략이 보다 명확하고 신뢰할 수 있는 거래 신호를 생산할 수 있게 한다. 추가 최적화로, 이 전략은 더 나은 결과를 얻을 것으로 예상된다. 전반적으로, 이 전략은 양적 거래 전략에 대한 새로운 아이디어를 제공하며 추가 연구와 응용을 가치가 있다.
/*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="切线角") // 这是我为您添加的代码,用于显示实时计算的切线角