JiaYiBing Tendência Quantitativa Estratégia de Negociação

Autora:ChaoZhang, Data: 2024-03-08 15:40:05
Tags:

img

Resumo

A Estratégia de Negociação de Momentum de Tendência Quantitativa JiaYiBing é uma estratégia de negociação quantitativa longa e curta que combina rastreamento de tendência, indicadores de momento e canais de Bollinger Bands. A estratégia usa o cruzamento de médias móveis rápidas e lentas para determinar a direção da tendência e confirma sinais de entrada com base em canais de Bollinger Bands e indicadores de momento. A estratégia também inclui medidas de controle de risco, como take profit, stop loss, trailing stop e dimensionamento de posição.

Princípios de estratégia

O princípio central desta estratégia é capturar oportunidades de mercado alavancando tendências de preços e efeitos de impulso. Especificamente, a estratégia usa duas médias móveis com períodos diferentes (rápidas e lentas) para determinar a direção da tendência de preço. Quando a média móvel rápida cruza acima da média móvel lenta, ela indica uma tendência ascendente e a estratégia gera um sinal longo; inversamente, quando a média móvel rápida cruza abaixo da média móvel lenta, ela indica uma tendência descendente e a estratégia gera um sinal curto.

Para confirmar ainda mais a tendência e o tempo de entrada, a estratégia também incorpora Bandas de Bollinger e indicadores de momento. As Bandas de Bollinger consistem em três linhas: a linha do meio é a média móvel, enquanto as bandas superior e inferior são um certo número de desvios padrão acima e abaixo da linha do meio. Quando o preço quebra acima da Banda de Bollinger superior, ele indica um forte impulso ascendente e a estratégia vai longo; quando o preço quebra abaixo da Banda de Bollinger inferior, ele indica um forte impulso descendente e a estratégia vai curto.

Além disso, a estratégia introduz também um indicador de dinâmica, que mede a velocidade das alterações de preços comparando o preço atual com o preço de um determinado período atrás.

Em termos de dimensionamento da posição, a estratégia permite definir o tamanho da posição com base no capital da conta e na preferência de risco.

No geral, a Estratégia de Negociação de Momentum de Tendência Quantitativa da JiaYiBing visa captar oportunidades de mercado em tendência, controlando rigorosamente o risco através de múltiplas dimensões, como rastreamento de tendências, confirmação de momentum e gestão de riscos, a fim de alcançar retornos estáveis do investimento.

Análise das vantagens

  1. A estratégia utiliza o cruzamento de médias móveis rápidas e lentas para capturar oportunidades de preços de tendência, permitindo que ela seja longa em tendências de alta e curta em tendências de baixa, adaptando-se a diferentes condições de mercado.

  2. Confirmação do momento: a introdução do indicador de momento como uma confirmação secundária da tendência ajuda a filtrar sinais falsos e melhorar a qualidade da entrada.

  3. Bollinger Bands Assisted Decision-Making: Bollinger Bands podem refletir a faixa de volatilidade de preços, e breakouts de Bollinger Bands podem ser vistos como sinais de aceleração da tendência ou flutuações anormais de preços, fornecendo uma referência para a entrada.

  4. Dimensão das posições: A estratégia utiliza um método de dimensionamento das posições baseado numa percentagem do capital da conta e num limite máximo, permitindo um controlo flexível do capital empregado em cada transacção, tanto utilizando plenamente os fundos como evitando uma exposição excessiva ao risco.

  5. Tomar lucro e parar perda: os conjuntos de estratégia tomam lucro, stop loss e stop loss, que podem proteger os lucros quando o preço se move na direção esperada e cortar decisivamente as perdas quando o preço se inverte, controlando efetivamente a perda máxima de cada negociação.

  6. Optimização de múltiplos parâmetros: a estratégia inclui múltiplos parâmetros ajustáveis, tais como períodos de média móvel, parâmetros de bandas de Bollinger, percentagens de lucro e stop loss, etc., que podem ser otimizados para melhorar a adaptabilidade e robustez da estratégia.

