Стратегия индекса относительной энергии Элерса Фишера

Автор:Чао Чжан, Дата: 2023-12-22 12:04:23
Тэги:

img

Обзор

Эта стратегия основана на индикаторе Ehlers Fisher Stochastic Relative Vigor Index, предложенном Джоном Элерсом в его книге "Кибернетический анализ акций и фьючерсов". Стратегия использует индикатор Ehlers Fisher для оценки относительной силы акций и сочетает его с пользовательскими правилами торговли для входов и выходов.

Логика стратегии

Стратегия сначала рассчитывает цену закрытия - цену открытия, которая является телом свечи. Затем она рассчитывает высокую цену - низкую цену, которая является тенью свечи. Принимая сумму и среднее значение этих двух частей соответственно, она получает импульс акции. Затем деля импульс с волатильностью акции, она получает индекс относительной энергии (RVI).

Далее на RVI применяется формула Элерса Фишера, чтобы получить значение сигнала. Он длинный, когда сигнал пересекает триггер, и короткий, когда сигнал пересекает ниже триггера. Кроме того, для контроля рисков реализуются фиксированные стоп-потери и стоп-потери.

Анализ преимуществ

Эта стратегия объединяет характеристики импульса и стохастический индикатор акций, которые могут эффективно определять относительную силу на рынке. Конструкция индикатора Элерса Фишера может уменьшить влияние шума и генерировать относительно надежные торговые сигналы. Индекс энергии отражает качество тренда и волатильность самого акции, что делает его динамическим индикатором.

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

Анализ рисков

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

Кроме того, существует некоторая степень риска корректировки кривой, присущая самой стратегии. Если рыночная среда в бэкстестинге и живой торговле сильно меняется, эффективность стратегии может значительно отклоняться. В этом случае параметры стратегии должны быть скорректированы, а правила торговли требуют оптимизации для адаптации к новым рыночным условиям.

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

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

  1. Оптимизировать параметры индикатора Ehlers Fisher для повышения чувствительности или фильтрации шума.

  2. Моделируйте индикатор с помощью алгоритмов машинного обучения, таких как LSTM, чтобы генерировать более надежные торговые сигналы.

  3. Включить индикаторы волатильности рынка, такие как ATR, для динамической корректировки расстояния стоп-лосса.

  4. Добавить поддержку многофакторных моделей, объединяющих другие технические и фундаментальные показатели для улучшения качества сигнала.

  5. Оптимизировать логику открытых/закрытых позиций с динамическими критериями входа/выхода.

Заключение

Эта стратегия использует индикатор Ehlers Fisher Stochastic RVI для определения тенденции и силы рынка и устанавливает разумные механизмы стоп-лосса для контроля рисков. По сравнению с одиночными индикаторами, эта стратегия органично сочетает в себе несколько индикаторов и моделей, которые могут фильтровать шум и предоставлять высококачественные сигналы.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Ehlers Fisher Stochastic Relative Vigor Index 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)
p = input(10, title = "Length")
FisherStoch(src, len) =>
    val1 = stoch(src, src, src, len) / 100
    val2 = (4 * val1 + 3 * val1[1] + 2 * val1[2] + val1[3]) / 10
    FisherStoch = 0.5 * log((1 + 1.98 * (val2 - 0.5)) / (1 - 1.98 * (val2 - 0.5))) / 2.64

CO = close - open
HL = high - low

value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6

num = sum(value1, p)
denom = sum(value2, p)

RVI = denom != 0 ? num / denom : 0

signal = FisherStoch(RVI, p)
trigger = signal[1]
oppositeTrade = input(true)
barsSinceEntry = 0
barsSinceEntry := nz(barsSinceEntry[1]) + 1
if strategy.position_size == 0
    barsSinceEntry := 0
if ((crossover(signal, trigger) and not oppositeTrade) or (oppositeTrade and crossunder(signal, trigger))) and abs(signal) > 2 / 2.64
    strategy.entry("Long", strategy.long)
    barsSinceEntry := 0
if ((crossunder(signal, trigger) and not oppositeTrade) or (oppositeTrade and crossover(signal, trigger))) and abs(signal) > 2 / 2.64
    strategy.entry("Short", strategy.short)
    barsSinceEntry := 0
if strategy.openprofit < 0 and barsSinceEntry > 8
    strategy.close_all()
    barsSinceEntry := 0
    
hline(0, title="ZeroLine", color=gray) 
signalPlot = plot(signal, title = "Signal", color = blue)
triggerPlot = plot(trigger, title = "Trigger", color = green)
fill(signalPlot, triggerPlot, color = signal < trigger ? red : lime, transp = 50)

Больше