신호 평활화 기반 Els Cycle 전략


생성 날짜: 2024-02-19 10:42:34 마지막으로 수정됨: 2024-02-19 10:42:34
복사: 2 클릭수: 627
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

신호 평활화 기반 Els Cycle 전략

개요

이 전략은 평형 처리된 가격 신호를 계산하여, 엘러스 (Ehlers) 의 순환 지표 이론과 결합하여 거래 신호를 평형화하는 엘러스 순환 거래 전략을 설계한다. 이 전략은 시장 소음을 효과적으로 필터링하여 더 신뢰할 수있는 거래 신호를 생성한다.

전략 원칙

  1. 원시 가격 신호src에 대해 2단계 평소 처리를 하여 평소 신호smooth을 얻는다.

  2. 평형 신호에 따라 회전 지수 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. 순환 지표에 대한 1단 지수 평준화를 하여 최종 거래 신호를 얻는다. 계산 방법은 다음과 같다: signal := alpha2 cycle + (1 - alpha2) nz(signal[1])

여기서 α2는 1단 평준화 변수이다.

  1. 신호가 신호를 통과할 때[1] 때 더 많은 일을; 때 신호 아래에서 통과signal[1] 공백시간.

전략적 강점 분석

  1. 가격 신호의 2단 평준화를 통해 고주파 노이즈를 효과적으로 필터링하여 거래 신호를 더욱 신뢰할 수 있게 한다.

  2. 에르스 순환 지표 이론을 적용하면 시장 추세의 전환점을 더 정확하게 판단할 수 있다.

  3. 1단 지수는 순환 지표의 일부 잡음을 부드럽게 필터링하여 더 신뢰할 수있는 거래 신호를 생성합니다.

  4. 전체 전략 프로세스는 합리적이고 과학적이며, 매개 변수 최적화 공간이 넓고, 실디 성능이 우수하다.

위험 분석

  1. 다른 기술 지표 전략과 마찬가지로, 이 전략은 시장의 체계적 위험에 민감하다. 중대한 블랙 스 사건이 발생하면 큰 손실이 발생할 수 있다.

  2. 계산 과정이 복잡하기 때문에, 파라미터를 잘못 설정하면 계산 지연이 발생할 수 있으며, 이로 인해 리스크 효과에 영향을 미칩니다. 파라미터를 설정하는 것이 과학적으로 합리적인지 확인하기 위해 신중한 테스트가 필요합니다.

  3. 부드러운 처리는 또한 거래 신호의 지연을 초래할 수 있으며, 시장의 전환점을 적시에 잡지 못하여 기회를 놓치게 될 수 있습니다. 부드러운 매개 변수의 설정을 조정해야합니다.

전략 최적화 방향

  1. 다양한 종류의 평준화 알고리즘을 테스트할 수 있다. 예를 들어, 1단 지수 평준화, 평균선 평준화 등이 있다. 최적의 평준화 솔루션을 찾아내기 위해서다.

  2. 시장 상황에 따라 역동적으로 변수를 조정하는 적응 변수 조정 메커니즘을 도입할 수 있으며, 전략의 융통성을 높일 수 있다.

  3. 단편적 손실의 위험을 줄이고 동시에 수익을 잠금하는 Stop Loss 및 Stop Stop 전략을 설계할 수 있습니다.

  4. 다른 기계 학습 모델과 결합하여 다른 모델을 사용하여 거래 신호를 필터링하는 모델 조합을 구현할 수 있습니다.

요약하다

이 전략은 가격 신호 평준화와 엘스 순환 지표 계산을 통해 거래 신호 평준화 된 엘스 순환 거래 전략을 설계했다. 이 전략은 잡음을 효과적으로 필터링하여 더 신뢰할 수있는 거래 신호를 생성할 수 있다. 동시에 변수 공간이 넓고 실디 효과가 좋다. 적응 장치, 손해 방지 전략 등의 최적화를 도입하여 전략의 안정성과 효과를 더욱 향상시킬 수 있다.

전략 소스 코드
/*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)