Análise de riscos

  1. Negociação Frequente: A estratégia gera sinais de entrada com base em crossovers de média móvel e breakouts de Bollinger Band. Quando a volatilidade do mercado é alta, ela pode gerar sinais de negociação com frequência, levando a uma frequência excessiva de negociação e aumento dos custos de comissão e slippage.

  2. Sensibilidade de parâmetros: A estratégia inclui múltiplos parâmetros, como períodos de média móvel, períodos de impulso, parâmetros de Bandas de Bollinger, etc. A escolha de diferentes parâmetros pode ter um impacto significativo no desempenho da estratégia.

  3. Reconhecimento de tendências atrasadas: as médias móveis são indicadores atrasados, especialmente quando o período da média móvel é longo, a velocidade de identificação de inversões de tendência será mais lenta e o melhor momento de entrada pode ser perdido.

  4. Risco de Stop Loss: Embora a estratégia defina medidas de stop loss, em condições de mercado extremas (como brechas rápidas), o preço pode cruzar diretamente o nível de stop loss, resultando em perdas reais superiores às expectativas.

  5. Risco de posição concentrado: se a estratégia gerar continuamente sinais na mesma direção durante um determinado período, pode conduzir a uma concentração excessiva de posições numa só direção, o que implica um risco de posição maior.

  6. Risco de liquidez: o desempenho da estratégia em backtesting e negociação ao vivo pode ser afetado pela liquidez do mercado, especialmente quando se trata de fundos de grande porte, que podem enfrentar problemas de deslizamento e volume de negociação insuficiente.

Orientações de otimização

  1. Introduzir mais indicadores técnicos: com base nas médias móveis atuais, no momento e nas bandas de Bollinger, podem ser introduzidos mais indicadores técnicos, como o RSI e o MACD, para melhorar a confiabilidade dos sinais através da confirmação de múltiplos indicadores.

  2. Otimizar os mecanismos de entrada e saída: podem ser introduzidas mais condições no julgamento da entrada e saída, tais como exigir um certo volume de negociação antes das rupturas de preços, utilizar o fechamento de posição por etapas ou a retirada de lucro para as saídas, para aumentar a flexibilidade e a rentabilidade da estratégia.

  3. Ajuste dinâmico de parâmetros: para períodos de média móvel, períodos de impulso, parâmetros de Bollinger Bands, etc., pode ser concebido um conjunto de mecanismos adaptativos de parâmetros para ajustar dinamicamente os valores dos parâmetros com base em diferentes estados de mercado e níveis de volatilidade, melhorando a adaptabilidade da estratégia.

  4. Melhorar o dimensionamento das posições: com base no dimensionamento das posições atuais, podem ser introduzidos métodos de gestão de fundos mais avançados, como o critério Kelly, o rácio fixo, o capital dinâmico, etc., para melhorar os retornos e os riscos do saldo.

  5. Combinar com análise fundamental: estratégias de análise técnica pura podem enfrentar o risco de ineficiência ou falha do mercado. Se alguns fatores fundamentais, como dados macroeconômicos e tendências do setor, podem ser combinados para filtrar e confirmar sinais técnicos, pode melhorar o desempenho da estratégia.

  6. Melhorar a consistência do backtesting e da negociação ao vivo: O desempenho da estratégia no backtesting e na negociação ao vivo pode diferir. É necessário se concentrar na qualidade de execução do backtesting e da negociação ao vivo, incluindo fatores como preço de execução, deslizamento e latência, para garantir a consistência do desempenho ao vivo com os resultados do backtesting.

Resumo

A Estratégia de Negociação de Momentum de Tendência Quantitativa JiaYiBing é uma estratégia de negociação quantitativa que integra vários métodos de análise técnica.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('甲易炳', overlay=true)

