Primeira vez aqui? Seja bem vindo e cheque o FAQ!
x

Como posso implementar o modelo de mercado de ações artificial do Santa Fe Institute em Python?

+1 voto
31 visitas
perguntada Out 27 em Finanças por Gustavo Libório (16 pontos)  

A pergunta refere-se a implementar o modelo tal qual foi feito em Java por Norman Ehrentreich no capítulo 6 de seu livro Agent-Based Modeling: The Santa Fe Institute Artificial Stock Market Model Revisited em Python.

Compartilhe
comentou Out 27 por Stuart Mill (1,434 pontos)  
Muito legal o problema!

1 Resposta

+1 voto
respondida Out 27 por Gustavo Libório (16 pontos)  
editado Out 29 por Gustavo Libório

A minha resposta apresenta minha tentativa na tarefa. É importante, contudo, entender o espírito do modelo e por que ele é tão interessante.

O repositório do github contendo esse código, caso alguém se interesse por revisá-lo e contribuir, está aqui.

O modelo original


A primeira versão do modelo, desenvolvida como parte das pesquisas do Santa Fe Institute para estudar complexidade e outros assuntos, foi apresentada em Palmer et al (1994). A proposta era fazer um modelo baseado em agentes para um mercado de ações, onde indivíduos com comportamento relativamente tradicional negociariam cotas de ações, diferindo na formação de expectativas com relação ao preço futuro.

As expectativas de preço, por outro lado, são elaboradas de uma maneira não convencional. O modelo propõe que existem indicadores de mercado (por exemplo, se o preço superou a média móvel no último período) que podem ser observados pelos agentes e que, se satisfeitos; estabelecem uma expectativa de preço.

Por fim, há um sistema de evolução para escolher quais indicadores devem ser observados e também como deve ser a regra de previsão de cada indivíduo.

Detalhamento do modelo a ser implementado


Agora vamos detalhar o modelo propriamente dito. A ação paga dividendo com base em um processo autoregressivo (Ornstein-Uhlenbeck process):

\[ d_{t+1} = \bar{d} + ρ (d_t − \bar{d}) + \epsilon_{t+1} \]

Cada indivíduo recebe uma ação e \(20000\) unidades de dinheiro. As preferências são iguais e avessas ao risco, dadas por:

\[ U(W_{i,t+1}) = −e^{−λW_{i,t+1}}\]

Além disso, eles enfrentam uma restrição orçamentária. Nessa construção, seguindo Ehrentreich (2008), e sob a hipótese de retornos normalmente distribuídos, a demanda de cada indivíduo será:

\[ \hat{x}_{i,t} = \frac{E_{i,t}[p_{t+1} + d_{t+1}] − p_t(1 + r)}{λσ^2_{t,p+d}} \]

onde \(E_{i,t}[p_{t+1} + d_{t+1}]\) é a expectativa que será formada com base no estado do mercado.

A expectativa de preço é formada a partir de um conjunto de cem regras preditivas que cada agente possui. As regras funcionam de seguinte maneira: cada regra tem uma parte condicional, que informa quais indicadores serão seguidos ou ignorados. Se as condições de uma regra condizem com as do mercado, dizemos que ela está ativa. A imagem abaixo para esclarecer.

A imagem será apresentada aqui.

Além das condições, uma regra também tem uma parte de previsão, que relaciona preço e dividendo passados com a expectativa. Trata-se de uma relação linear do tipo:

\[E(p_{t+1}) = a(p_t+d_t)+b\]

onde \(a\) e \(b\) são parãmetros da regra.

Além disso, há dois parâmetros de decisão na regra, que são acurácia e aptidão. Acurácia diz respeito a quão precisas são as previsões da regra, e é uma medida que aproxima a variância quando necessário. Aptidão é o fator de decisão para a parte evolutiva, e é constituído principalmente pela acurácia, diferindo pois penaliza a quantidade de indicadores que serão observados (para incorporar a ideia de que é custoso observá-los).

Dificuldades de modelos baseados em agentes


Na fase de implementar, senti fortemente um problema notório de modelos baseados em agente, que inclusive foi comentado nas aulas do curso de Métodos Computacionais: o grande número de variáveis e detalhes do modelo dificulta muito a sua documentação e mais ainda sua reprodução. Muitos mecanismos não estavam bem descritos em nenhuma referência e isso tornou a implementação árdua e culminou, pelo menos em minha análise, na impossibilidade de reproduzir os resultados. De qualquer forma, esse fato depõe a favor do cuidado com a manutenção do conhecimento e dos modelos já criados.

A implementação em python


Decidi fazer a implementação sem usar a biblioteca 'Mesa', que é voltada para modelos baseados em agentes. Criei classes para representar os agentes necessários e suas características: para acionistas e suas regras de decisão, uma para o especialista e price-setting, uma para as características de mercado e para simulação.

A simulação em si envolve o seguinte processo: definição do estado atual de mercado, com base nos indicadores, escolha da regra ótima, processo de precificação pelo especialista, ajuste da acurácia das regras que foram ativadas, registro das novas informações de mercado.

Após tentar implementar esse processo e fazer diversas correções, não fui ainda capaz de reproduzir os resultados do livro. Inevitavelmente o meu modelo tendia para o preço mínimo estipulado ou para o máximo. Vou apresentar alguns exemplos das diferenças que encontrei.

A imagem será apresentada aqui.

Acima temos estatísticas da série de preços simulada, tanto no modelo original quanto do de 2008. Vemos um desvio padrão na faixa de 2 e pouco, mas o da amostra que eu gerei, após rodar 5 vezes e calcular a média, ficou na faixa de 200. Isso principalmente por que os preços oscilavam entre máximo e mínimo, sem que eu conseguisse identificar o por quê disso.

Todas as estatísticas calculadas tiveram esse problema. Eu deixo disponível o código (que ainda precisa de revisão e melhorias para ficar mais rápido) e se alguém tiver interesse em contribuir, será ótimo.


Referências

R.G. Palmer, W. Brian Arthur, J. Holland, Blake LeBaron, Paul Tayler Artificial economic life: a simple model of a stockmarket, Physica D: Nonlinear Phenomena,Volume 75, Issues 1–3,1994,Pages 264-274.

Ehrentreich, N., Agent-Based Modeling: The Santa Fe Institute Artificial Stock Market Model Revisited, Springer: Lecture Notes in Economics and Mathematical Systems, 2008.

Há uma outra implementação em python disponível aqui.

comentou Nov 6 por pedro zarur (6 pontos)  
É interessante notar também que esse mercado financeiro artificial do Santa Fe Institute foi pioneiro em uma nova e inovadora área do pensamento econômico: Complexity Economics. Pela primeira vez foram usados métodos matemáticos e computacionais para encarar a economia como um sistema complexo fora de equilíbrio.

Indico aqui um artigo interessantíssimo do W. Brian Arthur, um dos fundadores dessa escola de pensamento, para aqueles que querem ter uma introdução ao tema: https://sites.santafe.edu/~wbarthur/Papers/CompEconFrame.pdf  

Parabéns pela resposta e pela escolha do tema!
comentou Nov 9 por Gustavo Libório (16 pontos)  
Obrigado Pedro! O artigo é uma boa contribuição. Acredito que minha execução ainda possa ser melhorada, se quiser colaborar entre em contato! hahaha
...