Динамический многопериодный прогноз тренда в сочетании со стратегией фильтрации скользящей средней

EMA SMA ML AI PREDICTION Trend FILTER BACKTEST
Дата создания: 2025-02-20 14:03:44 Последнее изменение: 2025-02-27 17:38:36
Копировать: 1 Количество просмотров: 345
2
Подписаться
319
Подписчики

Динамический многопериодный прогноз тренда в сочетании со стратегией фильтрации скользящей средней Динамический многопериодный прогноз тренда в сочетании со стратегией фильтрации скользящей средней

Обзор

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

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

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

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

Производство торговых сигналов требует одновременного удовлетворения направления тренда и согласованности прогнозных сигналов, а именно:

  • Многоглавый сигнал: цена находится выше EMA и SMA и прогнозируется положительная
  • Пустой сигнал: цена находится ниже EMA и SMA и прогнозируется отрицательная

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

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

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

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

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

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

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

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

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

//@version=5
strategy("My Strategy", overlay=true)

// Parameters (adjust as needed)
neighborsCount = 8
maxBarsBack = 2000
featureCount = 5
useDynamicExits = true
useEmaFilter = true
emaPeriod = 200
useSmaFilter = true
smaPeriod = 200

// Moving Average Calculations
ema = ta.ema(close, emaPeriod)
sma = ta.sma(close, smaPeriod)

// Trend Conditions
isEmaUptrend = close > ema
isEmaDowntrend = close < ema
isSmaUptrend = close > sma
isSmaDowntrend = close < sma

// Model Prediction (Replace with your real model)
// Here a simulation is used, replace it with real predictions
prediction = math.random() * 2 - 1 // Random value between -1 and 1

// Entry Signals
isNewBuySignal = prediction > 0 and isEmaUptrend and isSmaUptrend
isNewSellSignal = prediction < 0 and isEmaDowntrend and isSmaDowntrend

// Exit Signals
var int barsHeld = 0
var bool in_position = false
var int entry_bar = 0

if isNewBuySignal and not in_position
    in_position := true
    entry_bar := bar_index
    barsHeld := 1
else if isNewSellSignal and not in_position
    in_position := true
    entry_bar := bar_index
    barsHeld := 1
else if in_position
    barsHeld := barsHeld + 1
    if barsHeld == 4
        in_position := false

endLongTradeStrict = barsHeld == 4 and isNewBuySignal[1]
endShortTradeStrict = barsHeld == 4 and isNewSellSignal[1]

// Backtest Logic
var float totalProfit = 0
var float entryPrice = na
var int tradeDirection = 0

if isNewBuySignal and tradeDirection <= 0
    entryPrice := close
    tradeDirection := 1
    strategy.entry("Long", strategy.long)

if isNewSellSignal and tradeDirection >= 0
    entryPrice := close
    tradeDirection := -1
    strategy.entry("Short", strategy.short)

if (endLongTradeStrict and tradeDirection == 1) or (endShortTradeStrict and tradeDirection == -1)
    exitPrice = close
    profit = (exitPrice - entryPrice) / entryPrice
    if tradeDirection == -1
        profit := (entryPrice - exitPrice) / entryPrice

    totalProfit := totalProfit + profit
    tradeDirection := 0
    strategy.close_all()

plot(close, color=color.blue)
plot(ema, color=color.orange)
plot(sma, color=color.purple)