Estratégia de combinação de otimização da tendência de impulso

Autora:ChaoZhang, Data: 2024-02-06 15:11:57
Tags:

img

Resumo

A estratégia de combinação de otimização de tendência de momento é uma estratégia quantitativa de médio a longo prazo que combina fatores de momento e tendência. Ela gera sinais de compra e venda usando uma combinação de médias móveis exponenciais, médias móveis, volume e indicadores de inclinação. A estratégia é otimizada para negociação T + 1 e é apenas adequada para posições longas. As otimizações também são aplicáveis aos mercados de ações internacionais.

Estratégia lógica

A estratégia usa uma média móvel simples de 6 dias e uma média móvel simples de 35 dias para definir duas médias móveis. A linha de sinal de compra é definida como uma média móvel exponencial de 2 dias e a linha de sinal de venda é calculada com base na inclinação dos últimos 8 preços de fechamento. Além disso, uma média móvel exponencial de volume de 20 dias é definida como o indicador de volume. Para filtrar algum ruído, a estratégia também introduz julgamento de inclinação semanal para a direção do mercado.

Quando o preço de fechamento é superior à média móvel de 35 dias, o volume de negociação é maior que o volume médio de negociação de 20 dias, e o cheque semanal mostra um mercado alcista, uma cruz de ouro da parte inferior desencadeia um sinal de compra.

Para a gestão do risco, a estratégia introduz um mecanismo dinâmico de ajustamento da posição. A posição real é calculada com base no património líquido da conta, no rácio de posição máxima, no ATR e no fator de risco.

Análise das vantagens

A estratégia combina fatores de ímpeto e filtragem de tendências, que podem identificar efetivamente as direções de médio a longo prazo. Ao mesmo tempo, a filtragem de ruído também está em vigor para evitar falsos sinais em mercados voláteis. Além disso, a introdução de mecanismos de gestão de risco também permite um controle adequado sobre os drawdowns máximos, garantindo assim a robustez da estratégia.

A partir dos resultados dos backtests, o retorno global da estratégia atingiu 128,86%, com um alfa muito significativo.

Análise de riscos

Embora a própria estratégia tenha sido otimizada para os mecanismos de gestão de riscos, ainda existem alguns riscos que necessitam de atenção.

  1. Risco de retração. A partir da maior perda individual de 222.021,46 yuans, pode-se ver que a amplitude de retração da estratégia é grande. Isso está relacionado ao mecanismo de gerenciamento de posição imperfeito.

  2. Risco de estabilidade do sinal: o sinal de estratégia pode ser afectado por factores especiais de acções individuais, resultando em situações de falso sinal.

  3. Risco de alteração do ambiente de mercado: se o ambiente do mercado macro mudar significativamente, os parâmetros da estratégia poderão ter de ser ajustados para continuar a manter o efeito.

Orientações de otimização

De acordo com a análise de risco acima referida, continua a existir a necessidade e a possibilidade de otimizar esta estratégia.

  1. A partir da perda máxima, o mecanismo de gestão de posições pode ser ainda mais otimizado através da introdução de um módulo de stop loss para controlar a magnitude das perdas individuais.

  2. Considerar a adição de mais indicadores de filtragem para identificar alguns fenômenos especiais das existências e reduzir a probabilidade de falsos sinais.

  3. Continuar a fazer testes retrospectivos e a verificar os parâmetros da estratégia, e fazer ajustes oportunos dos parâmetros com base nas alterações nas condições do mercado.

Resumo

A Estratégia de Combinação de Optimização de Tendência de Momento é uma estratégia de negociação quantitativa de médio a longo prazo que combina fatores de momento e filtragem de tendência e é especialmente otimizada para negociação T + 1. A julgar pelos indicadores de backtest, o efeito geral da estratégia é significativo, com um alfa muito surpreendente. Mas os riscos potenciais também devem ser preocupados e os parâmetros devem ser ajustados a tempo de acordo com as mudanças nas condições do mercado. A estratégia pode trazer alfa adicional para os traders quantitativos e vale a pena mais pesquisa e verificação.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © fzj20020403

////@version=5
//@version=5
strategy("Optimized Zhaocaijinbao", overlay=true, margin_long=100, margin_short=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Define two moving averages
ma6 = ta.sma(close, 6)
ma35 = ta.sma(close, 35)

// Define buy and sell signal lines
buyLine = ta.ema(close, 2)
sellSlope = (close - close[8]) / 8
sellLine = sellSlope * 1 + ta.sma(close, 8)

// Define volume indicator
volumeEMA = ta.ema(volume, 20)

// Define weekly slope factor
weeklyMa = ta.sma(close, 50)
weeklySlope = (weeklyMa - weeklyMa[4]) / 4 > 0

// Generate buy and sell signals
buySignal = ta.crossover(buyLine, sellLine) and close > ma35 and volume > volumeEMA and weeklySlope
sellSignal = ta.crossunder(sellLine, buyLine)

// Define dynamic position sizing factor
equity = strategy.equity
maxPositionSize = equity * input.float(title='Max Position Size (%)', defval=0.01, minval=0.001, maxval=0.5, step=0.001)
riskFactor = input.float(title='Risk Factor', defval=2.0, minval=0.1, maxval=10.0, step=0.1)
atr = ta.atr(14)
positionSize = maxPositionSize * riskFactor / atr

// Define position status
var inPosition = false

// Define buy and sell conditions
buyCondition = buySignal and not inPosition
sellCondition = sellSignal and inPosition

// Perform buy and sell operations
if (buyCondition)
    strategy.entry("Long", strategy.long, qty=positionSize)
    inPosition := true
if (sellCondition)
    strategy.close("Long")
    inPosition := false

// Draw vertical line markers for buy and sell signals
plotshape(buyCondition, style=shape.arrowdown, location=location.belowbar, color=color.green, size=size.small)
plotshape(sellCondition, style=shape.arrowup, location=location.abovebar, color=color.red, size=size.small)

// Draw two moving averages
plot(ma6, color=color.blue)
plot(ma35, color=color.orange)

// Draw volume indicator line
plot(volumeEMA, color=color.yellow)

// Define stop loss and take profit
stopLoss = strategy.position_avg_price * 0.5
takeProfit = strategy.position_avg_price * 1.25

if inPosition
    strategy.exit("Long Stop Loss", "Long", stop=stopLoss)
    strategy.exit("Long Take Profit", "Long", limit=takeProfit)



Mais.