O recurso está a ser carregado... Carregamento...

Estratégia de negociação dinâmica adaptativa baseada em retornos logarítmicos normalizados

Autora:ChaoZhang, Data: 2024-12-27 14:39:32
Tags:SZISMALOGDST

img

Resumo

Esta estratégia é um sistema de negociação adaptativo baseado no Índice Shiryaev-Zhou (SZI). Identifica as condições de mercado de sobrecompra e sobrevenda através do cálculo de pontuações padronizadas de retornos logarítmicos, com o objetivo de capturar oportunidades de reversão média.

Princípios de estratégia

O núcleo da estratégia consiste na construção de um indicador padronizado utilizando propriedades estatísticas rolantes de retornos logarítmicos.

  1. Calcule retornos logarítmicos para a normalização
  2. Cálculo da média contínua e do desvio-padrão utilizando uma janela de 50 períodos
  3. Construir SZI: (retorno logarítmico - média de rolamento) /desvio padrão de rolamento
  4. Gerar sinais longos quando o SZI for inferior a -2,0 e sinais curtos quando superior a 2,0
  5. Estabelecer níveis de stop-loss de 2% e de take-profit de 4% com base no preço de entrada

Vantagens da estratégia

  1. Fundamento teórico sólido: baseado em suposições de distribuição log-normal com forte apoio estatístico
  2. Alta adaptabilidade: os cálculos da janela rolante adaptam-se às alterações nas características da volatilidade do mercado
  3. Controlo de risco abrangente: a estratégia de stop-loss baseada em percentagem permite um controlo preciso do risco para cada operação
  4. Visualização fácil de usar: anotação clara dos sinais de negociação e dos níveis de controlo de risco nos gráficos

Riscos estratégicos

  1. Sensibilidade do parâmetro: desempenho da estratégia significativamente afetado pela escolha do comprimento da janela rolante e dos limiares
  2. Dependência do ambiente de mercado: pode gerar sinais falsos frequentes em mercados em tendência
  3. Impacto do deslizamento: os preços de execução reais podem desviar-se significativamente dos níveis ideais durante períodos voláteis
  4. Retardo no cálculo: o cálculo em tempo real dos indicadores estatísticos pode provocar um atraso no sinal

Orientações de otimização

  1. Prazos dinâmicos: considerar o ajustamento dos limiares de sinal com base na volatilidade do mercado
  2. Múltiples prazos: introduzir mecanismos de confirmação de sinal em vários prazos
  3. Filtragem da volatilidade: Pausa da negociação ou ajuste das posições durante períodos de volatilidade extrema
  4. Confirmação do sinal: adicionar volume, momento e outros indicadores auxiliares para confirmação do sinal
  5. Gerenciamento de posições: aplicar o dimensionamento dinâmico das posições com base na volatilidade

Resumo

Esta é uma estratégia de negociação quantitativa construída sobre bases estatísticas sólidas, capturando oportunidades de volatilidade de preços através de retornos logarítmicos padronizados. Os principais pontos fortes da estratégia estão em sua adaptabilidade e controle de risco abrangente, embora ainda haja espaço para otimização na seleção de parâmetros e adaptação ao ambiente de mercado. Através da introdução de limiares dinâmicos e mecanismos de confirmação de sinais multidimensionais, a estabilidade e confiabilidade da estratégia podem ser ainda melhoradas.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Jalambi Paul model", overlay=true)

// Define the length for the rolling window
window = input.int(50, title="Window Length", minval=1)
threshold = 2.0 // Fixed threshold value
risk_percentage = input.float(1.0, title="Risk Percentage per Trade", step=0.1) / 100

// Calculate the logarithmic returns
log_return = math.log(close / close[1])

// Calculate the rolling mean and standard deviation
rolling_mean = ta.sma(log_return, window)
rolling_std = ta.stdev(log_return, window)

// Calculate the Shiryaev-Zhou Index (SZI)
SZI = (log_return - rolling_mean) / rolling_std

// Generate signals based on the fixed threshold
long_signal = SZI < -threshold
short_signal = SZI > threshold

// Plot the signals on the main chart (overlay on price)
plotshape(series=long_signal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY", offset=-1)
plotshape(series=short_signal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL", offset=-1)

// Strategy logic: Buy when SZI crosses below the negative threshold, Sell when it crosses above the positive threshold
if (long_signal)
    strategy.entry("Buy", strategy.long, comment="Long Entry")
    
if (short_signal)
    strategy.entry("Sell", strategy.short, comment="Short Entry")

// Calculate the stop loss and take profit levels based on the percentage of risk
stop_loss_pct = input.float(2.0, title="Stop Loss (%)") / 100
take_profit_pct = input.float(4.0, title="Take Profit (%)") / 100

// Set the stop loss and take profit levels based on the entry price
strategy.exit("Take Profit / Stop Loss", "Buy", stop=close * (1 - stop_loss_pct), limit=close * (1 + take_profit_pct))
strategy.exit("Take Profit / Stop Loss", "Sell", stop=close * (1 + stop_loss_pct), limit=close * (1 - take_profit_pct))

// Plot the stop loss and take profit levels for visualization (optional)
plot(stop_loss_pct != 0 ? close * (1 - stop_loss_pct) : na, color=color.red, linewidth=1, title="Stop Loss Level")
plot(take_profit_pct != 0 ? close * (1 + take_profit_pct) : na, color=color.green, linewidth=1, title="Take Profit Level")


Relacionados

Mais.