Эта статья представляет торговую стратегию под названием
Основой этой стратегии является использование индикатора ZigZag для определения экстремальных точек цен и отображения ценовых тенденций.
Вычислите экспоненциальную скользящую среднюю EMA цены закрытия, включая три скользящие средние линии: быструю линию, среднюю линию и медленную линию.
Судите, находятся ли цены в восходящем тренде, то есть, является ли текущая средняя линия выше средней линии предыдущей K-линии.
Если в настоящее время он находится в восходящей тенденции, найдите самую низкую цену, подсчитанную с начала предыдущей волны низких точек в течение обнаруженного цикла, как значение 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)