신호 평활화 기반 엘러스 사이클 전략
개요
본 전략은 평활화된 가격 신호를 계산하고 Ehlers가 제안한 사이클 지표 이론을 결합하여 거래 신호가 평활화된 Ehlers 사이클 트레이딩 전략을 설계합니다. 이 전략은 시장 노이즈를 효과적으로 필터링하고 더 신뢰할 수 있는 거래 신호를 생성할 수 있습니다.
전략 원리
-
원래 가격 신호 src에 대해 2차 평활화를 수행하여 평활 신호 smooth를 얻습니다.
-
평활 신호를 기반으로 사이클 지표 cycle을 계산합니다. 계산 방식은 다음과 같습니다.
cycle := (1 - .5 alpha) (1 - .5 alpha) (smooth - 2 smooth\[1\] + smooth\[2\]) + 2 (1 - alpha) cycle\[1\] - (1 - alpha) (1 - alpha) * cycle\[2\]여기서 α는 평활화 매개변수입니다.
-
사이클 지표에 대해 1차 지수 평활화를 수행하여 최종 거래 신호 signal을 얻습니다. 계산 방식은 다음과 같습니다.
signal := alpha2 cycle + (1 - alpha2) nz(signal\[1\])여기서 α2는 1차 평활화 매개변수입니다.
-
signal이 signal[1]을 상향 돌파하면 매수, 하향 돌파하면 매도합니다.
전략 장점 분석
-
가격 신호의 2차 평활화를 통해 고주파 노이즈를 효과적으로 필터링하여 거래 신호의 신뢰성을 높입니다.
-
Ehlers 사이클 지표 이론을 적용하여 시장 추세 전환점을 보다 정확하게 판단할 수 있습니다.
-
1차 지수 평활화를 통해 사이클 지표의 일부 노이즈를 걸러내 더 신뢰할 수 있는 거래 신호를 생성합니다.
-
전체 전략 프로세스가 합리적이고 과학적이며 매개변수 최적화 여지가 크고 실전 성과가 우수합니다.
위험 분석
-
다른 기술적 지표 전략과 마찬가지로 본 전략도 시장의 시스템적 위험에 민감합니다. 중대한 블랙스완 이벤트 발생 시 큰 손실이 발생할 수 있습니다.
-
계산 과정이 비교적 복잡하여 매개변수 설정이 부적절할 경우 계산 지연이 발생하여 실전에 부정적인 영향을 미칠 수 있습니다. 매개변수 설정이 과학적이고 합리적인지 신중하게 테스트해야 합니다.
-
평활화 처리로 인해 거래 신호가 지연되어 시장 전환점을 적시에 포착하지 못하고 기회를 놓칠 수 있습니다. 평활화 매개변수 설정 시 균형을 고려해야 합니다.
전략 최적화 방향
-
1차 지수 평활화, 이동 평균 평활화 등 다양한 평활화 알고리즘을 테스트하여 최적의 평활화 방식을 찾을 수 있습니다.
-
적응형 매개변수 조정 메커니즘을 도입하여 시장 상황에 따라 동적으로 매개변수를 조정하고 전략의 견고성을 높일 수 있습니다.
-
손절 및 익절 전략을 설계하여 단일 거래 손실 위험을 줄이고 수익을 고정할 수 있습니다.
-
다른 머신러닝 모델과 결합하여 모델 앙상블을 구성하고 다른 모델을 통해 거래 신호를 필터링할 수 있습니다.
요약
본 전략은 가격 신호 평활화와 Ehlers 사이클 지표 계산을 통해 거래 신호가 평활화된 Ehlers 사이클 트레이딩 전략을 설계했습니다. 이 전략은 노이즈를 효과적으로 필터링하고 더 신뢰할 수 있는 거래 신호를 생성할 수 있습니다. 또한 매개변수 공간이 넓고 실전 성능이 우수합니다. 적응형 메커니즘, 손절 전략 등의 최적화를 도입하면 전략의 안정성과 효과를 더욱 강화할 수 있습니다.
/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy("Ehlers Cyber Cycle Strategy",overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1)
src = input(hl2, title = "Source")
alpha = input(.07, title = "Alpha")- 1

