Стратегия следования за трендом на нескольких таймфреймах

WT MTF WaveTrend ATR Trailing Stop TREND-FOLLOWING HLC3
Дата создания: 2025-07-07 16:04:18 Последнее изменение: 2025-07-07 16:04:18
Копировать: 0 Количество просмотров: 233
2
Подписаться
319
Подписчики

Стратегия следования за трендом на нескольких таймфреймах Стратегия следования за трендом на нескольких таймфреймах

Обзор

Стратегия многовременных волновых тренд-трекеров - это многовременная система для отслеживания трендов, основанная на показателях WaveTrend. Стратегия оптимизирована специально для 15-минутных временных рамок с использованием трехуровневого метода выравнивания временных рамок: 240-минутный WaveTrend служит макро-фильтром тренда, 30-минутный WaveTrend - для подтверждения динамики, а 15-минутный WaveTrend - для генерации сигнала.

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

Ключевым принципом стратегии является использование WaveTrend индикатора для идентификации направления тренда и поворотных точек с использованием его синхронной работы в течение нескольких временных рамок. WaveTrend индикатор сам по себе является техническим индикатором, который измеряет состояние ценового перепродажи в сочетании с волатильностью, путем расчета отношения цены к ее индикаторной скользящей средней ((EMA)).

Процесс реализации стратегии выглядит следующим образом:

  1. Во-первых, определим функцию WaveTrend, которая вычисляет два основных значения (wt1 и wt2):

    • Расчетная цена (ЭМА, обычно HLC3)
    • Вычисление абсолютного разрыва между ценой и EMA, как мера волатильности
    • Относительное ценовое отклонение от конструируемой консолидации (ci)
    • Вычислить EMA для ci как wt1, а SMA для wt1 как wt2
  2. Стратегия включает в себя применение показателя WaveTrend в трех временных рамках:

    • 15-минутная диаграмма (в текущем временном интервале) для конкретного генерирования сигналов
    • 30-минутный график для определения направления средней динамики
    • 60-минутный график дает более длительную картину трендов
  3. Условия участия:

    • Сделайте больше: когда wt1 на 15-минутном графике пересекает wt2 вверх, и значение wt1 больше 60, в то же время на 30-минутном графике тенденция вверх ((wt1 > wt2)
    • Пустота: когда wt1 на 15-минутном графике пересекает wt2 вниз, а значение wt1 меньше 20, в то же время на 30-минутном графике тенденция вниз ((wt1 < wt2)
  4. Сорт-офф и выезд из игры используют комбинированный метод:

    • Фиксированный процентный маржинальный стоп
    • Трейлинговые остановки, вызванные доходами
    • Защитный стоп на основе максимального вывода доходов (Maximum Drop Stop)
  5. Стратегия фиксирует и отслеживает входную цену каждой сделки, входные столбцы и максимальную доходность, эти параметры используются для динамической корректировки точки выхода.

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

  1. Совместная работа в нескольких временных рамках: Анализируя индикатор WaveTrend на разных временных рамках, стратегия позволяет более полно понять рыночные тенденции, уменьшить ложные сигналы и повысить точность торгов. Низкие временные рамки обеспечивают точную точку входа, а высокие временные рамки обеспечивают соответствие направления торгов с основными тенденциями.

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

  3. Система визуальной обратной связиВходные и выходные точки торговли визуально обозначены на графике цветными ярлыками ((🔴) и содержат информацию о столбцах, чтобы облегчить обратный анализ и резюме торгов.

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

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

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

  1. Задержка в отмене трендаВ качестве стратегии отслеживания тенденции может быть задержка реакции в точке поворота тенденции, что приводит к более крупному отступлению при обратном движении. Решение - это корректировка параметров отслеживания стоп-лосса или добавление дополнительного индикатора поворота тенденции в качестве вспомогательного.

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

  3. Параметр Чувствительность: Стратегия проявляет чувствительность к параметрам WaveTrend (n1=10, n2=21) и параметрам стоп-лосс. Слишком слабые параметры могут привести к слишком позднему остановке, а слишком жесткие параметры могут преждевременно выйти из выгодной тенденции. Эти параметры необходимо оптимизировать с помощью исторической обратной связи.

  4. Риск ликвидности: в коде по умолчанию используется относительная сумма средств ((10%) для торговли, но в низколиквидном рынке это может привести к увеличению скольжения или затруднению сделок. Размер позиции должен быть скорректирован в зависимости от текучести фактического торгового сорта.

  5. Запрос на внешнюю зависимость: Стратегия использует функцию request.security() для получения данных более высоких временных рамок, что может привести к задержкам или риску недоступности данных на некоторых торговых платформах. Необходимо убедиться, что торговая среда поддерживает запросы на данные более высоких временных рамок.

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

  1. Изменение динамических параметров: текущая стратегия использует фиксированные параметры WaveTrend и коэффициент остановки, можно рассмотреть возможность динамической корректировки этих параметров в соответствии с волатильностью рынка (например, ATR). Например, увеличение дистанции остановки в условиях высокой волатильности и ужесточение остановки в условиях низкой волатильности для адаптации к различным рыночным условиям.

  2. Фильтрация усиления тенденции: можно добавить ADX или аналогичный показатель для измерения силы тренда, совершать сделки только тогда, когда интенсивность тренда превышает определенную отметку, чтобы избежать чрезмерной торговли в слабом тренде или на боковом рынке.

  3. Оптимизация выбора временных рамокПри использовании 15-минутных, 30-минутных и 60-минутных временных рамок в текущей стратегии можно определить оптимальную комбинацию временных рамок с помощью обратного анализа или скорректировать временные рамки в зависимости от особенностей различных торговых сортов.

  4. Подтверждение объема сделкиИнтеграция показателей объема сделок с условиями входа, чтобы обеспечить вход только в тренде, поддерживаемом объемом сделок, улучшение качества сигнала.

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

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

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

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

Исходный код стратегии
/*backtest
start: 2024-07-07 00:00:00
end: 2024-11-28 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("WT-FLOW: MTF WaveTrend Trend-Follower", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// === WaveTrend Fonksiyonu ===
waveTrend(_src, _n1, _n2) =>
    esa = ta.ema(_src, _n1)
    d = ta.ema(math.abs(_src - esa), _n1)
    ci = (_src - esa) / (0.015 * d)
    wt1 = ta.ema(ci, _n2)
    wt2 = ta.sma(wt1, 4)
    [wt1, wt2]

// === Giriş Fiyatı ve Maksimum Kazanç Değişkenleri ===
var float longEntryPrice = na
var float shortEntryPrice = na
var float maxGainLong = 0.0
var float maxGainShort = 0.0
var int longEntryBar = na
var int shortEntryBar = na
var string currentPosition = ""

// === WT Değerlerini Al (Farklı Zaman Dilimleri) ===
var int n1 = 10
var int n2 = 21
ap = hlc3
[wt1_15, wt2_15] = waveTrend(ap, n1, n2)
[wt1_30, wt2_30] = request.security(syminfo.tickerid, "30", waveTrend(ap, n1, n2))
[wt1_60, wt2_60] = request.security(syminfo.tickerid, "60", waveTrend(ap, n1, n2))

// === Kullanıcı Girdileri: Trailing Stop Parametreleri ===
marginStopPerc = input.float(2.0, "Marjinal Stop (%)")
trailTriggerPerc = input.float(1.5, "Trailing Tetikleyici (%)")
trailFollowPerc = input.float(0.8, "Trailing Takip (%)")
trailMaxDropPerc = input.float(3.0, "Maksimum Düşüş (%)")

// === ATR için tr hesaplaması ===
tr = ta.tr(true)

// === Sinyal Koşulları ===
trendUp = wt1_30 > wt2_30
trendDown = wt1_30 < wt2_30
entryLong = ta.crossover(wt1_15, wt2_15) and wt1_15 > -60 and trendUp
entryShort = ta.crossunder(wt1_15, wt2_15) and wt1_15 < 20 and trendDown

// === Pozisyon Girişleri ===
if entryLong and currentPosition != "Long"
    strategy.entry("Long", strategy.long)
    longEntryPrice := close
    maxGainLong := 0.0
    longEntryBar := bar_index
    currentPosition := "Long"
    label.new(bar_index, high + 2 * tr, "🟢 Giriş Long #" + str.tostring(bar_index), style=label.style_label_up, color=color.green, textcolor=color.white)

if entryShort and currentPosition != "Short"
    strategy.entry("Short", strategy.short)
    shortEntryPrice := close
    maxGainShort := 0.0
    shortEntryBar := bar_index
    currentPosition := "Short"
    label.new(bar_index, low - 2 * tr, "🔴 Giriş Short #" + str.tostring(bar_index), style=label.style_label_down, color=color.red, textcolor=color.white)

// === Trailing Stop ve Marjinal Stop Seviyeleri ===
if currentPosition == "Long" and not na(longEntryPrice)
    gainFromEntry = (close - longEntryPrice) / longEntryPrice * 100
    maxGainLong := math.max(maxGainLong, gainFromEntry)
    trailTriggerReached = gainFromEntry >= trailTriggerPerc
    trailStop = close * (1 - trailFollowPerc / 100)
    dropStop = longEntryPrice * (1 + (maxGainLong - trailMaxDropPerc) / 100)
    finalStop = trailTriggerReached ? math.max(trailStop, dropStop) : longEntryPrice * (1 - marginStopPerc / 100)
    if close <= finalStop
        strategy.close("Long")
        label.new(bar_index, low - 2 * tr, "❅ Çıkış Long #" + str.tostring(longEntryBar), style=label.style_label_down, color=color.red, textcolor=color.white)
        longEntryPrice := na
        longEntryBar := na
        currentPosition := ""

if currentPosition == "Short" and not na(shortEntryPrice)
    gainFromEntryShort = (shortEntryPrice - close) / shortEntryPrice * 100
    maxGainShort := math.max(maxGainShort, gainFromEntryShort)
    trailTriggerReachedShort = gainFromEntryShort >= trailTriggerPerc
    trailStopShort = close * (1 + trailFollowPerc / 100)
    dropStopShort = shortEntryPrice * (1 - (maxGainShort - trailMaxDropPerc) / 100)
    finalStopShort = trailTriggerReachedShort ? math.min(trailStopShort, dropStopShort) : shortEntryPrice * (1 + marginStopPerc / 100)
    if close >= finalStopShort
        strategy.close("Short")
        label.new(bar_index, high + 2 * tr, "❄ Çıkış Short #" + str.tostring(shortEntryBar), style=label.style_label_up, color=color.green, textcolor=color.white)
        shortEntryPrice := na
        shortEntryBar := na
        currentPosition := ""