에일러스 스토카스틱 사이버 사이클 전략은 에일러스
이 전략은 먼저 매끄러운 사이클 지표를 만들고 그 지표에 기반한 스토카스틱 지표 값을 만듭니다. 거래 신호의 생성은이 스토카스틱 지표 값의 이동 평균 라인의 교차로 결정됩니다.
구체적으로 평형 주기 지표는 다음과 같이 계산됩니다.
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
src는 종료 가격과 같은 입력 가격 데이터입니다. 이 지표는 현재 가격과 이전 3 기간의 가격을 결합하여 부드러운 사이클 신호를 구성합니다.
이 부드러운 지표에 기초하여 스토카스틱 사이클 사이클을 계산할 수 있습니다.
cycle := (1 - .5 * alpha) * (1 - .5 * alpha) *
(smooth - 2 * smooth[1] + smooth[2]) +
2 * (1 - alpha) * cycle[1] -
(1 - alpha) * (1 - alpha) * cycle[2]
이 계산 공식은 평형 주기 신호의 두 번째 순위 차이와 이전 두 주기의 값을 포함합니다. α는 새와 오래된 주기의 값을 조정하는 평형 요인입니다.
마지막으로, 이 사이클 지표에 기초하여 0-100 무작위 값 값1이 계산되고, 신호 값 신호는 값의 10일 이동 평균에 기초하여 구성된다. 신호의 이동 평균 선이 상향 또는 하향을 넘을 때 거래 신호가 발행된다.
이 전략은 스토카스틱 지표와 사이클 지표를 결합하여 둘의 장점을 통합합니다. 이동 평균과 같은 간단한 트렌드 전략에 비해이 전략은 순환적 기회를 더 잘 포착하여 더 나은 결과를 얻을 수 있습니다.
주요 장점은 다음과 같습니다.
이 전략의 주요 위험은 다음과 같습니다.
위험은 매개 변수 설정을 최적화하고, 스톱 손실 지점을 설정하고, 다른 필터링 지표를 결합하여 제어 할 수 있습니다.
이 전략은 다음 측면에서도 최적화 될 수 있습니다.
에일러스 스토카스틱 사이버 사이클 전략은 위험을 효과적으로 제어하기 위해 이중 신호 디자인을 통해 스토카스틱 및 사이클 지표의 장점을 통합하고 강력한 순환성을 가진 시장에서 좋은 수익을 얻을 수 있습니다. 추가 최적화로이 전략은 추천 할만한 양적 거래 전략이 될 수 있습니다.
/*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)