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


Дата создания: 2023-12-22 12:04:23 Последнее изменение: 2023-12-22 12:04:23
Копировать: 0 Количество просмотров: 721
1
Подписаться
1623
Подписчики

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

Обзор

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

Стратегический принцип

В этой стратегии сначала рассчитывается закрывающая цена - открывающая цена, т.е. вещная часть акции. Затем рассчитывается высокая цена - низкая цена, т.е. теневая часть акции.

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

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

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

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

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

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

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

Направление оптимизации

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

  1. Оптимизация параметров Элерса-Фишера, чтобы сделать его более чувствительным или фильтрующим шум.

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

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

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

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

Подвести итог

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

Исходный код стратегии
/*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)