
Стратегия, описанная в этой статье, называется “Стратегия следования тренду ZigZag” (ZigZag Trend Following Strategy). Эта стратегия использует индикатор ZigZag, чтобы идентифицировать ценовые тенденции и открывать позиции, чтобы отслеживать тенденцию при обратном тренде. В коде Strategy Pine индикатор ZigZag используется для подтверждения новых высоких и новых низких точек цены.
В основе этой стратегии лежит использование индикатора ZigZag для определения критических точек цены и показания тенденции цены. Индикатор ZigZag состоит из экспоненциальных движущихся средних высоких и низких цен. В частности, он состоит из следующих шагов:
Индексная скользящая средняя EMA, используемая для вычисления цены закрытия, состоит из трех скользящих средних: быстрой, средней и медленной.
Определяйте, есть ли тенденция к повышению цены. То есть, является ли текущая средняя линия выше средней линии предыдущей линии K.
Если в настоящее время наблюдается тенденция к росту, то найдите самую низкую цену за период, начиная с минимального уровня предыдущей волны, как значение ZigZag.
Если в настоящее время наблюдается нисходящий тренд, то найдите наивысшую цену за период наблюдения, начиная с пика предыдущей волны, как значение ZigZag.
Таким образом, был сформирован индикатор ZigZag, отражающий критические точки колебаний цен.
На этой основе мы используем ZigZag-линию в качестве отсчета для оценки ценового тренда. То есть, когда цена поднимается, мы делаем больше, когда она пересекает указательную линию ZigZag; когда цена падает, мы делаем больше, когда она пересекает указательную линию ZigZag.
Преимущества использования индикатора ZigZag для определения ценовых тенденций и отслеживания критических точек цены в качестве позиционирования:
Это позволяет эффективно отфильтровывать рыночный шум и улавливать основные тенденции.
Торговые сигналы, основанные на прорывах цены вверх и вниз, позволяют эффективно получать прибыль.
ZigZag-линии более гладкие, что позволяет уменьшить количество ложных сигналов.
Оптимизация стратегии может быть легко достигнута путем коррекции параметров ZigZag.
Основные риски этой стратегии:
Долгосрочные операции могут быть ограничены из-за резких колебаний. При этом необходимо своевременно остановить убытки.
Индекс ZigZag чувствителен к параметрам. Неправильная настройка может привести к пропущенным сделкам или созданию ложных сигналов. Параметры требуют соответствующего тестирования и оптимизации.
Стратегия отслеживания трендов больше зависит от тенденций. Если вы столкнулись с шок-сборкой, эта стратегия будет неэффективной.
Для этих рисков мы можем установить механизм остановки, чтобы контролировать одиночные потери; одновременно регулировать размер позиции, не стремясь к полноценной работе; и, наконец, использовать комбинацию различных типов стратегий.
Мы можем продолжить оптимизацию этой стратегии в следующих аспектах:
Увеличение механизма остановки убытков, например, установление остановки движения или остановки убытков, при которых цена отступает.
В сочетании с другими показателями фильтруют вход. Например, усиленный энергетический показатель, чтобы обеспечить достаточную динамическую энергию; или торговый показатель, чтобы обеспечить весовые характеристики.
В зависимости от различных рыночных условий (например, бычьи и медвежие рынки) используются различные параметры конфигурации.
Тестирование различных средних параметров EMA для поиска оптимальной комбинации параметров.
Эта стратегия использует индикатор ZigZag, чтобы определить ценовую тенденцию и создать позицию для отслеживания вблизи критической точки. Ее преимущества заключаются в том, что она является последовательной, эффективной и прибыльной.
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Noro's ZigTrend Strategy v1.0", shorttitle = "ZigTrend 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(4)
ExtremeDetection = input(4)
src = input(close)
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//ZigZag
f_zz(_length, _detection)=>
_hls = ema(ema(ema(src, _length), round(_length*0.66)), round(_length*0.33))
_isRising = _hls >= _hls[1]
_zigzag = _isRising and not _isRising[1] ? lowest(_detection) : not _isRising and _isRising[1] ? highest(_detection) : na
zigzag = f_zz(length, ExtremeDetection)
plot(zigzag, color=black, linewidth=2)
//Signals
up = close > zigzag
dn = close < zigzag
//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if up
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dn
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)