// Parameters
trendPeriod = input(50, 'Trend Period')
momentumPeriod = input(14, 'Momentum Period')
bbPeriod = input(20, 'Bollinger Bands Period')
bbDeviation = input(2, 'Bollinger Bands Deviation')
fastMALen = input(23, 'Fast SMA Length')
slowMALen = input(50, 'Slow SMA Length')
longTakeProfitPerc = input.float(0.5, 'Long Take Profit %', minval=0.05, step=0.05) * 0.01
shortTakeProfitPerc = input.float(0.5, 'Short Take Profit %', minval=0.05, step=0.05) * 0.01
stopLossPerc = input.float(0.5, 'Stop Loss %', minval=0.05, step=0.05) * 0.01
enableTrailing = input.bool(true, 'Enable Trailing')
trailingTakeProfitPerc = input.float(0.01, 'Trailing Take Profit %', minval=0.01, maxval=100, step=0.01) * 0.01
trailingStopLossPerc = input.float(0.5, 'Trailing Stop Loss %', minval=0.05, step=0.05) * 0.01
qty_percent = input.int(20, 'Position Size %', step=1)
qty_cap = input.int(10000, 'Max Position Size', step=1000)
beast_mode = input.bool(false, 'Beast Mode')
set_cap = input.bool(true, 'Cap Position Size')
strategy.initial_capital = 50000
// Calculate position size
qty1 = (strategy.initial_capital + strategy.netprofit) * qty_percent / 10 / close
qty = (set_cap and qty1 > qty_cap) ? qty_cap : qty1

// Calculate moving averages
fastMA = ta.sma(close, fastMALen)
slowMA = ta.sma(close, slowMALen)

// Bollinger Bands
[upperBB, middleBB, lowerBB] = ta.bb(close, bbPeriod, bbDeviation)

// Entry conditions
buySignal = ta.crossover(close, fastMA) and close > upperBB
sellSignal = ta.crossunder(close, fastMA) and close < lowerBB

// Rampage mode entry conditions
if beast_mode
    buySignal := buySignal and fastMA > fastMA[2]
    sellSignal := sellSignal and fastMA < fastMA[2]

// Active positions
longIsActive = buySignal or strategy.position_size > 0
shortIsActive = sellSignal or strategy.position_size < 0

// Declare take profit and stop loss variables
var float longTakeProfitPrice = na
var float shortTakeProfitPrice = na

// Take profit and stop loss calculation
if longIsActive
    if buySignal and not (strategy.position_size > 0)
        longTakeProfitPrice := close * (1 + longTakeProfitPerc)
    else
        longTakeProfitPrice := nz(longTakeProfitPrice[1], close * (1 + longTakeProfitPerc))
if shortIsActive
    if sellSignal and not (strategy.position_size < 0)
        shortTakeProfitPrice := close * (1 - shortTakeProfitPerc)
    else
        shortTakeProfitPrice := nz(shortTakeProfitPrice[1], close * (1 - shortTakeProfitPerc))

longTrailingTakeProfitStepTicks = longTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
shortTrailingTakeProfitStepTicks = shortTakeProfitPrice * trailingTakeProfitPerc / syminfo.mintick
longTrailingStopLossPrice = close * (1 - trailingStopLossPerc)
shortTrailingStopLossPrice = close * (1 + trailingStopLossPerc)

// Entries and exits
if strategy.position_size == 0
    strategy.entry('Long Entry', qty=qty, direction=strategy.long, when=buySignal, alert_message='Long Entry')
    strategy.entry('Short Entry', qty=qty, direction=strategy.short, when=sellSignal, alert_message='Short Entry')
    strategy.exit('Long Take Profit', 'Long Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : longTakeProfitPrice, trail_price=enableTrailing ? longTakeProfitPrice : na, trail_offset=enableTrailing ? longTrailingTakeProfitStepTicks : na, when=longIsActive, alert_message='Long Take Profit')
    strategy.exit('Short Take Profit', 'Short Entry', loss=close * stopLossPerc / syminfo.mintick, limit=enableTrailing ? na : shortTakeProfitPrice, trail_price=enableTrailing ? shortTakeProfitPrice : na, trail_offset=enableTrailing ? shortTrailingTakeProfitStepTicks : na, when=shortIsActive, alert_message='Short Take Profit')
else
    if longIsActive
        strategy.exit('Long Stop Loss', 'Long Entry', stop=longTrailingStopLossPrice, when=longIsActive)
    if shortIsActive
        strategy.exit('Short Stop Loss', 'Short Entry', stop=shortTrailingStopLossPrice, when=shortIsActive)

// Plotting
plot(fastMA, 'Fast SMA', color=color.blue, linewidth=1, style=plot.style_line)
plot(slowMA, 'Slow SMA', color=color.orange, linewidth=1, style=plot.style_line)
plot(upperBB, 'Upper BB', color=color.green, linewidth=1, style=plot.style_line)
plot(lowerBB, 'Lower BB', color=color.red, linewidth=1, style=plot.style_line)


Mais.