Estratégias de arbitragem estatística: pairs trading


Allan Quadros

Founder - Quantl Trading | Ph.D. Candidate - K-State

Arbitragem estatística


  • lucrar com discrepâncias momentâneas entre os preços de dois ou mais ativos/derivativos

  • tanto normalidade quanto discrepâncias são identificadas por meio de técnicas estatísticas

  • área fértil para modelagem matemática e computacionalmente intensiva

  • pode ser bastante útil para formar portfólios (quando aplicada a vários ativos)

Histórico

  • Nunzio Tartaglia/Gerry Bamberger - Morgan Stanley, 1980’s

Pairs Trading


  • Stat Arb aplicada a apenas dois ativos/derivativos


  • Pode se caracterizar por estratégias do tipo compra/compra, venda/venda, ou compra/venda (Long & Short)

Long & Short


Estratégia Long & Short


  • Encontrar pares cujos ativos caminham juntos

  • Identificar momentos de discrepâncias

  • Estabelecer regra de trading

  • Técnicas: distância, correlação, cointegração (reversão a média), cópulas, etc

Estratégia Long & Short - exemplo




Overview das principais estratégias

L&S - Distância/Correlação

  • Seleção de Pares:

    • menor distância \(SSD = \sum_{i=1}^{n}(P_{A_i} - P_{B_i})^2\); ou
    • maiores correlações
  • Trading:

    • thresholds para \(\text{spread} = ln(P_A) - h \times ln(P_B)\); ou
    • thresholds para estacionariedade do ratio

Distância/Correlação - problemas

Long & Short - Cointegração



Testar se há estacionariedade nos resíduos de um modelo linear formado por duas séries que, sozinhas, são não-estacionárias


Isso faz com que tenhamos um comportamento de reversão a média para a relaçao dos dois ativos

Cointegração - estrutura


  • Seleção de Pares:

    • testes de cointegração (Engle-Granger, Johansen, Phillips-Ouliaris)
  • Trading:

    • thresholds para os resíduos estandardizados
  • Balanceamento:

    • \(\hat \beta_1\) do modelo linear \(\hat Y = \hat \beta_0 + \hat \beta_1 X\)

Exemplo - Cointegração

Problemas - Cointegração


  • estimar o \(\beta_1\) (alternativa: Kalman filter)

  • desbalanceamento financeiro dos lotes

  • alto número de falsos positivos nos testes quando empregando data mining

Cópulas

  • Assim como CDFs estão realcionadas às pdfs no caso univariado, cópulas estão relacionadas com as pdfs para dados multivariados
  • Nos permite modelar a interdependência de dois (ou mais) ativos calculando a probabilidade de observar um determinado retorno para o ativo Y quando os retornos do ativo X estão em determinado patamar e vice-versa

  • \(C(y,x) = Pr[F(Y) \le F(y), F(X) \le F(x)]\)

  • É bem flexível no sentido de que podemos aproximar comportamentos bastante específicos do mercado financeiro, ex: a força da correlação entre dois ativos aumenta em períodos de crise ou de alta

Cópulas - exemplo

Problemas - Cópulas


  • não incorpora a variável tempo

  • sensibilidade à especificação da cópula

  • pode ser sensível a outliers




Comparativo de estratégias

Comparação 1

Huck, N. & Afawubo, K. (2015) - Pairs trading and selection methods: Is cointegration superior? LINK

Comparação 2

Ma, B. and Ślepaczuk, R. (2022) - The profitability of pairs trading strategies on Hong-Kong stock market: distance, cointegration, and correlation methods

LINK

Comparação 3



Wu, Jing (2018) - Pairs Trading Copula vs Cointegration
method Transactions Profit Sharpe_Ratio Drawdown
Copula 498 7.057% 0.098% 24.0%
Cointegration 126 4.506% 0.179% 3.9%

LINK

Os resultados são confiáveis?

Opinião:

  • ~98% dos backtests que você vai encontrar (em papers ou posts) contém viés ou equívocos, ou são incompletos

Os papers no tema não especificam, nem disponibilizam como os backtests foram feitos

Nem tudo são flores …

  • O mundo real é muito complexo para caber em um modelo matemático

  • Experiência conta muito

  • Técnicas isoladas, ainda que sofisticadas, nunca serão bala-de-prata para gerar excesso de retornos

  • Riscos inerentes à estratégia: riscos de mercado, assimetria e liquidez

Um incentivo para quem quer iniciar

# carregando bibliotecas necessárias
library(quantmod) # para obtencao dos dados diarios
library(egcm) # para o teste de cointegracao (Phillips-Ouliaris)
# definindo tickers do estudo
ticker1 = 'BBDC4.SA'
ticker2 = 'EZTC3.SA'
# obtendo dados de 200 periodos (recomendo testar com menos)
ativo1 <- quantmod::Ad(quantmod::getSymbols(ticker1,src='yahoo',
                                      auto.assign=FALSE,
                                      from=Sys.Date()-200))
ativo2 <- quantmod::Ad(quantmod::getSymbols(ticker1,src='yahoo',
                                      auto.assign=FALSE,
                                      from=Sys.Date()-200))
# juntando e eliminando missing values
df <- merge(ativo1, ativo2)
df <- na.omit(df)

# testando cointegracao

result <- egcm::egcm(X = df[,1], Y = df[,2], p.value = 0.01) 
# OBS: o que o paxcote/funcao egcm chama de p.value, eh na verdade o alpha do 
# ... teste de cointegracao

# obtendo os parametros do modelo linear resultante
pvalue <- result$r.p
beta_coef <- result$beta
alpha_coef <- result$alpha
model_residuals <- as.vector(result$residuals)
coint_res <- egcm::is.cointegrated(result)

half_life <- log(0.5) / log(result$rho) # nro de dias para retornar metade
#... do caminho ao se afastar da media (dah uma ideia de qtos dias vc ficarah 
#... em uma operacao caso de entrada naquele par)
# o rho seria a raiz da serie temp. ==> para pares cointegrados sempre
# ... esperamos que seja < 1, por isso que a half life sempre eh positiva 
# ... para os pares cointegrados

# plotar os resíduos para verificar a estacionariedade e estabelecer
# ... possíveis thresholds de entrada
df <- cbind(df, model_residuals)
plot(df[,3])




Obrigado!

Contatos


Allan Quadros


contato@quantltrading.com.br | quadros@ksu.edu


quantltrading

@quantltrading