Стратегия тренда EMA на нулевое отставание волатильности

Автор:Чао Чжан, Дата: 2024-01-15 12:00:25
Тэги:

img

Обзор

Это простая стратегия прорыва, которая использует разницу между двумя различными EMA с нулевым задержкой для отслеживания подъемного или нисходящего импульса инструмента.

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

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

hJumper = math.max(src,ta.ema(src,lx))
lJumper = math.min(src,ta.ema(src,lx))  
dif = (hJumper / lJumper) - 1

Разница мгновенно реагирует на резкие изменения цен без задержек.

Когда диф пересекает верхнюю полосу Боллинджера, запускается сигнал входа. Когда диф пересекает нижнюю полосу Боллинджера, запускается сигнал выхода. Направление базовой EMA определяет длинный или короткий.

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

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

Еще одним преимуществом является простота этой стратегии. У нее есть только один параметр lx. Меньше параметров облегчает оптимизацию и снижает риск перенапряжения.

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

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

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

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

Ниже приведены некоторые направления, по которым эта стратегия может быть оптимизирована:

  1. Добавить индикаторы фильтров для проверки входных сигналов и уменьшения ложных сигналов.

  2. Включите стоп-лосс и прибыль, чтобы лучше управлять сделками.

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

  4. Принять адаптивные полосы Боллинджера для корректировки параметров на основе волатильности рынка.

  5. Динамически оптимизировать параметры на основе машинного обучения.

Заключение

В целом, эта стратегия EMA с нулевым отставанием волатильности быстро улавливает динамику цен, используя специально рассчитанные EMA без отставания.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wbburgin

//@version=5
strategy("Zero-lag Volatility-Breakout EMA Trend Strategy",overlay=false)

tt1 = "If selected, the strategy will not close long or short positions until the opposite signal is received. This"+
 " exposes you to more risk but potentially could generate larger returns."

src = input.source(close,"Source")
lx = input.int(200,"EMA Difference Length")
bbmult = input.float(2.0,"Standard Deviation Multiple")
useBinaryStrategy = input.bool(true,"Use Binary Strategy",tooltip = tt1)

hJumper = math.max(src,ta.ema(src,lx))
lJumper = math.min(src,ta.ema(src,lx))

dif = (hJumper / lJumper) - 1

[bbm,bbu,bbl] = ta.bb(dif,lx,bbmult)

plot(dif,color=color.white,title="Zero lag EMA Difference")
plot(bbu,color=color.lime,title="Bollinger Top")
plot(bbl,color=color.red,title="Bollinger Bottom")
plot(bbm,color=color.yellow,title="Bollinger Middle")

sigEnter = ta.crossover(dif,bbu)
sigExit = ta.crossunder(dif,bbm)
emaBase = ta.ema(src,lx)
enterLong = sigEnter and emaBase > emaBase[1]
enterShort = sigEnter and emaBase < emaBase[1]

plotshape(enterLong,style=shape.labelup,location=location.bottom,color=color.green,size=size.tiny)
plotshape(enterShort,style=shape.labeldown,location=location.top,color=color.red,size=size.tiny)

if enterLong
    strategy.entry("Long",strategy.long)
if enterShort
    strategy.entry("Short",strategy.short)
if not useBinaryStrategy and sigExit
    strategy.close("Long")
    strategy.close("Short")

Больше