Стратегия стохастического киберцикла Ehlers - это количественная стратегия торговли, которая генерирует торговые сигналы с использованием индикатора стохастического цикла Ehlers. Эта стратегия сочетает в себе преимущества стохастических и циклических индикаторов, направленные на захват циклических возможностей на рынке.
Эта стратегия сначала строит сглаженный индикатор цикла, а затем строит значение стохастического индикатора на основе этого индикатора.
В частности, показатель сглаженного цикла рассчитывается как:
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
где src - это данные о входных ценах, например, о цене закрытия.
На основе этого сглаженного показателя можно затем рассчитать стохастический цикл цикла:
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. Сигнал значения сигнала построен на основе 10-дневной скользящей средней стоимости1.
По сравнению с простыми стратегиями тренда, такими как скользящие средние, эта стратегия может лучше улавливать циклические возможности и, таким образом, достигать лучших результатов.
Основными преимуществами являются:
Основными рисками этой стратегии являются:
Риски можно контролировать путем оптимизации параметров, установки точек остановки потерь, сочетания других показателей фильтрации и т.д.
Эта стратегия также может быть оптимизирована в следующих аспектах:
Стратегия стохастического киберцикла Ehlers интегрирует преимущества стохастических и циклических индикаторов с помощью двойного дизайна сигналов для эффективного контроля рисков и может достигать хорошей доходности на рынках с сильной цикличностью.
/*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)