
Стратегия многовременных волновых тренд-трекеров - это многовременная система для отслеживания трендов, основанная на показателях WaveTrend. Стратегия оптимизирована специально для 15-минутных временных рамок с использованием трехуровневого метода выравнивания временных рамок: 240-минутный WaveTrend служит макро-фильтром тренда, 30-минутный WaveTrend - для подтверждения динамики, а 15-минутный WaveTrend - для генерации сигнала.
Ключевым принципом стратегии является использование WaveTrend индикатора для идентификации направления тренда и поворотных точек с использованием его синхронной работы в течение нескольких временных рамок. WaveTrend индикатор сам по себе является техническим индикатором, который измеряет состояние ценового перепродажи в сочетании с волатильностью, путем расчета отношения цены к ее индикаторной скользящей средней ((EMA)).
Процесс реализации стратегии выглядит следующим образом:
Во-первых, определим функцию WaveTrend, которая вычисляет два основных значения (wt1 и wt2):
Стратегия включает в себя применение показателя WaveTrend в трех временных рамках:
Условия участия:
Сорт-офф и выезд из игры используют комбинированный метод:
Стратегия фиксирует и отслеживает входную цену каждой сделки, входные столбцы и максимальную доходность, эти параметры используются для динамической корректировки точки выхода.
Совместная работа в нескольких временных рамках: Анализируя индикатор WaveTrend на разных временных рамках, стратегия позволяет более полно понять рыночные тенденции, уменьшить ложные сигналы и повысить точность торгов. Низкие временные рамки обеспечивают точную точку входа, а высокие временные рамки обеспечивают соответствие направления торгов с основными тенденциями.
Динамический механизм остановки убытковСтратегия использует тройную систему защиты от убытков, включая фиксированный процент убытков, отслеживание убытков на основе прибыли и механизм защиты максимальной прибыли. Такая комплексная стратегия убытков позволяет максимально использовать прибыль в тренде, защищая средства.
Система визуальной обратной связиВходные и выходные точки торговли визуально обозначены на графике цветными ярлыками ((🔴) и содержат информацию о столбцах, чтобы облегчить обратный анализ и резюме торгов.
Гибкость параметров: Стратегия предлагает несколько настраиваемых параметров, включая процент отслеживания стоп-убытков, процент отслеживания отслеживания и максимально допустимый процент отзыва, который пользователь может корректировать в соответствии со своими предпочтениями в отношении риска и рыночными условиями.
Ясная структура кода: Стратегия использует функциональный дизайн, разделенный на разные части логики, прост в понимании и обслуживании, а также способствует дальнейшей оптимизации и расширению.
Задержка в отмене трендаВ качестве стратегии отслеживания тенденции может быть задержка реакции в точке поворота тенденции, что приводит к более крупному отступлению при обратном движении. Решение - это корректировка параметров отслеживания стоп-лосса или добавление дополнительного индикатора поворота тенденции в качестве вспомогательного.
Негативные рыночные показателиВ условиях поперечной корректировки или резкой волатильности рынка стратегия может привести к частому появлению ложных сигналов и остановок, что приводит к последовательным потерям. Рекомендуется задействовать стратегию только при подтверждении того, что рынок находится в явном тренде.
Параметр Чувствительность: Стратегия проявляет чувствительность к параметрам WaveTrend (n1=10, n2=21) и параметрам стоп-лосс. Слишком слабые параметры могут привести к слишком позднему остановке, а слишком жесткие параметры могут преждевременно выйти из выгодной тенденции. Эти параметры необходимо оптимизировать с помощью исторической обратной связи.
Риск ликвидности: в коде по умолчанию используется относительная сумма средств ((10%) для торговли, но в низколиквидном рынке это может привести к увеличению скольжения или затруднению сделок. Размер позиции должен быть скорректирован в зависимости от текучести фактического торгового сорта.
Запрос на внешнюю зависимость: Стратегия использует функцию request.security() для получения данных более высоких временных рамок, что может привести к задержкам или риску недоступности данных на некоторых торговых платформах. Необходимо убедиться, что торговая среда поддерживает запросы на данные более высоких временных рамок.
Изменение динамических параметров: текущая стратегия использует фиксированные параметры WaveTrend и коэффициент остановки, можно рассмотреть возможность динамической корректировки этих параметров в соответствии с волатильностью рынка (например, ATR). Например, увеличение дистанции остановки в условиях высокой волатильности и ужесточение остановки в условиях низкой волатильности для адаптации к различным рыночным условиям.
Фильтрация усиления тенденции: можно добавить ADX или аналогичный показатель для измерения силы тренда, совершать сделки только тогда, когда интенсивность тренда превышает определенную отметку, чтобы избежать чрезмерной торговли в слабом тренде или на боковом рынке.
Оптимизация выбора временных рамокПри использовании 15-минутных, 30-минутных и 60-минутных временных рамок в текущей стратегии можно определить оптимальную комбинацию временных рамок с помощью обратного анализа или скорректировать временные рамки в зависимости от особенностей различных торговых сортов.
Подтверждение объема сделкиИнтеграция показателей объема сделок с условиями входа, чтобы обеспечить вход только в тренде, поддерживаемом объемом сделок, улучшение качества сигнала.
Улучшение механизма выступлений: текущие выходы в основном зависят от остановки убытков, можно рассмотреть возможность добавления целевых прибылей или обратных сигналов на основе самого индикатора WaveTrend в качестве активных условий выхода, а не только от пассивного остановки убытков.
Добавление логики управления позициямиВ настоящее время используется фиксированный процент управления капиталом, можно рассматривать возможность динамического изменения размеров позиций на основе волатильности или силы сигнала, увеличение позиций в более уверенных сделках, уменьшение рисковых проемов в сделках с высокой неопределенностью.
Стратегия многовременных волновых тренд-трекеров - это хорошо продуманная система отслеживания тенденций, которая эффективно улавливает рыночные тенденции и контролирует риски посредством синхронного действия показателей многовременных волновых трендов, в сочетании с гибким механизмом отслеживания потерь. Основные преимущества этой стратегии заключаются в ее всестороннем взгляде на рынок и динамическом методе управления рисками, но она может быть вызвана волатильностью рынка.
/*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 := ""