Como estimar a probability of informed trading (PIN) no R? - Contabilidade & Métodos Quantitativos

Contabilidade & Métodos Quantitativos

Contabilidade & Métodos Quantitativos

segunda-feira, 30 de outubro de 2017

Como estimar a probability of informed trading (PIN) no R?

No vídeo de hoje, Glauco Pordeus nos mostra como estimar a probabidade de negociação com informações privadas (probability of informed trading - PIN) usando o R.

Algumas semanas atrás nós apresentamos aqui no blog uma aplicação prática do uso da PIN, questionando se haviam evidências de negociações anormais com as ações da JBS próximo da data do vazamento da delação. Quem não leu, recomendo que leia clicando aqui, antes de assistir ao vídeo. Após aquele post, nós fizemos um teste adicional, para confirmar a nossa hipótese.

Vamos ao vídeo! O script está no final do post.




Para saber como coletar os dados, assista ao seguinte vídeo sobre a coleta clicando aqui.

SCRIPT USADO NO VÍDEO:

####### INTRODUÇÃO ####

    # Date: 2017-08-21
    # Author: Duygu Celik and Murat Tinic
    # Maintainer: Murat Tinic <tinic@bilkent.edu.tr>

# Market microstructure theory Livro por Maureen O'Hara 1995

# Estimates the probability of informed trading (PIN) initially introduced by Easley et. al. (1996)
# Contribution of the package is that it uses likelihood factorizations of Easley et. al. (2010) and Lin and Ke (2011)
# Moreover, the package uses different estimation algorithms. 
# Specifically, the grid-search algorithm proposed by Yan and Zhang (2012)
# hierarchical agglomerative clustering approach proposed by Gan et. al. (2015)
# and later extended by Ersan and Alici (2016)

# APLICAÇÕES NACIONAIS

# MARTINS, O. S.; PAULO, E. ; ALBUQUERQUE, P. H. M.
# 2013 Negociação com informação privilegiada e retorno das ações na BM&FBOVESPA
      # http://rae.fgv.br/rae/vol53-num4-2013/negociacao-com-informacao-privilegiada-retorno-acoes-na-bmfbovespa

# GIRÃO, L. F. A. P.; MARTINS, Orleans S. ; PAULO, EDILSON
# 2014 Avaliação de empresas e probabilidade de negociação com informação privilegiada no mercado de capitais.
      # http://www.scielo.br/pdf/rausp/v49n3/a03v49n3.pdf
# 2016 Preço da Ação, Disclosure e Assimetria de Informação: o Caso OGX
      # http://proxy.furb.br/ojs/index.php/universocontabil/article/download/4832/pdf_1 

# DISSERTAÇÃO LEONARDO MELO BOSQUE
# 2016 Estimação da probabilidade de negociação privilegiada por meio de inferência bayesiana.
      # http://repositorio.unb.br/handle/10482/23138




####### COLETA DE DADOS #######
library(GetHFData)
library(plyr)
library(InfoTrad)

#### COLETA DOS DADOS

getwd ()
setwd ("c:/Users/glauc/Desktop")

first.time <- '09:00:00'
last.time <- '18:00:00'
type.output <- 'agg'
agg.diff <- '1 hour'
type.market <- 'equity'
first.date <- '2017-07-20'
last.date <- '2017-10-20'

base1 <- ghfd_get_HF_data( type.market = type.market, first.date = first.date, 
                           last.date = last.date, first.time = first.time, 
                           last.time = last.time, type.output = type.output, 
                           agg.diff = agg.diff)

#### TRATAMENTO DOS DADOS

filter1 <- data.frame(base1[,1],base1[,2],base1[,5],base1[,9],base1[,10],base1[,11],base1[,12])
names(filter1) <- c('ticker','date','price','quant','volfinc','buy','sell')

ticker1 <- subset(filter1, ticker=='JBSS3')
ticker1.1 <- ddply(ticker1,.(date),summarize,buy=sum(buy),sell=sum(sell))
ticker1.2 <- data.frame(ticker1.1[,2],ticker1.1[,3])
names(ticker1.2) <- c('buy','sell')

ticker2 <- subset(filter1, ticker=='PETR4')
ticker2.1 <- ddply(ticker2,.(date),summarize,buy=sum(buy),sell=sum(sell))
ticker2.2 <- data.frame(ticker2.1[,2],ticker2.1[,3])
names(ticker2.2) <- c('buy','sell')

####### EXECUÇÃO DOS MODELOS ####

# par0 = (alpha, delta, mu, epsilon_b, epsilon_s)
par0 = c(0.5,0.5,0,mean(ticker1.2[,1]),mean(ticker1.2[,2]))

LK_out = LK(ticker1.2)
model = optim(par0, LK_out, gr = NULL, method = c("Nelder-Mead"), hessian = FALSE)
alpha1 <- model$par[1] # Estimate for alpha
delta1 <- model$par[2] # Estimate for delta
mu1 <- model$par[3] # Estimate for mu
eb1 <- model$par[4] # Estimate for eb
es1 <- model$par[5] # Estimate for es
pin1 <- (model$par[1]*model$par[3])/((model$par[1]*model$par[3])+model$par[4]+model$par[5])


# Gan et. al. (2015)
result1 = GAN(ticker1.2)
print(result1)
pin1 <- result1$PIN
alpha1 <- result1$alpha
delta1 <- result1$delta
mu1 <- result1$mu
eb1 <- result1$epsilon_b
es1 <- result1$epsilon_s

result2 = GAN(ticker2.2)
print(result2)
pin2 <- result2$PIN
alpha2 <- result2$alpha
delta2 <- result2$delta
mu2 <- result2$mu
eb2 <- result2$epsilon_b
es2 <- result2$epsilon_s


resumo = matrix(nrow = 2, ncol = 6)
resumo[1,1] = pin1
resumo[1,2] = alpha1
resumo[1,3] = delta1
resumo[1,4] = mu1
resumo[1,5] = eb1
resumo[1,6] = es1
resumo[2,1] = pin2
resumo[2,2] = alpha2
resumo[2,3] = delta2
resumo[2,4] = mu2
resumo[2,5] = eb2
resumo[2,6] = es2
resumo <- data.frame(resumo)
colnames (resumo) = c("PIN", "Alpha", "Delta","Mu", "Eb", "Es")
rownames(resumo) = c("JBSS3","PETR4")
resumo

setwd ("c:/Users/glauc/Desktop")
write.table(resumo, file = "test.txt", sep = ";" )


Nenhum comentário:

Postar um comentário

Translate