Estratégia de negociação quantitativa multifatorial VWAP-MACD-RSI

VWAP MACD RSI TP SL
Data de criação: 2024-11-27 16:11:00 última modificação: 2024-11-27 16:11:00
cópia: 1 Cliques: 771
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa multifatorial VWAP-MACD-RSI

Visão geral

Trata-se de uma estratégia de negociação quantitativa baseada nos três indicadores técnicos VWAP, MACD e RSI. A estratégia identifica as oportunidades de compra e venda no mercado através da combinação de múltiplos sinais de transação média ponderada (VWAP), média móvel convergente e dispersa (MACD) e indicador de fraqueza relativa (RSI). A estratégia usa um mecanismo de parada percentual para gerenciar o risco e usa a estratégia de gerenciamento de posição para otimizar a utilização de fundos.

Princípio da estratégia

A lógica central da estratégia baseia-se na análise integrada de três indicadores principais:

  1. Usar o VWAP como a principal linha de referência de tendência, sendo considerado um potencial sinal de mudança de tendência quando o preço ultrapassa o VWAP
  2. O gráfico MACD é usado para confirmar a força e a direção da tendência, com valores positivos representando uma tendência ascendente e valores negativos representando uma tendência descendente
  3. O RSI é usado para identificar se o mercado está sobrecomprado ou sobrevendido, evitando entrar em situações extremas

As condições de compra devem ser preenchidas:

  • Preços sobem mais do que o VWAP
  • MACD em coluna positiva
  • O RSI não atingiu o nível de sobrecompra

As condições de venda devem ser:

  • Preço do VWAP despenca
  • O MACD é negativo.
  • RSI não alcançou o nível de oversold

Vantagens estratégicas

  1. Verificação cruzada de múltiplos indicadores técnicos para aumentar a confiabilidade do sinal
  2. Introdução de fatores de volume de transação através do VWAP para aumentar a análise de profundidade do mercado
  3. O RSI pode ser usado para filtrar a tendência extrema e reduzir o risco de false breakouts.
  4. Percentagem de stop loss, adaptando-se dinamicamente a diferentes intervalos de preços
  5. Position sizing baseado na proporção do patrimônio líquido da conta, que permite a gestão de posições dinâmicas
  6. A lógica da estratégia é clara, fácil de entender e manter.

Risco estratégico

  1. Mercado turbulento pode gerar transações frequentes e aumentar custos de transação
  2. Indicadores múltiplos podem causar atraso no sinal e afetar o tempo de entrada
  3. A paralisação por percentual fixo pode não ser adequada para todos os cenários de mercado
  4. Aumento do risco em períodos de alta volatilidade, sem levar em conta a variação da taxa de flutuação do mercado
  5. Falta de filtragem de intensidade de tendência, podendo gerar excesso de sinais em mercados de tendência fraca

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

  1. Introdução do ATR para ajustar a amplitude de stop loss de forma dinâmica para melhor se adaptar às flutuações do mercado
  2. Adição de filtros de intensidade de tendência para reduzir os falsos sinais de um mercado em choque
  3. Optimizar a configuração do ciclo VWAP para considerar combinações VWAP de múltiplos períodos
  4. Introdução de um mecanismo de confirmação de entrega para aumentar a confiabilidade do sinal de ruptura
  5. Considere adicionar filtros de tempo para evitar transações em períodos de baixa liquidez
  6. Mecanismos de dimensionamento de posições com ajustes dinâmicos de acordo com as condições do mercado

Resumir

A estratégia utiliza três indicadores técnicos clássicos, VWAP, MACD e RSI, para construir um sistema de negociação relativamente completo. A estratégia é projetada com foco na confiabilidade do sinal e na gestão de risco, para melhorar a qualidade da negociação através da verificação cruzada de múltiplos indicadores. Embora existam alguns aspectos que precisam de otimização, a estrutura geral é razoável e tem uma boa escalabilidade.

Código-fonte da estratégia
/*backtest
start: 2024-10-27 00:00:00
end: 2024-11-26 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("pbs", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input for take-profit and stop-loss
takeProfitPercent = input.float(0.5, title="Take Profit (%)", step=0.1) / 100
stopLossPercent = input.float(0.25, title="Stop Loss (%)", step=0.1) / 100


macdFastLength = input.int(12, title="MACD Fast Length")
macdSlowLength = input.int(26, title="MACD Slow Length")
macdSignalLength = input.int(9, title="MACD Signal Length")


rsiLength = input.int(14, title="RSI Length")
rsiOverbought = input.int(70, title="RSI Overbought Level", step=1)
rsiOversold = input.int(30, title="RSI Oversold Level", step=1)


vwap = ta.vwap(close)


[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)
macdHistogram = macdLine - signalLine

rsi = ta.rsi(close, rsiLength)


plot(vwap, color=color.purple, linewidth=2, title="VWAP")
hline(rsiOverbought, "Overbought", color=color.red, linestyle=hline.style_dotted)
hline(rsiOversold, "Oversold", color=color.green, linestyle=hline.style_dotted)
plot(macdLine, color=color.blue, title="MACD Line")
plot(signalLine, color=color.orange, title="Signal Line")

// Buy Condition
longCondition = ta.crossover(close, vwap) and macdHistogram > 0 and rsi < rsiOverbought

// Sell Condition
shortCondition = ta.crossunder(close, vwap) and macdHistogram < 0 and rsi > rsiOversold

// Execute trades based on conditions
if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Long", limit=close * (1 + takeProfitPercent), stop=close * (1 - stopLossPercent))

if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Take Profit/Stop Loss", "Short", limit=close * (1 - takeProfitPercent), stop=close * (1 + stopLossPercent))

// Plot Buy/Sell Signals
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")