Стратегия следования за трендом VWMA на основе угла с динамическим трейлинг-стопом

VWMA EMA MA PVSRA Angle BIAS
Дата создания: 2025-02-18 13:42:01 Последнее изменение: 2025-02-18 13:42:01
Копировать: 2 Количество просмотров: 356
1
Подписаться
1617
Подписчики

Стратегия следования за трендом VWMA на основе угла с динамическим трейлинг-стопом

Обзор

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

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

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

  1. Использует 25-циклический VWMA в качестве основного индикатора тренда
  2. Быстрый сигнал через 8-циклический VWMA
  3. Применение 50-циклической EMA для определения более долгосрочных тенденций
  4. Вычислить угол 50-циклической EMA (при установке 45-градусного порога)
  5. Опциональная 200-циклическая EMA в качестве фильтра на рыночные отклонения Входный сигнал срабатывает при пересечении быстрых движущихся средних с основными VWMA и удовлетворении условий ценового угла. Стратегия защищает прибыль с помощью 1% динамического стоп-стопа.

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

  1. Проверка в нескольких временных рамках - стратегия хорошо работает на временных рамках H1 и M1
  2. Угловой фильтр - уменьшение ложных прорывов путем введения угловых условий движения цены
  3. Отличный риск-менеджмент - использование процентов для отслеживания стоп-лосса, динамическая защита прибыли
  4. Эластичность - может быть скорректирована с помощью параметров для различных рыночных условий
  5. Достаточное подтверждение тренда - перекрестное подтверждение тренда с использованием множественных скользящих средних

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

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

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

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

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

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

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

//@version=6
strategy("PVSRA Trailing Strategy with Angle Condition (40-50 degrees)", overlay=true)

// === INPUTS ===
priceData = input.source(close, title="Price Data")
maLength  = input.int(25, title="Moving Average Length", minval=2)
useBias   = input.bool(false, title="Long/Short just above/below 200 EMA")
useTrailing = input.bool(true, title="Use Trailing Stop")
trailPerc  = input.float(1.0, title="Trailing Stop Percentage", minval=0.1)
anglePeriod = input.int(14, title="Period for Angle Calculation", minval=1)

// === CÁLCULOS ===
maValue = ta.vwma(priceData, maLength)
maLong  = ta.ema(high, 50)
maShort = ta.ema(low, 50)
maFast  = ta.vwma(close, 8)
bias    = ta.ema(close, 200)
longBias  = useBias ? close > bias : true
shortBias = useBias ? close < bias : true

// === CÁLCULO DO ÂNGULO DA MÉDIA MÓVEL DE 50 ===
ma50 = ta.ema(close, 50)
angle = math.atan((ma50 - ma50[anglePeriod]) / anglePeriod) * (180 / math.pi)  // Converte radianos para graus

// === CONDIÇÃO DE ÂNGULO ===
validAngleL = angle >= 45
validAngleS = angle <= 45

// === PLOTS ===
plot(maValue, color=color.orange, title="Moving Average")
plot(maFast, color=color.green, title="Fast MA")
plot(ma50, color=color.blue, title="50 EMA")

plotshape(series=(strategy.position_size > 0) ? maValue : na,
     color=color.red, style=shape.circle, location=location.absolute,
     title="Long Stop")

plotshape(series=(strategy.position_size < 0) ? maValue : na,
     color=color.red, style=shape.cross, location=location.absolute,
     title="Short Stop")

// === CONDIÇÕES DE ENTRADA ===
enterLong  = close > maValue and ta.crossover(maFast, maValue) and close > maLong and longBias and validAngleL
enterShort = close < maValue and ta.crossunder(maFast, maValue) and close < maShort and shortBias and validAngleS

// === CONDIÇÕES DE SAÍDA ===
exitLong  = ta.crossunder(maFast, maValue) and strategy.position_size > 0
exitShort = ta.crossover(maFast, maValue) and strategy.position_size < 0

// === EXECUÇÃO DA ESTRATÉGIA ===
if (enterLong)
    strategy.entry("EL", strategy.long)

if (enterShort)
    strategy.entry("ES", strategy.short)

if (exitLong or exitShort)
    strategy.close_all()

// === TRAILING STOP ===
if (useTrailing and strategy.position_size > 0)
    trailPrice = close * (1 - trailPerc / 100)
    strategy.exit("Trailing Long", from_entry="EL", stop=trailPrice)

if (useTrailing and strategy.position_size < 0)
    trailPrice = close * (1 + trailPerc / 100)
    strategy.exit("Trailing Short", from_entry="ES", stop=trailPrice)