이 전략은 윤택한 거래 신호로 거래 전략을 설계하기 위해 Ehlers가 제안한 사이버 사이클 이론을 기반으로 윤택한 가격 신호를 계산합니다. 시장 소음을 효과적으로 필터하고 더 신뢰할 수있는 거래 신호를 생성 할 수 있습니다.
원시 가격 신호 src를 두 번째 순서 매끄러운 신호를 얻기 위해 매끄럽게 매끄럽게.
평형 신호를 기반으로 순환 지표 주기를 계산합니다. 계산 방법은 다음과 같습니다. 사이클:= (1 -.5알파) (1 - .5 알파)(슬라드 - 2)매끄러운[1] + 매끄러운[2]) + 2(1 - 알파)사이클[1] - (1 - 알파)(1 - 알파) * 사이클[2]
여기서 α는 평형 매개 변수입니다.
최종 거래 신호 신호를 얻기 위해 순환 지표를 1차 순위 평평화로 기하급수적으로 평평화합니다. 계산 방법은: 신호:= 알파2사이클 + (1 - 알파2)nz (신호[1])
여기서 α2는 1차 평형 매개 변수입니다.
신호가 신호를 넘을 때 길다[1]; 신호가 신호 아래를 넘을 때 짧다[1].
가격 신호의 2차 평형화는 고주파 소음을 효과적으로 필터링하여 거래 신호를 더 신뢰할 수 있습니다.
에일러스의 사이버 사이클 이론을 적용하면 시장 트렌드의 전환점을 더 정확하게 결정할 수 있습니다.
첫 번째 순위의 기하급수 평형은 더 신뢰할 수 있는 거래 신호를 생성하기 위해 순환 지표의 소음을 필터합니다.
전략의 전체 과정은 합리적이고 과학적이며, 큰 매개 변수 최적화 공간과 훌륭한 실제 성능입니다.
다른 기술 지표 전략과 마찬가지로 이 전략도 체계적 시장 위험에 상대적으로 민감합니다. 블랙 스완 이벤트의 경우 큰 손실을 입을 수 있습니다.
복잡한 계산 과정으로 인해 부적절한 매개 변수 설정은 계산 지연을 유발하여 실제 성능에 영향을 줄 수 있습니다. 과학적이고 합리적인 설정을 보장하기 위해 매개 변수를 신중하게 테스트해야합니다.
부드러운 처리는 또한 시장 전환점을 적시에 포착하지 못하는 지체된 거래 신호로 이어지며 기회를 놓칠 수 있습니다. 부드러운 매개 변수 설정은 균형을 유지해야합니다.
다양한 종류의 평형 알고리즘을 테스트 할 수 있습니다. 첫 번째 순위의 기하급수 평형, 이동 평균 평형 등이 최적의 평형 스키마를 찾기 위해 사용됩니다.
적응적인 매개 변수 조정 메커니즘을 도입하여 전략 안정성을 향상시키기 위해 시장 조건에 따라 매개 변수를 동적으로 조정할 수 있습니다.
스톱 로스 및 수익 전략은 단일 손실의 위험을 줄이고 동시에 수익을 차단하도록 설계 될 수 있습니다.
그것은 다른 기계 학습 모델과 결합하여 모델 포트폴리오를 달성하고 다른 모델을 사용하여 거래 신호를 필터 할 수 있습니다.
이 전략은 가격 신호 평형화 및 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") lag = input(9, title = "Lag") smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6 cycle = na if na(cycle[7]) cycle := (src - 2 * src[1] + src[2]) / 4 else cycle := (1 - .5 * alpha) * (1 - .5 * alpha) * (smooth - 2 * smooth[1] + smooth[2]) + 2 * (1 - alpha) * cycle[1] - (1 - alpha) * (1 - alpha) * cycle[2] alpha2 = 1 / (lag + 1) signal = na signal := alpha2 * cycle + (1 - alpha2) * nz(signal[1]) oppositeTrade = input(true) barsSinceEntry = 0 barsSinceEntry := nz(barsSinceEntry[1]) + 1 if strategy.position_size == 0 barsSinceEntry := 0 if (crossover(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossunder(signal, signal[1])) strategy.entry("Long", strategy.long) barsSinceEntry := 0 if (crossunder(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossover(signal, signal[1])) strategy.entry("Short", strategy.short) barsSinceEntry := 0 if strategy.openprofit < 0 and barsSinceEntry > 8 strategy.close_all() barsSinceEntry := 0 plot(0, title="ZeroLine", color=gray) plotSrc = signal cyclePlot = plot(plotSrc, title = "CyberCycle", color = blue) triggerPlot = plot(plotSrc[1], title = "Trigger", color = green) fill(cyclePlot, triggerPlot, color = plotSrc < plotSrc[1] ? red : lime, transp = 50)