Стратегия трендового импульса - зигзагообразная многопериодная динамическая полосовая система синхронизации

SL TP PH PL
Дата создания: 2025-02-18 13:29:06 Последнее изменение: 2025-02-18 13:29:06
Копировать: 1 Количество просмотров: 343
1
Подписаться
1617
Подписчики

Стратегия трендового импульса - зигзагообразная многопериодная динамическая полосовая система синхронизации

Обзор

Эта стратегия представляет собой многомерную торговую систему, которая сочетает в себе индикатор Zigzag и индикатор Уильяма %R. С помощью этого индикатора можно идентифицировать важные высокие и низкие точки в диапазоне, а также использовать индикатор Уильяма для подтверждения входных точек, когда рынок достигает состояния перекупа или перепродажи. Такая комбинация может не только захватить основные трендовые переломы рынка, но и повысить точность торговли путем подтверждения динамики.

Стратегический принцип

Основная логика стратегии основана на двух основных компонентах:

  1. Словесный индикатор определяет высокие и низкие точки в значительной полосе, фильтруя рыночный шум, определяя направление тренда с помощью установленных глубины и параметров отклонения. Когда формируется новый низкий пункт в полосе, это означает начало восходящей тенденции, а новый высокий пункт в полосе - начало нисходящей тенденции.
  2. Индекс Уильяма рассчитывает динамическое состояние рынка, сравнивая текущую цену с наивысшей ценой за определенный период. Когда значение индикатора превышает 80, это означает перепродажу ((потенциальные возможности покупки), а превышение 20 означает перепродажу ((потенциальные возможности продажи)).

Правила торговли в стратегии следующие:

  • Многоусловие: словесный индикатор определяет новую низкую точку в диапазоне, а индекс Вильгельма взрывается вверх из зоны перепродажи
  • Прозрачные условия: слогообразный индикатор идентифицирует новые высокие точки в диапазоне, а индикатор Уильяма прорывается вниз из зоны перекупа
  • Стоп-убыток на 1% и стоп-стоп на 2%

Стратегические преимущества

  1. Многомерное подтверждение: повышение надежности торговых сигналов с помощью двойного подтверждения тенденций и динамики
  2. Самостоятельная адаптивность: параметры отклонения в словесном индикаторе могут быть изменены в зависимости от динамики рыночных колебаний
  3. Управление рисками: применение стратегии стоп-стоп с фиксированным процентом, чтобы контролировать риск каждой сделки
  4. Хорошая визуализация: четкое отображение торговых сигналов с помощью ярлыков и графиков для удобства анализа и оптимизации

Стратегический риск

  1. Риск рыночных потрясений: возможны частые ложные прорывы на криптовалютных рынках
  2. Риск скольжения: в быстром движении возможны большие скольжения
  3. Чувствительность параметров: выбор параметров индикатора оказывает большое влияние на эффективность стратегии
  4. Задержка сигнала: возможно, будет пропущено некоторое быстрое движение из-за необходимости подтвердить формирование новой точки диапазона

Направление оптимизации стратегии

  1. Добавление фильтрации рыночных условий: можно добавить индикатор волатильности для идентификации состояния рынка, используя различные параметры в разных условиях
  2. Динамическая стоп-оптимизация: можно динамически регулировать стоп-позицию на основе ATR или волатильности
  3. Введение подтверждения заказа: добавление подтверждения заказа при генерации сигнала
  4. Фильтрация по времени: можно добавить фильтрацию по времени сделки, чтобы избежать торговли в периоды с большой волатильностью

Подвести итог

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

Исходный код стратегии
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-15 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Zig Zag + Williams %R Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=300)

// ====================
// === Parameters
// ====================

// Zig Zag parameters
zigzag_depth = input.int(5, title="Zig Zag Depth", minval=1)
zigzag_deviation = input.float(1.0, title="Zig Zag Deviation (%)", minval=0.1, step=0.1)

