12 minutos de leitura

Como pensa um trader quantitativo?

Por Rodrigo Soares Tadewald
Conteúdos do artigo

Desde que comecei no mercado financeiro, há quase 10 anos, nunca acreditei que meu sucesso enquanto trader viria apenas do aprimoramento da minha intuição sobre interpretar informações subjetivas de mercado.

Pode parecer curioso, mas a maioria dos traders atualmente pensa desta forma. Acreditam que precisam estar por dentro de cada nova notícia, tweet ou movimento de preços para operarem com assertividade. Mas, para mim, esta ideia nunca fez muito sentido.

Como sou de Exatas (formado em Engenharia Química), defendo que as estratégias de qualidade devem conter regras bem definidas de entrada e saída de operações, tornando-as testáveis em dados históricos. E é justamente desta forma que a análise quantitativa enxerga o mercado.

Neste artigo quero comparar o viés quantitativo ao tradicional e te explicar na prática como um trader quant pensa. Lembrando que o Quant é adotado por alguns dos maiores fundos de investimento do mundo, como a Renaissance Technologies.

A mentalidade de um trader tradicional

Vamos começar com um exemplo de uma estratégia simples que poderia ser derivada da análise técnica. Esta é a série histórica de negociações de índice futuro (WIN!), com janela temporal de 1m, do dia 28.02.2023.

candlestick graph

Ao analisar o gráfico com atenção, um analista gráfico poderia propor o seguinte padrão no candle das 12:59:

padrão candlestick

Regras observadas:

  1. Ocorrência de um candle de queda muito maior (em termos absolutos) que a média dos candles anteriores.
  2. Volume de negociações muito maior que a média.
  3. Resultado: Preço sobe quando o movimento se acalma.

Diante desta observação, ele pode buscar por outras ocorrências deste padrão. Podemos encontrar outra no mesmo dia, um pouco mais cedo, às 11:06:

análise trading

Existem até algumas ocorrências deste padrão de maneira invertida às 09:06 do mesmo dia.

análise 3 candlestick

Repare que em todas as observações acima o preço se comportou conforme o previsto. Porém, é possível de fato criar uma estratégia robusta o suficiente apenas com análise discricionária visual?

Qual é o problema desta abordagem?

A abordagem quantitativa

Em vez de depender de uma análise subjetiva sobre essa estratégia, um trader quantitativo tomará um caminho diferente. Antes de sair operando a estratégia, ele utilizará programação e modelos matemáticos para avaliá-la contra dados históricos, verificando se o padrão é estatisticamente sólido.

Adicionar esse passo é fundamental. Sem ele, os traders discricionários ficam sujeitos a vieses emocionais, o que pode levar a erros de julgamentos no futuro, quando precisarão descartar suas estratégias ou mesmo tentar salvá-las utilizando stops complexos ou filtros de entrada adicionais.

A abordagem quantitativa, por outro lado, torna todas as estratégias testáveis, permitindo que o trader aprimore o desempenho dela muito antes de colocá-la em prática. Além disso, estratégias não promissoras serão rapidamente descartadas, dando espaço para que outros modelos possam ser criados.

Como um trader pode fazer tudo isso?

Pode parecer uma tarefa difícil, mas vou mostrar como fazê-la em poucas linhas de código utilizando a linguagem Python e dados públicos obtidos do MetaTrader 5 de índice futuro.

O primeiro passo é fazer imports de bibliotecas básicas:

# Para manipulação de dados, vetores e dados temporais
import pandas as pd 
import numpy as np 
from datetime import datetime, timedelta
import os
# Para visualizar os padrões encontrados
from plotly.subplots import make_subplots 
import plotly.express as px

Na sequência, farei a leitura de um arquivo extraído do MetaTrader 5 contendo as cotações minuto a minuto do futuro de índice da B3. Expliquei em um outro artigo sobre como baixar estes dados via API e, para assinantes da trilha trading quantitativo, até como montar sua própria base de dados para simulações utilizando esta API.

local_path = 'market_data/ohlc/TIMEFRAME_M1/WIN$D.csv'
df_data = pd.read_csv(local_path, index_col=0, parse_dates=True)
resultado dataframe

Temos uma base contendo 6 anos de dados, com 696 mil entradas, com preços de abertura, fechamento, máximo e mínimo minuto a minuto.

E, utilizando o Plotly, podemos inclusive criar nossa versão do TradingView e visualizar dados financeiros dentro do Python:

