엘러스 스토캐스틱 사이클 양적 거래 전략


생성 날짜: 2024-01-17 16:03:30 마지막으로 수정됨: 2024-01-17 16:03:30
복사: 0 클릭수: 793
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

엘러스 스토캐스틱 사이클 양적 거래 전략

개요

엘러스의 무작위 주기 전략은 엘러스의 무작위 주기 지표를 사용하여 거래 신호를 생성하는 정량 거래 전략이다. 이 전략은 시장에서 주기적 기회를 잡기 위해 무작위 지표와 주기 지표의 장점을 결합한다.

전략 원칙

이 전략은 우선 smoothed 주기적 지표를 구성하고, 그 지표에 기초하여 무작위 지표 값을 구성한다. 거래 신호의 발생은 이 무작위 지표 값의 이동 평균의 교차에 따라 결정된다.

구체적으로, smoothed 주기 지표의 계산 방법은 다음과 같습니다:

smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6

여기서 src는 종전 가격과 같은 입력된 가격 데이터이다. 이 지표는 현재 가격과 이전 3 시간대의 가격을 결합하여 부드러운 주기적 신호를 구성한다.

이 smoothed 지수를 기반으로, 무작위 지수 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차분수와 이전 두 주기의 값이 포함되어 있다…α는 평준화 인자이며, 새롭고 오래된 주기적 값의 무게를 조정한다.

마지막으로, 이 사이클 지표에 따라 0-100의 임의값 value1을 계산하고 value1의 10일 이동 평균에 따라 신호값 signal을 구성한다. 신호의 이동 평균을 넘거나 넘으면 거래 신호를 발송한다.

전략적 이점

이 전략은 무작위 지표와 주기 지표를 결합하여 둘의 장점을 통합한다. 간단한 이동 평균과 같은 트렌드 전략에 비해 이 전략은 주기적 기회를 더 잘 포착하여 더 나은 효과를 얻을 수 있다.

주요 장점은:

  1. 주기적 지표는 순환 패턴을 식별하고, 무작위 지표는 xFB 거래 시기를 제공합니다.
  2. 이중 지표 디자인으로, 가짜 신호를 효과적으로 필터링할 수 있다.
  3. 사용자 정의 가능한 매개 변수, 다른 시장 환경에 적응

전략적 위험

이 전략에는 다음과 같은 위험들이 있습니다.

  1. 잘못된 매개 변수 설정은 거래 빈도를 높이고 거래 수수료와 슬라이드 포인트 비용을 증가시킬 수 있습니다.
  2. 시장의 급격한 가격 변동에 대처하지 못하여 큰 손실을 초래할 수 있습니다.
  3. 주기 지표는 곡선 적합성에 의존성이 강하며, 부적절한 적합성은 잘못된 신호를 생성할 수 있다.

최적화 매개 변수 설정, 정지점 설정, 다른 필터링 지표와 결합한 방법 등으로 위험을 제어할 수 있다.

전략 최적화 방향

이 전략은 다음과 같은 방향으로 최적화될 수 있습니다.

  1. 다른 기술 지표와 결합하여 신호를 필터링합니다. 예를 들어, 브린 밴드, RSI 등과 같은 잘못된 신호를 줄여줍니다.
  2. 시장의 변동에 따라 동적으로 스톱포드를 조정하는 적응적 탈퇴 메커니즘에 가입하십시오.
  3. 기계학습을 사용하여 매개 변수를 자동으로 최적화하여 시장에 동적으로 적응할 수 있도록 합니다.
  4. 자본 사용률을 최적화하고, 리베이트, 이득 등으로 자본 사용 효율을 높여라

요약하다

엘러스의 무작위 주기 전략은 무작위 지표와 주기 지표의 통합 사용의 장점을 가지고 있으며, 이중 신호 디자인을 통해 위험을 효과적으로 제어하여 주기적으로 강한 시장에서 더 나은 수익을 얻을 수 있다. 이 전략을 추가로 최적화하면 추천할 만한 양적 거래 전략이 될 수 있다.

전략 소스 코드
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Ehlers Stochastic 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
len = input(8, title = "Stochastic len")
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]

value1 = stoch(cycle, cycle, cycle, len) / 100
value2 = 2 * ((4 * value1 + 3 * value1[1] + 2 * value1[2] + value1[3]) / 10 - 0.5)

signal = value2
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)