// Williams %R parameters
williams_length = input.int(14, title="Williams %R Length", minval=1)
williams_overbought = input.int(-20, title="Williams %R Overbought", minval=-100, maxval=0)
williams_oversold = input.int(-80, title="Williams %R Oversold", minval=-100, maxval=0)

// ====================
// === Zig Zag Calculation
// ====================

// Initialize variables
var float last_pivot_high = na
var float last_pivot_low = na
var int zz_dir = 0  // 1 for uptrend, -1 for downtrend

// Calculate pivots
pivot_high = ta.pivothigh(high, zigzag_depth, zigzag_depth)
pivot_low = ta.pivotlow(low, zigzag_depth, zigzag_depth)

// Update Zig Zag direction and last pivots with deviation
if (not na(pivot_high))
    if (zz_dir != -1)  // Only change to downtrend if not already in downtrend
        if (na(last_pivot_high) or (high[zigzag_depth] > last_pivot_high * (1 + zigzag_deviation / 100)))
            last_pivot_high := high[zigzag_depth]
            zz_dir := -1
            label.new(bar_index[zigzag_depth], high[zigzag_depth], text="PH", color=color.red, style=label.style_label_down)

if (not na(pivot_low))
    if (zz_dir != 1)  // Only change to uptrend if not already in uptrend
        if (na(last_pivot_low) or (low[zigzag_depth] < last_pivot_low * (1 - zigzag_deviation / 100)))
            last_pivot_low := low[zigzag_depth]
            zz_dir := 1
            label.new(bar_index[zigzag_depth], low[zigzag_depth], text="PL", color=color.green, style=label.style_label_up)

// ====================
// === Williams %R Calculation
// ====================

// Calculate Williams %R manually
highest_high = ta.highest(high, williams_length)
lowest_low = ta.lowest(low, williams_length)
williams_r = (highest_high - close) / (highest_high - lowest_low) * -100

// ====================
// === Trade Conditions
// ====================

// Assign crossover and crossunder results to variables
crossover_williams = ta.crossover(williams_r, williams_oversold)
crossunder_williams = ta.crossunder(williams_r, williams_overbought)

// Define trade conditions
longCondition = (zz_dir == 1) and crossover_williams
shortCondition = (zz_dir == -1) and crossunder_williams

// ====================
// === Trading
// ====================

// Enter Long
if (longCondition)
    strategy.entry("Long", strategy.long)
    label.new(bar_index, low, text="BUY", color=color.green, style=label.style_label_up)

// Enter Short
if (shortCondition)
    strategy.entry("Short", strategy.short)
    label.new(bar_index, high, text="SELL", color=color.red, style=label.style_label_down)

// ====================
// === Visualization
// ====================

// Plot Zig Zag pivot shapes
plotshape(series=(not na(pivot_high) and high[zigzag_depth] == last_pivot_high), title="Swing High", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small, text="ZZ High")
plotshape(series=(not na(pivot_low) and low[zigzag_depth] == last_pivot_low), title="Swing Low", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small, text="ZZ Low")

// Plot Williams %R
hline(williams_overbought, "Overbought", color=color.red, linestyle=hline.style_dashed)
hline(williams_oversold, "Oversold", color=color.green, linestyle=hline.style_dashed)
plot(williams_r, title="Williams %R", color=color.blue)

// Debug plot for Zig Zag direction
plot(zz_dir, title="Zig Zag Direction", color=color.orange, linewidth=2)

// ====================
// === Risk Management
// ====================

// Risk parameters
stop_loss_perc = input.float(1.0, title="Stop Loss (%)") / 100
take_profit_perc = input.float(2.0, title="Take Profit (%)") / 100

// Stop Loss and Take Profit for Long
if (longCondition)
    strategy.exit("Long Exit", from_entry="Long", stop=close * (1 - stop_loss_perc), limit=close * (1 + take_profit_perc))

// Stop Loss and Take Profit for Short
if (shortCondition)
    strategy.exit("Short Exit", from_entry="Short", stop=close * (1 + stop_loss_perc), limit=close * (1 - take_profit_perc))