df_cut = df_data[df_data.index.date == datetime(2023, 2, 14).date()]
fig = make_subplots(rows=2, cols=1, shared_xaxes=True, 
               vertical_spacing=0.05, subplot_titles=('OHLC', 'Volume'), 
               row_width=[0.2, 0.7])
fig.add_trace(go.Candlestick(x=df_cut.index,
                open=df_cut['open'],
                high=df_cut['high'],
                low=df_cut['low'],
                close=df_cut['close']), row=1, col=1)
fig.add_trace(go.Bar(x=df_cut.index, y=df_cut['real_volume'], showlegend=False), row=2, col=1)
fig.update_layout(height=700, xaxis_rangeslider_visible=False, template='seaborn')
fig.update_layout(margin=dict(l=30, r=30, t=30, b=30))
fig.show()
ohlc plotly

De posse dos dados, precisamos agora entender como transformar as regras observadas anteriormente em um algoritmo computacional. Vamos observá-la novamente.

candlestick graph
  • Ocorrência de um candle de queda muito maior (em termos absolutos) que a média dos candles anteriores.
  • Volume de negociações muito maior que a média.
  • Resultado: Preço sobe quando o movimento se acalma.

Vamos trabalhar uma a uma.

Para a primeira regra, precisamos desenvolver alguma lógica para entender se um candle é maior do que a média. Uma estratégia muito comum para lidar com este tipo de problema é utilizarmos médias e desvios padrões móveis. Usando elas, conseguimos avaliar qual é a média dos tamanhos dos candles e detectar quando algum volume supera e muito a média (através dos desvios padrões).

Em Python, fazemos isto assim:

w1 = 200 # Janela de avaliação
df_data["rol_std_size"] = df_data["candle_size"].rolling(window=w1).std() # Desvio padrão móvel
df_data["rol_mean_size"].df_data["candle_size"]. rolling(window=w1).mean() # Média móvel
df_data["norm_size"] = (df_data["candle_size"] - df_data["rol_mean_size"]) / df_data["rol_std_size"] # Avaliação do tamanho relativo do candle

Como média e desvio padrão são valores que derivam do estudo de curvas gaussianas de probabilidade, valores do norm_size acima de 2 já podem ser considerados altos.

Para a segunda regra (do volume), utilizaremos uma lógica um pouco diferente. Como o volume não segue uma distribuição gaussiana, optei por calcular o rolling quantile, que irá buscar pelas 10% maiores ocorrências em uma janela de 200 avaliações.

df_data["rol_vol_quant"] = df_data["real_volume"].rolling(w1).quantile(0.9)

E, por fim, precisamos criar uma variável que nos diga se o candle é de alta ou de baixa. Fazemos isso utilizando o np.sign.

df_data["sign"] = np.sign(df_data["close"] - df_data["open"])

Temos agora todos os recursos para buscar nos dados todas ocorrências de nossos padrões.

Estamos atrás de 3 condições:

cond1 = df_data["sign"] == -1
cond2 = df_data["norm_size"] > 2
cond3 = df_data["real_volume"] > df_data["rol_vol_quant"]
dataframe filtered

São 13.302 ocorrências. Como iríamos avaliar todas a olho nu?

ohlc plotly graph

Um dos padrões detectados pelo código. Mercado subiu levemente após a ocorrência do mesmo. Será que funcionará?

E, por fim, podemos avaliar como o mercado se comportou, por exemplo, 10 candles após a ocorrência deste padrão.

df_data["close_fut"] = df_data["close"].shift(-10) - df_data["close"]
px.histogram(df_data[cond1 & cond2 & cond3 & cond4]["close_fut"])
Distribuição normal
Curva de distribuição de resultados após a ocorrência do padrão acima.
resultados filtrados
Média dos valores observados.

E, após tanto esforço, concluímos que nosso padrão ganhou, em média, 3.79 pontos de mercado a cada ocorrência. Apesar de positiva, o valor abaixo nos tira a esperança: um desvio padrão de 237 significa que a variância do resultado é muitíssimo superior à média e não nos permite concluir que esta estratégia é lucrativa. Ou seja: não devemos operar esse modelo.

Como pensa um Trader Quantitativo: conclusão

Em resumo, enquanto o trading discricionário é baseado na intuição e experiência do trader, o trading quantitativo usa algoritmos e modelos matemáticos para tomar decisões de investimento.

Por se tratar de uma abordagem mais objetiva e sistemática, o trading quantitativo nos ajuda a entender o mercado de um ponto de vista mais amplo, minimizando erros de julgamento e melhorando a eficácia de estratégias de negociação.

Dúvidas, sugestões? Deixe seu comentário.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse:
Conteúdos do tutorial