Estratégia dirigida por eventos
O que é uma "estratégia dirigida por evento"
Uma estratégia impulsionada por eventos é uma estratégia, adotada por gestores de hedge funds, que tenta tirar proveito de eventos como fusões e reestruturações que podem resultar no mispricing de curto prazo das ações de uma empresa. Uma estratégia orientada para eventos focada em explorar a tendência das ações das empresas em um momento de mudança para diminuir o preço.
BREAKING Down 'estratégia dirigida por evento'
Os investidores muitas vezes se tornam preocupados quando uma empresa está passando por uma reestruturação societária, reestruturação, fusão, aquisição ou outro grande evento. Isso pode levar o preço das ações a estagnar até que os investidores se sintam confortáveis com a estabilidade novamente. Quando um gerente de fundos de hedge ou outro estrategista orientado para eventos encontrar um investimento potencial, ele examinará o valor subjacente da empresa e a situação em torno do evento, incluindo possíveis armadilhas regulatórias. Se ele ou ela se sentir positivo sobre o evento e a força da empresa, ele ou ela pode comprar ações para vender mais tarde, quando o preço se ajustar.
QuantStart.
Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo bem informado de mentalistas quant pronto para responder suas perguntas comerciais mais importantes.
Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.
Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.
Por Michael Halls-Moore em 25 de março de 2014.
A discussão da implementação de backtesting baseada em eventos já considerou o loop de eventos, a hierarquia de classes de eventos e o componente de gerenciamento de dados. Neste artigo, uma hierarquia de classe Estratégia será delineada. Objetos de estratégia tomam dados de mercado como entrada e produzem eventos de sinal de negociação como saída.
Um objeto Estratégia encapsula todos os cálculos em dados de mercado que geram sinais de aviso para um objeto Portfolio. Nesta fase do desenvolvimento do backtester conduzido por eventos, não há conceito de um indicador ou filtro, como os encontrados no comércio técnico. Estes também são bons candidatos para criar uma hierarquia de classe, mas estão além do escopo deste artigo.
A hierarquia da estratégia é relativamente simples, pois consiste em uma classe base abstrata com um único método virtual puro para gerar objetos SignalEvent. Para criar a hierarquia da Estratégia é necessário importar NumPy, pandas, o objeto Fila, as ferramentas da classe base abstrata e o SignalEvent:
A classe base abstrata Estratégia simplesmente define um método virtual puro de cálculo_signals. Em classes derivadas, isso é usado para lidar com a geração de objetos SignalEvent com base em atualizações de dados de mercado:
A definição da Estratégia ABC é direta. Nosso primeiro exemplo de subclasse do objeto Estratégia faz uso de uma estratégia de compra e retenção para criar a classe BuyAndHoldStrategy. Isso simplesmente é longo em uma determinada segurança em uma determinada data e mantém-lo dentro do portfólio. Assim, apenas um sinal por segurança é gerado.
O construtor (__init__) requer o manipulador de dados do mercado de barras e o objeto da fila de eventos evento:
Na inicialização do BuyAndHoldStrategy, o membro do dicionário comprado possui um conjunto de chaves para cada símbolo que está configurado como False. Uma vez que o recurso tenha sido "longed", isso é definido como True. Essencialmente, isso permite que a Estratégia saiba se está "no mercado" ou não:
O método virtual puro de calcular_signals é implementado concretamente nesta classe. O método rola sobre todos os símbolos na lista de símbolos e recupera a barra mais recente do manipulador de dados das barras. Em seguida, verifica se esse símbolo foi "comprado" (ou seja, se estamos no mercado para este símbolo ou não) e, se não, cria um único objeto SignalEvent. Isso é colocado na fila de eventos e o dicionário comprado é atualizado corretamente para True para esta chave de símbolo particular:
Esta é claramente uma estratégia simples, mas é suficiente demonstrar a natureza de uma hierarquia de estratégia baseada em eventos. Em artigos subseqüentes, consideraremos estratégias mais sofisticadas, como um comércio de pares. No próximo artigo, consideraremos como criar uma hierarquia de portfólio que acompanhe nossas posições com um lucro e perda ("PnL").
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever na QuantStart List:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso gratuito de 10 partes, com sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.
QuantStart.
Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo bem informado de mentalistas quant pronto para responder suas perguntas comerciais mais importantes.
Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.
Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.
Por Michael Halls-Moore em 11 de março de 2014.
Passamos os últimos dois meses no QuantStart backtesting várias estratégias de negociação utilizando Python e pandas. A natureza vectorizada dos pandas garante que determinadas operações em grandes conjuntos de dados sejam extremamente rápidas. No entanto, as formas de backtester vectorizados que estudamos até à data sofrem de algumas desvantagens na forma como a execução comercial é simulada. Nesta série de artigos, vamos discutir uma abordagem mais realista da simulação de estratégia histórica através da construção de um ambiente de backtesting baseado em eventos usando o Python.
Software dirigido por eventos.
Antes de aprofundar o desenvolvimento de um backtester, precisamos entender o conceito de sistemas orientados a eventos. Os jogos de vídeo fornecem um caso de uso natural para o software baseado em eventos e fornecem um exemplo direto para explorar. Um videogame tem vários componentes que interagem uns com os outros em uma configuração em tempo real em alta velocidade. Isso é gerenciado executando todo o conjunto de cálculos dentro de um loop "infinito" conhecido como loop de eventos ou loop de jogo.
Em cada marca do jogo, uma função é chamada para receber o último evento, que será gerado por alguma ação anterior correspondente dentro do jogo. Dependendo da natureza do evento, que pode incluir uma tecla pressionada ou um clique do mouse, são tomadas algumas ações subseqüentes, que irão encerrar o loop ou gerar alguns eventos adicionais. O processo continuará. Aqui está um exemplo de pseudo-código:
O código está verificando continuamente novos eventos e, em seguida, executando ações com base nesses eventos. Em particular, permite a ilusão de tratamento de resposta em tempo real porque o código está sendo continuamente roteado e os eventos são verificados. Como ficará claro, isso é precisamente o que precisamos para realizar simulação de negociação de alta freqüência.
Por que um Backtester dirigido por eventos?
Os sistemas orientados a eventos oferecem muitas vantagens em relação a uma abordagem vetorializada:
Reutilização de código - Um backtester com base em eventos, por design, pode ser usado tanto para testes históricos quanto para negociação ao vivo com a troca mínima de componentes. Isso não é verdade para testadores vectorizados, onde todos os dados devem estar disponíveis ao mesmo tempo para realizar análises estatísticas. Lookahead Bias - Com um backtester dirigido por eventos, não existe um viés de lookahead, pois o recebimento de dados de mercado é tratado como um "evento" que deve ser atuado. Assim, é possível "gotejar alimentação" um backtester dirigido por eventos com dados de mercado, replicando como um sistema de gerenciamento de pedidos e de portfólio se comportaria. Realismo - Os backtesters dirigidos a eventos permitem uma personalização significativa sobre como as ordens são executadas e os custos de transação são incorridos. É direto lidar com pedidos básicos de mercado e limite, bem como mercado-em-aberto (MOO) e mercado-em-fechar (MOC), uma vez que um manipulador de troca personalizado pode ser construído.
Embora os sistemas orientados a eventos tenham muitos benefícios, eles sofrem de duas desvantagens principais em relação aos sistemas vectorizados mais simples. Em primeiro lugar, eles são significativamente mais complexos para implementar e testar. Há mais "partes móveis" que levam a uma maior chance de introduzir bugs. Para mitigar esta metodologia adequada de teste de software, como o desenvolvimento orientado por teste, podem ser empregados.
Em segundo lugar, eles são mais lentos para serem executados em comparação com um sistema vectorizado. Operações vectorizadas ótimas não podem ser utilizadas ao realizar cálculos matemáticos. Discutiremos formas de superar essas limitações em artigos posteriores.
Resumo do Backtester com Drivers de Eventos.
Para aplicar uma abordagem orientada a eventos para um sistema de teste posterior, é necessário definir nossos componentes (ou objetos) que irão lidar com tarefas específicas:
Evento - O evento é a unidade de classe fundamental do sistema de eventos. Ele contém um tipo (como "MERCADO", "SINAL", "ORDEM" ou "ENCHIMENTO") que determina como ele será tratado dentro do ciclo do evento. Fila de eventos - A fila de eventos é um objeto de fila Python na memória que armazena todos os objetos de subclasse do evento que são gerados pelo resto do software. DataHandler - O DataHandler é uma classe base abstrata (ABC) que apresenta uma interface para lidar com dados de mercado históricos ou ao vivo. Isso proporciona uma flexibilidade significativa, pois os módulos da Estratégia e do portfólio podem ser reutilizados entre ambas as abordagens. O DataHandler gera um novo MarketEvent em cada batimento cardíaco do sistema (veja abaixo). Estratégia - A Estratégia também é um ABC que apresenta uma interface para tirar dados do mercado e gerar SignalEvents correspondentes, que são, em última instância, utilizados pelo objeto Portfolio. Um SignalEvent contém um símbolo de ticker, uma direção (LONG ou SHORT) e um timestamp. Portfolio - Este é um ABC que lida com o gerenciamento de pedidos associado a posições atuais e posteriores para uma estratégia. Ele também realiza gerenciamento de riscos em todo o portfólio, incluindo exposição do setor e dimensionamento de posição. Em uma implementação mais sofisticada, isso pode ser delegado a uma classe RiskManagement. O Portfolio leva SignalEvents da fila e gera OrderEvents que são adicionados à fila. ExecutionHandler - ExecutionHandler simula uma conexão com uma corretora. O trabalho do manipulador é levar OrderEvents da fila e executá-los, seja por meio de uma abordagem simulada ou de uma conexão real com uma corretora de fígado. Uma vez que as ordens são executadas, o manipulador cria FillEvents, que descreve o que realmente foi negociado, incluindo taxas, comissão e derrapagem (se modelado). O Loop - Todos esses componentes estão envolvidos em um loop de eventos que lida corretamente com todos os tipos de eventos, roteando-os para o componente apropriado.
Este é um modelo bastante básico de um mecanismo comercial. Existe um margem de manobra significativa para a expansão, particularmente no que diz respeito ao uso do portfólio. Além disso, os diferentes modelos de custos de transações também podem ser abstraídos em sua própria hierarquia de classes. Nesta fase, introduz uma complexidade desnecessária nesta série de artigos, então não discutiremos mais sobre isso. Em tutoriais posteriores, provavelmente expandiremos o sistema para incluir realismo adicional.
Aqui está um trecho do código Python que demonstra como o backtester funciona na prática. Existem dois loops no código. O loop externo é usado para dar ao backtester um batimento cardíaco. Para negociação ao vivo, esta é a frequência na qual novos dados de mercado são consultados. Para estratégias de backtesting, isso não é estritamente necessário, pois o backtester usa os dados de mercado fornecidos no formulário de gotejamento (veja a linha bars. update_bars ()).
O loop interno realmente manipula os eventos do objeto Fila de eventos. Eventos específicos são delegados ao respectivo componente e, posteriormente, novos eventos são adicionados à fila. Quando a fila de eventos está vazia, o ciclo de pulsação continua:
Este é o esboço básico de uma forma como um backtester dirigido por eventos foi projetado. No próximo artigo, discutiremos a hierarquia da classe Event.
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever na QuantStart List:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso gratuito de 10 partes, com sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.
Comments
Post a Comment