
Стратегия случайных циклов Элерса - это количественная торговая стратегия, использующая случайные циклы Элерса для получения торговых сигналов. Эта стратегия объединяет преимущества случайных и циклических индикаторов, чтобы использовать периодические возможности на рынке.
Эта стратегия сначала строит сглаженный циклический показатель, а затем на основе этого показателя строит случайный показатель. Производство торгового сигнала определяется скрещиванием движущихся средних этих случайных показателей.
В частности, метод расчета показателя сглаженного цикла:
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]
В расчетной формуле содержится дифференциал второй степени для циклического сигнала после сглаживания, а также значения для двух предыдущих циклов… …
Наконец, на основе этого индикатора цикла рассчитывается случайная величина value1 ≠ 100 и построена сигнальная величина signal1 ≠ 10 на основе 10-дневного скользящего среднего значения value1.
Эта стратегия объединяет в себе преимущества как случайных, так и периодических показателей. По сравнению с простыми стратегиями, такими как движущиеся средние, эта стратегия может лучше улавливать периодические возможности, что приводит к лучшим результатам.
Основные преимущества:
Основные риски этой стратегии:
Риск можно контролировать путем оптимизации параметров, установки стоп-стоп и других методов в сочетании с другими показателями фильтрации.
Эта стратегия также может быть оптимизирована в следующих направлениях:
Стратегия случайных циклов Элерса использует преимущества случайных и циклических индикаторов для эффективного управления риском с помощью дизайна двойных сигналов, что позволяет получать лучшую прибыль на рынках с более сильной периодичностью. При дальнейшей оптимизации эта стратегия может стать рекомендуемой стратегией количественной торговли.
/*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)