Estratégia de filtragem de volatilidade adaptativa baseada em momentum multiperíodo

momentum volatility SMA ATR stdev SPX
Data de criação: 2025-02-24 09:38:10 última modificação: 2025-02-24 09:38:10
cópia: 0 Cliques: 345
2
focar em
319
Seguidores

Estratégia de filtragem de volatilidade adaptativa baseada em momentum multiperíodo Estratégia de filtragem de volatilidade adaptativa baseada em momentum multiperíodo

Visão geral

A estratégia é um sistema de negociação avançado baseado em indicadores de dinâmica multicíclica e filtragem de taxa de flutuação. Construiu um sistema de pontuação de dinâmica integrada calculando a dinâmica de preços em quatro períodos de tempo de 3 meses, 6 meses, 9 meses e 12 meses.

Princípio da estratégia

A lógica central da estratégia inclui os seguintes elementos-chave:

  1. Cálculo de momentum: o método de cálculo de momentum para 4 períodos de tempo é calculado usando o método de cálculo de momentum para o preço atual / preço histórico -1.
  2. Filtragem de taxa de flutuação: o diferencial padrão da taxa de retorno diária é calculado e anualizado, comparando-o com o limiar predefinido ((0.5)) para filtrar a alta taxa de flutuação durante o período.
  3. Geração de sinais: quando o indicador de dinâmica integral é corrigido por uma inversão negativa e a taxa de flutuação é inferior ao limiar, gera um sinal de multiplicação; quando o indicador de dinâmica é negativo, está em equilíbrio.
  4. Gerenciamento de Risco: O risco de uma única transação é controlado com um stop loss de 1% e um stop loss de 50%.

Vantagens estratégicas

  1. Análise de dinâmicas multidimensionais: permite uma avaliação mais abrangente da intensidade e persistência das tendências de preços, considerando integralmente a dinâmica de vários períodos de tempo.
  2. Filtragem de taxa de oscilação adaptativa: evita os falsos sinais durante os altos níveis de oscilação através de cálculos dinâmicos e filtragem de oscilação.
  3. Controle de risco perfeito: configurações de stop loss e de stop loss permitem controlar eficazmente o risco de uma única transação.
  4. Decisões sistemáticas: as estratégias são totalmente sistemáticas, evitando a interferência de julgamentos subjetivos.

Risco estratégico

  1. Risco de reversão de tendência: pode sofrer grandes perdas se a tendência forte se reverte repentinamente.
  2. Sensibilidade de parâmetros: os efeitos da estratégia são mais sensíveis a configurações de parâmetros, como o ciclo de potência e os limites de taxa de flutuação.
  3. Dependência do cenário de mercado: Falso sinal pode ser frequente em mercados com turbulência.
  4. Efeito do ponto de deslizamento: os custos de transação podem ser maiores quando o mercado não é tão líquido.

Direção de otimização da estratégia

  1. Otimização de parâmetros dinâmicos: pode ser introduzido um mecanismo de ajuste de parâmetros adaptativos, ajustando dinamicamente o ciclo de potência e o limiar de taxa de flutuação de acordo com o estado do mercado.
  2. Classificação de estados de mercado: adição de módulos de identificação de estados de mercado, com diferentes configurações de parâmetros em diferentes ambientes de mercado.
  3. Mecanismo de confirmação de sinais: introdução de indicadores técnicos adicionais para confirmar sinais de negociação e aumentar a estabilidade da estratégia.
  4. Optimização da gestão de fundos: pode-se ajustar o tamanho da posição de acordo com a intensidade do sinal, para obter uma melhor eficiência na utilização de fundos.

Resumir

A estratégia, combinando análise de dinâmica de vários períodos e filtragem de taxa de flutuação, constrói um sistema de negociação de acompanhamento de tendências completo. Sua vantagem central reside no processo de decisão sistematizado e no mecanismo de controle de risco perfeito. Embora existam alguns riscos inerentes, a estratégia ainda tem um grande espaço para melhoria através da direção de otimização proposta.

Código-fonte da estratégia
/*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")