Стратегия " Зигзага "

Автор:Чао Чжан, Дата: 2023-10-20 16:37:28
Тэги:

img

Обзор

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

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

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

В частности, основная логика заключается:

  1. Используйте EMA, чтобы сгладить ценовую границу закрытия с помощью тройных экспоненциальных скользящих средних, получив сглаженную кривую _hls.

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

  3. Повторите этот процесс, чтобы получить линию зигзага зигзага.

  4. Когда зигзаг поднимается, запишите текущую точку пика. Когда падает, запишите текущую точку дна.

  5. Нарисуйте зеленую линию поддержки вверх, когда точка поднимается. Нарисуйте красную линию сопротивления вверх, когда точка падает.

  6. Выберите длинную позицию, когда цена переходит зеленую линию, и короткую позицию, когда цена переходит красную линию.

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

Преимущества этой стратегии включают:

  1. Определите ключевые уровни поддержки/сопротивления с помощью индикатора зигзага.

  2. Зигзаг отфильтровывает рыночный шум, создавая более четкие торговые сигналы.

  3. Вводить позиции путем прорыва, который может своевременно зафиксировать изменение тренда.

  4. Простой и эффективный способ нарисовать линии поддержки/сопротивления.

  5. Ясная логика и большое пространство для оптимизации параметров.

  6. Гибкость в выборе продуктов и сроков.

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

Риски этой стратегии:

  1. Неправильные параметры Зигзага могут упустить торговые возможности.

  2. Цены могут перепробовать поддержку/сопротивление после прорыва.

  3. Сигналы могут вводить в заблуждение.

  4. Продолжительные боковые операции могут привести к чрезмерной неэффективности торгов.

  5. Учитывайте затраты на транзакции и избегайте слишком частых сделок.

Решения:

  1. Оптимизируйте параметры Зигзага, чтобы найти лучшую комбинацию.

  2. Установите своевременную остановку потерь после прорыва, чтобы ограничить потери.

  3. Добавьте фильтры, такие как индикаторы тренда, чтобы улучшить точность.

  4. Определите стороны и избегайте торговли в эти периоды.

  5. Расслабьте диапазон прорыва, чтобы уменьшить неэффективные сделки.

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

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

  1. Оптимизируйте параметры Зигзага путем обратного тестирования, чтобы найти оптимальный.

  2. Подумайте о возможности повторного тестирования поддержки / сопротивления после прорыва. Добавьте логику выхода для повторных сценариев тестирования.

  3. Добавьте такие фильтры, как MA, чтобы отобразить сигналы с низкой вероятностью.

  4. Включите индикаторы объема для подтверждения сигналов прорыва.

  5. Внедрить двойную методологию Lachenbruch (длинную и короткую) для фильтрации неверных сигналов и прибыли.

  6. Используйте машинное обучение для динамической оптимизации параметров.

  7. Внедрить стратегию стоп-лосса для ограничения рисков.

Заключение

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


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

//Noro
//2018

//@version=3
// strategy(title = "Noro's ZZ-2 Strategy", shorttitle = "Noro's ZZ-2 Strategy", 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, title = "ZigZag length")
Extreme = input(4, title = "ZigZag extreme")
src = input(close, title = "Source")
showzz = input(false, defval = false, title = "Show ZigZag")
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, Extreme)
zzcol = showzz ? black : na
plot(zigzag, color = zzcol, linewidth = 2)

//Levels
dot = 0.0
dot := zigzag > 0 ? zigzag : dot[1]
uplevel = 0.0
uplevel := dot > dot[1] ? zigzag : uplevel[1]
dnlevel = 0.0
dnlevel := dot < dot[1] ? zigzag : dnlevel[1]
upcol = na
upcol := dot > dot[1] ? na : lime
plot(uplevel, color = upcol, linewidth = 2)
dncol = na
dncol := dot < dot[1] ? na : red
plot(dnlevel, color = dncol, linewidth = 2)

//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if dot > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)


Больше