Система захвата тренда с множественными скользящими средними и перекрестного подтверждения

EMA RSI MACD ATR 趋势跟踪 均线交叉 波动率过滤
Дата создания: 2025-03-03 10:11:37 Последнее изменение: 2025-03-03 10:11:37
Копировать: 0 Количество просмотров: 399
2
Подписаться
319
Подписчики

Система захвата тренда с множественными скользящими средними и перекрестного подтверждения Система захвата тренда с множественными скользящими средними и перекрестного подтверждения

Обзор

Трендовые системы с перекрестным подтверждением многократных средних линий - это количественная торговая стратегия, основанная на комбинации движущихся средних (EMA) многопериодных индексов, в сочетании с относительно сильными показателями (RSI), движущимися средними трендовыми различиями (MACD) и средним реальным диапазоном (ATR) в качестве вспомогательных показателей. В основе этой стратегии лежит определение направления рыночной тенденции путем сравнения отношений средних линий в разные периоды времени, открытие позиций при определении тенденции и выравнивание позиций при ослаблении или обратном повороте тенденции.

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

Ключевым принципом стратегии является использование индикаторов с перемещающимися средними ((EMA) с несколькими различными циклами для определения рыночных тенденций и захвата торговых возможностей. В стратегии используются пять ЭМА: мгновенная средняя линия ((14 циклов), средняя средняя линия ((25 циклов), краткосрочная средняя линия ((50 циклов), среднесрочная средняя линия ((100 циклов) и долгосрочная средняя линия ((200 циклов)).

Основная логика этой стратегии состоит в следующем:

  1. Механизм определения тенденций:

    • Условия восходящего тренда: мгновенная средняя линия выше краткосрочной, среднесрочной и долгосрочной, а краткосрочная средняя линия выше среднесрочной
    • Условия нисходящего тренда: мгновенная средняя линия ниже краткосрочной, среднесрочной и долгосрочной, а краткосрочная средняя линия ниже долгосрочной
  2. Сигнал входа:

    • Многоочередной вход: при условии удовлетворения условий восходящего тренда и отсутствия текущей позиции
    • Пустой вход: при выполнении условий нисходящего тренда и отсутствии текущих позиций, а также при выполнении минимального ATR (достаточно высокая волатильность рынка)
  3. Выходный сигнал:

    • Мултиглавная равновесная позиция: когда мгновенная средняя линия падает ниже краткосрочной средней линии
    • Позиции с пустым низом: когда мгновенная средняя линия пересекает среднюю среднюю линию
  4. Контроль риска:

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

    • Стратегия использует бульерные переменные для отслеживания того, находятся ли в настоящее время позиции, а также направление их удержания (поливертики или пустые позиции)

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

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

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

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

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

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

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

  7. Настройка параметров: Все ключевые параметры могут быть скорректированы с помощью входного контроля, включая средний цикл, RSI, MACD и ATR, что позволяет оптимизировать их в зависимости от различных рыночных условий и типов торгов.

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

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

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

  3. Проблемы с адаптацией к различным рынкам: Среднелинейная стратегия с фиксированными параметрами отличается в различных рыночных условиях и торговых типах. Параметры следует оптимизировать для конкретных рынков или рассмотреть возможность использования адаптивных параметров.

  4. Конфликт сигналов: Хотя в коде рассчитываются индикаторы RSI и MACD, они не интегрированы эффективно в логику торговли, что может привести к потенциальным конфликтам сигналов или упущенным возможностям оптимизации.

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

  6. Механизм фиксированного выходаСтратегия использует фиксированный пересечение технических показателей в качестве отправной точки, отсутствие механизма остановки и убытка, который может быть скорректирован в зависимости от динамики рынка, может не быть эффективным для блокирования прибыли или контроля риска.

  7. Параметр ЧувствительностьСтратегия зависит от нескольких среднелинейных параметров цикла, незначительные изменения которых могут привести к значительным различиям в результатах торговли, увеличивая риск чрезмерного соответствия.

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

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

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

  3. Классификация состояния рынкаПрименение различных торговых стратегий в различных рыночных состояниях. Например, можно оценить силу рыночных тенденций с помощью склонности долгосрочной средней линии или индикатора ADX.

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

  5. Оптимизация среднелинейных параметров: текущая стратегия использует фиксированный среднелинейный цикл ((14, 25, 50, 100, 200), который может быть использован для поиска оптимальных параметров, наиболее подходящих для конкретного рынка, путем повторного измерения различных комбинаций параметров.

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

  7. Изменение условий доступа: оптимизировать логику входа для многоголовых и пустых голов, чтобы сделать их более симметричными, или сделать более тонкие коррективы для различных характеристик направления рынка. Например, можно рассмотреть возможность увеличения фильтрации волатильности при многоголовом входе или корректировать строгость признания тенденций.

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

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

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

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

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

Исходный код стратегии
/*backtest
start: 2025-02-23 00:00:00
end: 2025-03-02 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("etude9", shorttitle="etude 9", overlay=true)
//on tente de comlbiner avec le RSi un stratégie pas si mauvaise sur les longs 
// un d7 r rsi qui donne des indiciataions pas mal pour les short pour les long pas très concluant 
// === Paramètres d'entrée ===
// Source de prix
// et merde rendement sur long est plus efficace sans condition sur ATR !!
// par contre j'ai l'imression que le rsi ça va être bien pour les shorts 
// bon avec le RSi ça donne rien, et avec le macd, ç ce stade c'est foireux mmm 
pricetype = input(close, title="Source de prix pour les moyennes mobiles")

// Périodes des moyennes mobiles
instant = input(14, title="Période de la moyenne instantanée (10)")
interm = input(25, title="Perdiode intermediaire (25)")
shortperiod = input(50, title="Période de la moyenne mobile courte (20)")
mediumperiod = input(100, title="Période de la moyenne mobile moyenne (50)")
longperiod = input(200, title="Période de la moyenne mobile longue (100)")

// Paramètres du RSI
rsi_length = input.int(14, title="Période RSI")
rsi_overbought = input.int(78, title="Niveau de surachat (RSI)")
rsi_oversold = input.int(30, title="Niveau de survente (RSI)")

// Paramètres pour le MACD
fast_length = input.int(12, title="Longueur Rapide MACD")
slow_length = input.int(26, title="Longueur Lente MACD")
signal_length = input.int(9, title="Longueur du Signal MACD")

// Paramètres de l'ATR
atr_length = input.int(14, title="Période ATR")
atr_multiplier = input.float(1.5, title="Multiplicateur ATR pour le Stop-Loss")

// Calcul de l'ATR
atr = ta.atr(atr_length)

// === Calcul des moyennes mobiles (EMA uniquement) ===
instant_ma = ta.ema(pricetype, instant) // Moyenne mobile instantanée
short_ma = ta.ema(pricetype, shortperiod)  // Moyenne mobile courte (20)
medium_ma = ta.ema(pricetype, mediumperiod)  // Moyenne mobile moyenne (50)
long_ma = ta.ema(pricetype, longperiod)    // Moyenne mobile longue (100)
interm_ma = ta.ema(pricetype, interm)

// Calcul du RSI
rsi = ta.rsi(close, rsi_length)

// Calcul du MACD
[macd_line, signal_line, hist_line] = ta.macd(close, fast_length, slow_length, signal_length)

// Stocker les résultats de crossover et crossunder dans des variables globales
is_crossover = ta.crossover(macd_line, signal_line)
is_crossunder = ta.crossunder(macd_line, signal_line)

// Filtre ATR : on ne trade que si la volatilité est suffisante
min_atr = atr > ta.sma(atr, atr_length)  // ATR supérieur à sa moyenne

// === Conditions de tendance ===
trending_up = instant_ma > short_ma and instant_ma > medium_ma and instant_ma > long_ma and short_ma > medium_ma   // Tendance haussière
trending_down = instant_ma< short_ma and instant_ma<medium_ma and instant_ma<long_ma and short_ma<long_ma  // Tendance baissière
// Filtre RSI
rsi_filter_buy = rsi < rsi_overbought  // RSI n'est pas en surachat pour un achat
rsi_filter_sell = rsi > rsi_oversold  // RSI n'est pas en survente pour une vente

// === Gestion des positions ===
var bool in_position = false  // Variable pour suivre si une position est ouverte
var bool is_long = false      // Variable pour suivre si la position est longue ou courte

// === Signaux d'ouverture et de fermeture ===
bool buy_signal = false  // Signal d'ouverture d'une position longue
bool close_signal = false  // Signal de fermeture d'une position longue
bool sell_signal = false  // Signal d'ouverture d'une position courte
bool close_short_signal = false  // Signal de fermeture d'une position courte


// Ouvrir une position longue
if (trending_up and not in_position)
    strategy.entry("Long", strategy.long)
    in_position := true
    is_long := true
    buy_signal := true  // Signal d'ouverture
else
    buy_signal := false

// Fermer la position longue si instant_ma < medium_ma
if (in_position and is_long and instant_ma < short_ma)
    strategy.close("Long")
    in_position := false
    is_long := false
    close_signal := true  // Signal de fermeture
else
    close_signal := false

// Ouvrir une position courte
if (trending_down and not in_position and min_atr)
    strategy.entry("Short", strategy.short)
    in_position := true
    is_long := false
    sell_signal := true  // Signal d'ouverture
else
    sell_signal := false
// Fermer la position courte si instant_ma > medium_ma
if (in_position and not is_long and instant_ma > medium_ma)
    strategy.close("Short")
    in_position := false
    close_short_signal := true  // Signal de fermeture
else
    close_short_signal := false
// === Affichage des signaux sur le graphique ===
plotshape(series=buy_signal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy", size=size.small)
plotshape(series=sell_signal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell", size=size.small)
plotshape(series=close_signal, title="Close Long Signal", location=location.abovebar, color=color.orange, style=shape.labeldown, text="Close Long", size=size.small)
plotshape(series=close_short_signal, title="Close Short Signal", location=location.belowbar, color=color.blue, style=shape.labelup, text="Close Short", size=size.small)

// === Affichage des moyennes mobiles sur le graphique ===
plot(short_ma, color=color.blue, title="Moyenne mobile courte (20)", linewidth=2)
plot(medium_ma, color=color.orange, title="Moyenne mobile moyenne (50)", linewidth=2)
plot(long_ma, color=color.red, title="Moyenne mobile longue (100)", linewidth=2)
plot(instant_ma, color=color.rgb(43, 14, 111), title="Moyenne mobile instantanée (10)", linewidth=2)
plot(interm_ma, color=color.rgb(26, 192, 34), title="Moyenne mobile instantanée (10)", linewidth=2)

// Coloration de fond pour les tendances
bgcolor(color=trending_up ? color.new(color.green, 90) : trending_down ? color.new(color.red, 90) : na, title="Coloration de fond")