
이 전략은 평형 처리된 가격 신호를 계산하여, 엘러스 (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]
여기서 α는 평평함수이다.
여기서 α2는 1단 평준화 변수이다.
가격 신호의 2단 평준화를 통해 고주파 노이즈를 효과적으로 필터링하여 거래 신호를 더욱 신뢰할 수 있게 한다.
에르스 순환 지표 이론을 적용하면 시장 추세의 전환점을 더 정확하게 판단할 수 있다.
1단 지수는 순환 지표의 일부 잡음을 부드럽게 필터링하여 더 신뢰할 수있는 거래 신호를 생성합니다.
전체 전략 프로세스는 합리적이고 과학적이며, 매개 변수 최적화 공간이 넓고, 실디 성능이 우수하다.
다른 기술 지표 전략과 마찬가지로, 이 전략은 시장의 체계적 위험에 민감하다. 중대한 블랙 스 사건이 발생하면 큰 손실이 발생할 수 있다.
계산 과정이 복잡하기 때문에, 파라미터를 잘못 설정하면 계산 지연이 발생할 수 있으며, 이로 인해 리스크 효과에 영향을 미칩니다. 파라미터를 설정하는 것이 과학적으로 합리적인지 확인하기 위해 신중한 테스트가 필요합니다.
부드러운 처리는 또한 거래 신호의 지연을 초래할 수 있으며, 시장의 전환점을 적시에 잡지 못하여 기회를 놓치게 될 수 있습니다. 부드러운 매개 변수의 설정을 조정해야합니다.
다양한 종류의 평준화 알고리즘을 테스트할 수 있다. 예를 들어, 1단 지수 평준화, 평균선 평준화 등이 있다. 최적의 평준화 솔루션을 찾아내기 위해서다.
시장 상황에 따라 역동적으로 변수를 조정하는 적응 변수 조정 메커니즘을 도입할 수 있으며, 전략의 융통성을 높일 수 있다.
단편적 손실의 위험을 줄이고 동시에 수익을 잠금하는 Stop Loss 및 Stop Stop 전략을 설계할 수 있습니다.
다른 기계 학습 모델과 결합하여 다른 모델을 사용하여 거래 신호를 필터링하는 모델 조합을 구현할 수 있습니다.
이 전략은 가격 신호 평준화와 엘스 순환 지표 계산을 통해 거래 신호 평준화 된 엘스 순환 거래 전략을 설계했다. 이 전략은 잡음을 효과적으로 필터링하여 더 신뢰할 수있는 거래 신호를 생성할 수 있다. 동시에 변수 공간이 넓고 실디 효과가 좋다. 적응 장치, 손해 방지 전략 등의 최적화를 도입하여 전략의 안정성과 효과를 더욱 향상시킬 수 있다.
/*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)