Стратегия стохастического киберцикла Элерса

Автор:Чао Чжан, Дата: 2024-01-17 16:03:30
Тэги:

img

Обзор

Стратегия стохастического киберцикла 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.

Преимущества стратегии

По сравнению с простыми стратегиями тренда, такими как скользящие средние, эта стратегия может лучше улавливать циклические возможности и, таким образом, достигать лучших результатов.

Основными преимуществами являются:

  1. Циклические индикаторы могут идентифицировать циклические модели, стохастические индикаторы предоставляют торговые возможности
  2. Дизайн двойного индикатора может эффективно фильтровать ложные сигналы
  3. Настраиваемые параметры подходят для различных рыночных условий

Риски стратегии

Основными рисками этой стратегии являются:

  1. Неправильное настройка параметров может привести к частой торговле, увеличению затрат на торговлю и затрат на скольжение
  2. Не может эффективно управлять рынками с сильными колебаниями цен, которые могут привести к большим потерям
  3. Показатели цикла в значительной степени зависят от настройки кривой, неправильное настройка может генерировать неправильные сигналы

Риски можно контролировать путем оптимизации параметров, установки точек остановки потерь, сочетания других показателей фильтрации и т.д.

Руководство по оптимизации

Эта стратегия также может быть оптимизирована в следующих аспектах:

  1. Комбинировать с другими техническими индикаторами для фильтрации сигналов, такими как полосы Боллинджера, RSI и т.д., для уменьшения ложных сигналов.
  2. Добавить адаптивные механизмы выхода, динамически регулировать точки остановки потери в соответствии с волатильностью рынка
  3. Использование методов машинного обучения для автоматической оптимизации параметров для динамической адаптации к рынку
  4. Оптимизировать использование капитала с помощью рычагов кредитования, комплектования и других средств

Заключение

Стратегия стохастического киберцикла 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)

Больше