Цигзаг основанный на тренде после стратегии

Автор:Чао Чжан, Дата: 2023-10-30 14:51:08
Тэги:

img

Обзор

Эта стратегия использует индикатор ZigZag для определения направления тренда и следует за трендом после подтверждения.

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

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

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

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

В частности, стратегия длится, когда ZigZag переходит на новый максимум, и становится короткой, когда ZigZag переходит на новый минимум. Условие выхода заключается в том, когда ZigZag снова поворачивается.

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

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

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

  • ZigZag не чувствителен к среднесрочным изменениям тренда, потенциально пропуская более быстрые изменения.
  • Стратегии, следующие за трендом, не могут справиться с убытками от перемены тренда.
  • Он не ограничивает размер потерь в одиночных сделках, что создает большие риски одиночных потерь.
  • Стратегия опирается только на один показатель, риски перенапряжения.

Риски могут быть уменьшены:

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

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

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

  1. Добавить стоп-лосс для контроля риска однократных потерь, например, последующие стоп-ордера или стоп-лимит-ордера.

  2. Добавьте механизмы обнаружения изменения тренда, например, MACD, скользящие средние.

  3. Добавьте модуль повторного входа.

  4. Добавьте модели машинного обучения, такие как LSTM, чтобы помочь в обнаружении трендов.

  5. Оптимизировать управление капиталом на основе теории снижения или корреляции.

  6. Комплексно оптимизировать параметры, такие как период ЗигЗага, путем обратного тестирования и ссылки на экспертизу.

Резюме

Стратегия определяет направление тренда с помощью ZigZag и торгует трендом. Логика проста и проста в реализации. Но существуют риски, такие как зависимость от одного индикатора и изменение тренда. Мы можем оптимизировать ее с помощью стоп-лосса, вспомогательных индикаторов, реэнтри, моделей машинного обучения и т. Д., Чтобы сделать ее более надежной и рациональной. С правильными параметрами и контролем рисков она может эффективно отслеживать средне-долгосрочные тенденции.


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

//Noro
//2018

//@version=2
strategy(title = "Noro's ZZ Strategy v1.0", shorttitle = "ZZ str 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(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title='Timeframe for ZigZag')
showzz = input(false, defval = false, title = "Show ZigZag")
showbg = input(false, defval = false, title = "Show Background")
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
zigzag() =>
    _isUp = close >= open
    _isDown = close <= open
    _direction = _isUp[1] and _isDown ? -1 : _isDown[1] and _isUp ? 1 : nz(_direction[1])
    _zigzag = _isUp[1] and _isDown and _direction[1] != -1 ? highest(2) : _isDown[1] and _isUp and _direction[1] != 1 ? lowest(2) : na
useAltTF = true
zz = useAltTF ? (change(time(tf)) != 0 ? request.security(syminfo.tickerid, tf, zigzag()) : na) : zigzag()
zzcolor = showzz ? black : na
plot(zz, title = 'ZigZag', color = zzcolor, linewidth = 2)

//Levels
dot = zz > 0 ? zz : dot[1]
uplevel = dot > dot[1] ? dot : uplevel[1]
dnlevel = dot < dot[1] ? dot : dnlevel[1]
colorup = close[1] < uplevel[1] and uplevel == uplevel[1] ? lime : na
colordn = close[1] > dnlevel[1] and dnlevel == dnlevel[1] ? red : na
plot(uplevel, color = colorup, linewidth = 3)
plot(dnlevel, color = colordn, linewidth = 3)

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size != size[1] ? blue : na
bgcolor(bgcol, transp = 50)

//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]

if uplevel > 0 and dnlevel > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel + syminfo.mintick)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel - syminfo.mintick)

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Больше