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.
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.
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.
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.
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.
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.
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.
De acordo com a análise de risco acima referida, continua a existir a necessidade e a possibilidade de otimizar esta estratégia.
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.
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.
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.
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)