Стратегия фильтрации адаптивной волатильности на основе многопериодного импульса

momentum volatility SMA ATR stdev SPX
Дата создания: 2025-02-24 09:38:10 Последнее изменение: 2025-02-24 09:38:10
Копировать: 0 Количество просмотров: 345
2
Подписаться
319
Подписчики

Стратегия фильтрации адаптивной волатильности на основе многопериодного импульса Стратегия фильтрации адаптивной волатильности на основе многопериодного импульса

Обзор

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

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

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

  1. Подсчет динамики: метод, использующий ((текущие цены / исторические цены-1) подсчитывает динамические показатели за 4 временных периода.
  2. Фильтрация волатильности: расчет стандартной разницы суточной доходности и годовая обработка, фильтрация во время высокой волатильности путем сравнения ее с заданным порогом ((0,5)).
  3. Появление сигнала: создание многосигнала, когда комплексный динамический показатель переходит в отрицательное положение и колебания ниже порога; при отрицательном динамическом показателе - равновесие.
  4. Управление рисками: использование 1% стоп-лосса и 50% стоп-стопа для контроля риска в каждой сделке.

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

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

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

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

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

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

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

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

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

//@version=5
strategy("GOATED Long-Only", overlay=true, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Strategy parameters
var float VOLATILITY_THRESHOLD = input.float(0.5, "Volatility Threshold", minval=0.1, maxval=1.0, step=0.1)
var int TRADING_DAYS_PER_YEAR = 252
var float SQRT_TRADING_DAYS = math.sqrt(TRADING_DAYS_PER_YEAR)

// Trade parameters
var float STOP_LOSS = input.float(0.05, "Stop Loss %", minval=0.01, maxval=0.20, step=0.01)
var float TAKE_PROFIT = input.float(0.15, "Take Profit %", minval=0.05, maxval=0.50, step=0.01)

// Momentum periods (in trading days)
var int MOMENTUM_3M = input.int(63, "3-Month Momentum Period", minval=20)
var int MOMENTUM_6M = input.int(126, "6-Month Momentum Period", minval=40)
var int MOMENTUM_9M = input.int(189, "9-Month Momentum Period", minval=60)
var int MOMENTUM_12M = input.int(252, "12-Month Momentum Period", minval=80)

// Function to calculate momentum for a specific period
momentum(period) =>
    close / close[period] - 1

// Function to calculate annualized volatility
calcVolatility() =>
    returns = ta.change(close) / close[1]
    stdDev = ta.stdev(returns, TRADING_DAYS_PER_YEAR)
    annualizedVol = stdDev * SQRT_TRADING_DAYS
    annualizedVol

// Calculate individual momentum scores
float mom3m = momentum(MOMENTUM_3M)
float mom6m = momentum(MOMENTUM_6M)
float mom9m = momentum(MOMENTUM_9M)
float mom12m = momentum(MOMENTUM_12M)

// Calculate average momentum score
var int validPeriods = 0
var float totalMomentum = 0.0

validPeriods := 0
totalMomentum := 0.0

if not na(mom3m)
    validPeriods := validPeriods + 1
    totalMomentum := totalMomentum + mom3m

if not na(mom6m)
    validPeriods := validPeriods + 1
    totalMomentum := totalMomentum + mom6m

if not na(mom9m)
    validPeriods := validPeriods + 1
    totalMomentum := totalMomentum + mom9m

if not na(mom12m)
    validPeriods := validPeriods + 1
    totalMomentum := totalMomentum + mom12m

float compositeMomentum = validPeriods > 0 ? totalMomentum / validPeriods : na

// Calculate volatility
float annualizedVolatility = calcVolatility()

// Generate trading signals
var float MOMENTUM_THRESHOLD = input.float(0.0, "Momentum Threshold", minval=-1.0, maxval=1.0, step=0.01)
bool validVolatility = not na(annualizedVolatility) and annualizedVolatility <= VOLATILITY_THRESHOLD
bool validMomentum = not na(compositeMomentum) and compositeMomentum > MOMENTUM_THRESHOLD

// Store previous momentum state
bool prevValidMomentum = nz(validMomentum[1])

// Entry and exit conditions
bool longCondition = validVolatility and validMomentum and not prevValidMomentum
bool exitLongCondition = validVolatility and (not validMomentum) and prevValidMomentum

// Plot signals
plotshape(longCondition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(exitLongCondition, title="Long Exit", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

// Plot momentum and volatility indicators
plot(compositeMomentum, "Composite Momentum", color=color.blue, linewidth=2)
hline(MOMENTUM_THRESHOLD, "Momentum Threshold", color=color.gray, linestyle=hline.style_dashed)

plot(annualizedVolatility, "Annualized Volatility", color=color.purple, linewidth=1)
hline(VOLATILITY_THRESHOLD, "Volatility Threshold", color=color.gray, linestyle=hline.style_dashed)

// Strategy execution - Long positions
if (longCondition)
    strategy.entry("Long", strategy.long)
    
if (strategy.position_size > 0)
    float longStopLoss = strategy.position_avg_price * (1 - STOP_LOSS)
    float longTakeProfit = strategy.position_avg_price * (1 + TAKE_PROFIT)
    strategy.exit("Exit Long", "Long", stop=longStopLoss, limit=longTakeProfit)
    if (exitLongCondition)
        strategy.close("Long", comment="Signal Exit")