Эта стратегия использует индикатор Зигзага для нанесения линий поддержки и сопротивления и занимает длинные или короткие позиции, когда цена проходит через линии поддержки или сопротивления.
Стратегия сначала использует индикатор Зигзага для рисования линий Зигзага под определенными параметрами. Зеленые линии поддержки рисуются, когда индикатор Зигзага выходит на дно. Красные линии сопротивления рисуются, когда Зигзаг выходит на вершину. Долгие позиции принимаются, когда цена проходит выше зеленой линии. Короткие позиции принимаются, когда цена проходит ниже красной линии.
В частности, основная логика заключается:
Используйте EMA, чтобы сгладить ценовую границу закрытия с помощью тройных экспоненциальных скользящих средних, получив сглаженную кривую _hls.
Судите, если сглаженная кривая растет. Если растет, а предыдущая панель не растет, она считается нижней. Возьмите самую низкую цену этой панели. Если падает, а предыдущая панель растет, она считается верхней. Возьмите самую высокую цену этой панели. В противном случае NaN.
Повторите этот процесс, чтобы получить линию зигзага зигзага.
Когда зигзаг поднимается, запишите текущую точку пика. Когда падает, запишите текущую точку дна.
Нарисуйте зеленую линию поддержки вверх, когда точка поднимается. Нарисуйте красную линию сопротивления вверх, когда точка падает.
Выберите длинную позицию, когда цена переходит зеленую линию, и короткую позицию, когда цена переходит красную линию.
Преимущества этой стратегии включают:
Определите ключевые уровни поддержки/сопротивления с помощью индикатора зигзага.
Зигзаг отфильтровывает рыночный шум, создавая более четкие торговые сигналы.
Вводить позиции путем прорыва, который может своевременно зафиксировать изменение тренда.
Простой и эффективный способ нарисовать линии поддержки/сопротивления.
Ясная логика и большое пространство для оптимизации параметров.
Гибкость в выборе продуктов и сроков.
Риски этой стратегии:
Неправильные параметры Зигзага могут упустить торговые возможности.
Цены могут перепробовать поддержку/сопротивление после прорыва.
Сигналы могут вводить в заблуждение.
Продолжительные боковые операции могут привести к чрезмерной неэффективности торгов.
Учитывайте затраты на транзакции и избегайте слишком частых сделок.
Решения:
Оптимизируйте параметры Зигзага, чтобы найти лучшую комбинацию.
Установите своевременную остановку потерь после прорыва, чтобы ограничить потери.
Добавьте фильтры, такие как индикаторы тренда, чтобы улучшить точность.
Определите стороны и избегайте торговли в эти периоды.
Расслабьте диапазон прорыва, чтобы уменьшить неэффективные сделки.
Стратегия может быть оптимизирована в следующих аспектах:
Оптимизируйте параметры Зигзага путем обратного тестирования, чтобы найти оптимальный.
Подумайте о возможности повторного тестирования поддержки / сопротивления после прорыва. Добавьте логику выхода для повторных сценариев тестирования.
Добавьте такие фильтры, как MA, чтобы отобразить сигналы с низкой вероятностью.
Включите индикаторы объема для подтверждения сигналов прорыва.
Внедрить двойную методологию Lachenbruch
Используйте машинное обучение для динамической оптимизации параметров.
Внедрить стратегию стоп-лосса для ограничения рисков.
В общем, это простая и практичная стратегия прорыва колебаний. Она привлекает поддержку / сопротивление с использованием зигзага и прорывов сделок. Стратегия адаптивна, но с некоторыми рисками. Оптимизация параметров, фильтров сигнала и контроля рисков может улучшить ее. Такие стратегии прорыва подходят для активных трейдеров, которые могут понять рыночный ритм.
/*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)