Negociação de opções algorítmicas 1.
Apesar dos muitos recursos interessantes das opções, os comerciantes privados raramente se aproveitam (claro que eu estou falando aqui de opções sérias, e não de opções binárias). Talvez as opções sejam impopulares devido à sua reputação de ser complexas. Ou devido à sua falta de suporte pela maioria das ferramentas de software de negociação. Ou devido às etiquetas de preço das poucas ferramentas que os suportam e dos dados históricos que você precisa para negociação algorítmica. Qualquer que seja o # 8211; recentemente fizemos vários contratos de programação para sistemas de negociação de opções, e fiquei surpreso que mesmo sistemas simples pareciam produzir lucros relativamente consistentes. Especialmente as opções de venda aparecem mais lucrativas do que a negociação / convencional & # 8217; instrumentos. Este artigo é o primeiro de uma mini-série sobre ganhar dinheiro com negociação de opções algorítmicas.
Opções 101.
As opções são explicadas em muitos sites e em muitos livros de negociação, então aqui é apenas uma visão geral rápida. Uma opção é um contrato que dá ao seu proprietário o direito de comprar (opção de compra) ou vender (opção de venda) um ativo financeiro (o subjacente) a um preço fixo (o preço de exercício) em ou antes de uma data fixa (data de caducidade) . Se você vende uma opção curta (escreva), você está tendo o outro lado do comércio. Então, você pode entrar em uma posição de 4 maneiras diferentes: comprar uma ligação, comprar uma venda, vender uma chamada curta, vender uma curta. E isso com todas as combinações possíveis de preços de exercício e datas de caducidade.
O prémio é o preço que você paga ou coleciona para comprar ou vender uma opção. É muito inferior ao preço do estoque subjacente. Os principais mercados de opções geralmente são liquidos, então você pode comprar, escrever ou vender qualquer momento com qualquer preço de exercício razoável e data de validade. Se o preço subjacente atual (o preço à vista) de uma opção de compra estiver acima do preço de exercício, a opção está no dinheiro; caso contrário, está fora do dinheiro. O contrário é verdadeiro para colocar opções. In-the-money é bom para o comprador e ruim para o vendedor. As opções no dinheiro podem ser exercidas e são então trocadas pelo subjacente ao preço de exercício. A diferença de local e greve é o lucro do comprador e a perda do vendedor. As opções de estilo americano podem ser exercidas a qualquer momento, opções de estilo europeu apenas no vencimento.
As opções fora do dinheiro não podem ser exercidas, pelo menos não com lucro. Mas eles não são inúteis, já que eles ainda têm a chance de entrar no dinheiro antes do vencimento. O valor de uma opção depende dessa chance e pode ser calculado para opções européias de preço à vista, greve, caducidade, taxa de rendimento sem risco, taxa de dividendos e volatilidade subjacente com a famosa fórmula de Black-Scholes. Esse valor é a base da opção premium. O verdadeiro prémio pode desviar ligeiramente devido à oferta, demanda e tentativas de prever a tendência de preços subjacentes.
Ao reverter a fórmula com um processo de aproximação, a volatilidade pode ser calculada a partir do prémio real. Esta volatilidade implícita é como o mercado espera que o subjacente flutue na próxima vez. As derivadas parciais do valor da opção são os gregos (Delta, Vega & # 8211; don & # 8217; t sabe o que a letra grega deve ser & # 8211; e Theta). Eles determinam em que direção e quão forte, o valor irá mudar quando um parâmetro de mercado muda.
Aquela & # 8217; s todas as informações básicas necessárias para opções de negociação. Por sinal, é interessante comparar os desempenhos das estratégias dos livros comerciais. Embora os sistemas de negociação forex ou de estoque descritos nesses livros sejam principalmente de beliche e perca já em um backtest simples, não é assim com os sistemas de opção. Eles muitas vezes ganham no backtests. E isso, embora eu tenha certeza de que quase nenhum autor realmente os testou. Os autores de livros de negociação de opções são apenas mais inteligentes do que outros autores de livros comerciais? Talvez, mas nós veremos que há uma explicação alternativa.
Por que as opções de negociação?
Eles são mais complexos e mais difíceis de negociar, e você precisa de uma fórmula vencedora do Prêmio Nobel para calcular um valor que de outra forma seria simplesmente uma diferença de preço de entrada e saída. Apesar de tudo isso, as opções oferecem muitas vantagens maravilhosas em relação a outros instrumentos financeiros:
Alta alavancagem. Com US $ 100 você pode comprar apenas algumas ações, mas opções de várias centenas de ações. Risco controlado. Uma posição curta em um estoque pode limpar sua conta; As posições nas opções podem ser inteligentes combinadas para limitar o risco de qualquer maneira desejada. E, ao contrário de uma perda de parada, é um limite de risco real. Dimensões adicionais. Os lucros obtidos apenas dependem da subida ou queda dos preços. Os lucros das opções podem ser alcançados com o aumento da volatilidade, a queda da volatilidade, os preços se deslocam em um intervalo, fora de um intervalo ou quase qualquer outro comportamento de preços imagináveis. Fogo e esqueça. As opções expiram, então você não precisa de um algoritmo para fechá-las (a menos que você queira vender ou exercê-las em condições especiais). E você não paga nenhuma comissão de saída por uma opção expirada. Vantagem do vendedor. Devido ao prémio, as opções ainda podem produzir um lucro para o vendedor, mesmo que o subjacente se mova na direção errada.
A ética do hacker exige que você não apenas reivindique algo, mas prová-lo. Para se familiarizar com as opções, deixe colocar a última reclamação, o vendedor aproveita para testar:
Este é um sistema de troca de opções muito simples. Ele escreve aleatoriamente opções de chamada ou colocação e mantém as posições abertas até que expiram. Devido à aleatoriedade de colocar / chamar é agnóstico de tendências. Antes de pesquisar os detalhes do código, basta executá-lo no modo [Teste] algumas vezes (você precisará do Zorro versão 1.53 ou superior). Você notará que o resultado é diferente em qualquer momento, mas é mais frequentemente positivo do que negativo, mesmo que a comissão seja subtraída do lucro. Um resultado típico:
Você pode ver que a maioria dos negócios ganha, mas quando eles perdem, eles perdem grandes. Agora, inverta a estratégia e compre as opções em vez de vendê-las: Substitua enterShort () por enterLong (). Execute-o novamente algumas vezes (o script precisa de cerca de 3 segundos para um backtest). Você verá agora que o resultado é mais freqüentemente negativo. na verdade, quase sempre.
Parece que as opções, pelo menos, os contratos SPY testados, de fato, favorecem o vendedor. Isso é um pouco semelhante à expectativa positiva de posições longas em ações, ETFs ou futuros de índice, mas as vantagens do vendedor de opções são mais fortes e independentes da direção do mercado. Isso pode explicar uma grande parte dos resultados positivos dos sistemas de opções em livros de negociação. Por que há compradores de opções? As opções são muitas vezes compradas sem fins lucrativos, mas como um seguro contra tendências de preços desfavoráveis do subjacente. E por que a vantagem do vendedor não é arbitrada pelos tubarões do mercado? Talvez porque não há muitas negociações algorítmicas com opções, e porque há de qualquer forma mais baleias do que tubarões nos mercados financeiros.
Funções para opções.
Podemos ver que as opções de negociação e backtesting requer algumas mais funções do que apenas negociar o subjacente. Sem opções, o mesmo sistema de comércio aleatório seria reduzido a esse breve script:
As opções exigem (pelo menos) três funções adicionais:
dataLoad (1, & # 8221; SPY_Options. t8 & # 8243 ;, 9) carrega dados de opções históricas do arquivo & # 8220; SPY_Options. t8 & # 8221; em um conjunto de dados. Os dados de opções incluem não apenas os preços de oferta e oferta, mas também o preço de exercício, a data de validade, o tipo & # 8211; colocar ou ligar, americano ou europeu de qualquer opção, e alguns dados adicionais raramente utilizados, como o interesse aberto. Ao contrário dos preços históricos, os dados das opções geralmente são caros. Você pode comprá-lo de fornecedores como iVolatility. Mas existe uma maneira alternativa de obtê-lo gratuitamente, que eu descreverei abaixo.
A coluna do centro lista os preços de exercício e as datas de validade diferentes, as partes direita e esquerda são os preços de oferta e de oferta e os tamanhos de livro de pedidos para a chamada atribuída (esquerda) e as opções de venda (à direita). Os preços são por ação; um contrato de opção sempre cobre um certo número de ações, normalmente 100. Então, você pode ver na lista acima que você coletará $ 15 premium quando você escrever uma opção de chamada SPY que expira na próxima semana (03 de fevereiro de 2017) com US $ 230 preço de exercício. Se a SPY não ganhou mais de $ 230 até essa data, os US $ 15 são seus lucros. Se ele resultou em US $ 230 e 10 centavos e a opção é exercida (acontece automaticamente quando expira no dinheiro), você ainda mantém US $ 5. Mas se de repente subisse para US $ 300 (talvez Trump anunciasse novos muros ao redor dos EUA, tudo pago por si mesmo), você deve suportar uma perda de $ 6985.
A imagem exibe 54 contratos, mas esta é apenas uma pequena parte da cadeia de opções, pois há muitas datas de caducidade e preços de exibição disponíveis. A cadeia de opções SPY pode conter até 10.000 opções diferentes. Todos eles são baixados para o PC com a função contractUpdate acima, o que pode demorar alguns segundos a ser concluído.
contrato (Tipo, 30, preçoClose ()) seleciona uma opção específica da cadeia de opções baixada anteriormente. O tipo (PUT ou CALL), os dias até a expiração (30) e a greve (priceClose () é o preço atual do subjacente) são informações suficientes para selecionar a melhor opção de ajuste. Note-se que, para obter preços de exercício corretos no backtest, baixamos os dados de preços subjacentes com a bandeira UNADJUSTED. Os preços de greve são sempre desajustados.
Uma vez que um contrato é selecionado, o próximo enterLong () ou enterShort () compra ou vende a opção no mercado. A cláusula if () verifica se o contrato está disponível e a data de expiração é diferente do anterior (para garantir que somente contratos diferentes sejam negociados). Os limites de entrada, de paragem ou de lucro funcionariam como de costume, agora só se aplicam ao valor da opção, o prémio, em vez do preço subjacente. O backtest pressupõe que quando uma opção é exercida ou expira no dinheiro, o subjacente é vendido imediatamente e o lucro é registrado na conta do comprador e deduzido da conta do vendedor. Se a opção expirar para fora do dinheiro, a posição simplesmente desaparece. Portanto, não nos preocupamos com a saída de posições nesta estratégia. Além dessas diferenças, as opções de negociação funcionam de acordo com a negociação de qualquer outro instrumento financeiro.
Estratégias de opções de backtesting.
Aqui é uma maneira fácil de se enriquecer. Abra uma conta do IB e execute um software que registre as cadeias de opções e os preços do contrato em intervalos de um minuto. Isso é o que alguns fornecedores de dados fizeram nos últimos 5 anos, e agora eles estão querendo vender seus tesouros de dados. Embora você possa facilmente pagar vários milhares de dólares por algumas cadeias de opções de ações principais, não tenho certeza de quem realmente possui os direitos autorais desses dados # 8211; o vendedor, o corretor, a troca ou os participantes do mercado? Esta pode ser uma área cinzenta legal. De qualquer forma, você precisa de dados históricos para o desenvolvimento de estratégias de opções, caso contrário, você não pode fazer o backtest deles.
Aqui é um método para obtê-lo de graça e sem problemas legais:
Este script é um pouco mais longo do que os scripts Zorro habituais que postei aqui, então eu não o expliquei detalhadamente. Ele gera cadeias de opções artificiais para qualquer dia a partir de 2018-2017 e as armazena em um arquivo de dados histórico. Os preços das opções são calculados a partir do preço subjacente, da volatilidade, da taxa de juros livre de risco atual e da taxa de dividendos do subjacente. Ele usa três faixas de preços de exercício e datas de caducidade em qualquer sexta-feira dos próximos 180 dias. Você precisa de R instalado para executá-lo, e também o pacote RQuantlib para calcular os valores das opções. Todas as funções são descritas no manual Zorro. A função yield () retorna a taxa de rendimento atual das contas do Tesouro dos EUA e contractVal () calcula o prémio ao resolver uma equação diferencial com todos os parâmetros da opção. O código-fonte de ambas as funções pode ser encontrado no arquivo de contrato. c incluir.
Devido ao solucionador de equações diferenciais lentas e ao grande número de opções, o script precisa de várias horas para ser concluído. Aqui é uma comparação dos dados gerados com dados reais de opções SPY:
A linha azul são os preços das opções artificiais, a linha preta são os preços reais comprados de um fornecedor de dados de opções, tanto para contratos SPY de 3 semanas com 10 pontos de distância spot-strike. Você pode ver que os preços combinam bastante bem. Existem pequenas diferenças que podem ser parcialmente aleatórias, parcialmente causadas por anomalias na oferta e na demanda. Para estratégias que exploram essas anomalias & # 8211; que inclui todas as estratégias baseadas em volatilidade implícita e # 8211; Você precisará de preços reais de opções históricas. Para as estratégias de opções que exploram apenas as mudanças de preço ou de volatilidade do subjacente, os dados artificiais provavelmente irão fazer. Veja, lendo este artigo até o final, você já salvou alguns milhares de dólares.
Conclusão.
Opções e combinações de opções podem ser usadas para criar instrumentos financeiros artificiais com propriedades muito interessantes. As estratégias de opções, especialmente as opções de venda, são mais propensas a serem lucrativas do que outras estratégias. As estratégias de opções algorítmicas são um pouco, mas não muito mais complexas do que estratégias com outros instrumentos financeiros.
Eu incluí todos os scripts no repositório de script de 2017 e também um conjunto de dados históricos com as taxas de rendimento (caso contrário, você precisava da ponte Quandl ou do Zorro S para baixá-los). Você precisará do Zorro 1.53 ou superior, atualmente disponível no & # 8220; Beta & # 8221; link da página de download do Zorro. A mensagem de erro da versão Zorro gratuita sobre a ponte Quandl não suportada pode ser ignorada, devido às taxas de rendimento incluídas, o script será executado no entanto.
No próximo artigo, analisaremos mais de perto os valores das opções e os métodos para combinar opções para limitar o risco ou negociar intervalos de preços arbitrários. Essas combinações com nomes engraçados como "Iron Condor" e # 8221; ou & # 8220; Borboleta & # 8221; são muitas vezes referidos como estratégias de opções, mas não são & # 8211; são apenas instrumentos financeiros artificiais. Como você os troca é até a estratégia real. Algumas estratégias de opções simples, mas consistentemente rentáveis serão o tema do terceiro artigo desta mini-série.
49 pensamentos sobre & ldquo; Algorithmic Options Trading 1 & rdquo;
Artigo muito interessante Eu tenho um sistema de troca automático de opções criado pelos desenvolvedores do Zorro (ótimo trabalho, por sinal) e é muito interessante ver que minha estratégia gera resultados semelhantes à sua estratégia # 8220; aleatória # 8221 ;. Estou ansioso para os próximos artigos desta mini-série.
Gostaria de perguntar, você tem alguma idéia se seu livro será traduzido para o inglês em breve? Adoraria ler o livro.
Eu estou totalmente interessado nestes mini artigos da série. Por favor, deixe-me saber a próxima série.
Obrigado # 8211; sim, uma versão de livro em inglês está planejada, eu só devo encontrar algum tempo para revisar a tradução bruta. Andrés: você pode inserir seu e-mail no campo de inscrição à direita.
Bom artigo, gostaria de lhe perguntar o que são bons livros ou onde posso aprender a negociar com opções. Obrigado.
Estou certo, porque esses preços artificiais e reais se relacionam com uma espécie de sintético & # 8221; opção feita como uma série rolada de opções reais com a data de validade mais próxima e greve dinamicamente alterada (dependendo do preço subjacente)?
Investopedia e Tastytrade têm alguns tutoriais e vídeos sobre opções. - Não foi lançada a série, mas uma cadeia de opções com diferentes greves e datas de expiração, assim como na vida real. Caso contrário, o backtest não seria realista.
Quando você está comparando os preços artificiais com os preços reais, você está usando ataque ATM? O ponto inteiro, para mim, de testar uma estratégia de negociação de opções versus dados de opções reais é que, nas asas, os volumes implícitos serão muito superiores aos gerados artificialmente.
As greves utilizadas foram cerca de 10 pontos ITM.
Obrigado por publicar este interessante artigo. Posso saber quando os outros dois artigos desta mini-série serão publicados?
Quando eu tiver algum tempo & # 8230; 🙂
Que bom artigo! Os resultados do sistema de comércio aleatório são semelhantes aos CBOE S & amp; P 500 PutWrite Index e faz sentido.
Muito obrigado por este artigo! Estava pensando nisso no outro dia.
Eu gosto muito dos artigos deste blog. Atualmente, estou negociando opções de compra de prazo de 1 ano de ações específicas.
Meu maior problema com a vantagem do vendedor & # 8221; que contradiz o risco controlado & # 8221; declaração.
& # 8220; Algo que muitas vezes confunde os investidores é se, ou não, ser uma chamada curta e uma longa colocação são iguais. Intuitivamente, isso pode ter algum sentido, uma vez que as chamadas e colocações são contratos quase opostos, mas ser uma chamada curta e um longo tempo não é o mesmo. Quando você é comprido, você tem que pagar o prêmio e o pior caso resultará em perda do prêmio. No entanto, quando você recebe uma chamada curta, você coleciona a opção premium, mas você está exposto a uma grande quantidade de risco & # 8221;
Então, quando você escreve (nua), seu risco é ilimitado. O curto período de tempo de expiração (30 dias) é salva-lo na maioria dos casos, mas isso é uma auto-ilusão. Este método é muito semelhante aos bots de negociação de fraude, onde 99,5% dos bots do tempo estão ganhando pouco (e. G. Call premium) quantidade de dinheiro, no entanto, quando você perde, você arrisca grande quantidade de seu dinheiro.
O risco prolongado ou o risco de comerciantes são limitados e eles escolhem opções fora do dinheiro para multiplicar seus ganhos e, paralelamente, eles reduzem sua chance vencedora.
Eu estaria interessado em LEAPS (1+ ano de expiração longo / put opções) backtest.
Apenas faça isso. Faça o download do Zorro 1.54 no fórum do usuário e execute um sistema com o LEAPS. Para isso, você precisa aumentar o & # 8220; DaysMax & # 8221; variável no script de geração de dados de opções acima de 1 ano (365) ou 2 anos (2 * 365) para incluir contratos de longo prazo. O script precisará um pouco mais de tempo para a geração de dados.
Uma vez que as opções de negociação são um novo recurso Zorro, eu estou me perguntando se a parte do manual Broker do manual (zorro-trader / manual / en / brokerplugin. htm) foi suficientemente atualizada para atender as opções de manipulação.
Eu estou pedindo porque eu estou tentando escrever um plugin DLL para TradeKing (em breve para ser renomeado para Ally Invest). Eles possuem ações, ETFs e contratos de opções. Corretor muito baixo de barreira para entrada também ($ 0 necessário para obter acesso à API).
Para opções, implemente as funções básicas da API mais 5 funções BrokerCommand: GET_POSITION, GET_OPTIONS, GET_UNDERLYING, SET_SYMBOL e SET_MULTIPLIER.
Artigo fantástico, obrigado por compartilhar, testei o código e baixei os dados das opções através do script, tudo pareceu fazer o download de OK e me fazer um arquivo T8 de 48mb para o SPY, mas quando eu executar o script aleatório, não obtenho quaisquer negociações. É a primeira vez que eu corri o zorro (I & # 8217; m na última versão baixada há 2-3 dias), por isso realmente não tenho certeza do que eu estou fazendo de errado.
Qualquer ajuda será apreciada e espero ansiosamente o próximo episódio nesta série fascinante 😉
Aqui está a saída do log:
Opções de testeSellRandom SPY.
Conta simulada AtivosIB.
Período de barra 24 horas (média 2233 min)
Período de teste 12.01.2018-01.06.2018 (1270 bars)
Período de busca 80 bares (16 semanas)
Modo de simulação realista (deslizamento 5,0 segundos)
Spread 2.0 pips (roll 0.00 / 0.00)
Contratos por lote 1.0.
Perda / perda bruta 0,00 $ / -0,00 $ (-1p)
Lucro médio de 0,00 $ / ano, 0,00 $ / mês, 0,00 $ / dia.
Dispensa máxima -0.00 $ -1% (MAE -0.00 $ -1%)
Tempo de inatividade total 0% (TAE 0%)
Tempo máximo de queda 0 minutos a partir de setembro de 2018.
Margem máxima aberta 0.00 $
Risco máximo aberto 0,00 $
Volume comercial 0,00 $ (0,00 $ / ano)
Custos de transação 0.00 $ spr, 0.00 $ slp, 0.00 $ rol.
Capital requerido 0 $
Número de negócios 279 (52 / ano, 1 / semana, 1 / dia)
Percentagem de ganhos de 0,0%
Vitória / perda máxima 0.00 $ / & # 8211; 0.00 $
Lucro médio de lucro 0,00 $ -1. $ P (+ 0.0p / -1. $ P)
Deslizamento do comércio médio 0,00 $ 1. $ p (+ 0.0p / -1. $ P)
Barras de comércio médio 23 (+0 / -23)
Barras comerciais máximas 26 (5 semanas)
Tempo no mercado 506%
Negociações abertas máximas 6.
Raio de perda máxima 279 (não correlacionado 279)
Retorno anual 0%
Taxa Sharpe 0,00.
Critério de Kelly 0,00.
R2 coeficiente 1.000.
Nível de confiança AR DDMax Capital.
Análise de portfólio OptF ProF Win / Loss Wgt%
e um trecho do arquivo de log & # 8230;
[1338: Sex 13.05.16 19:00] +0 +0 6/271 (206.21)
[SPY :: SC1272] Ligue para 20180513 204.0 0@3.5713 não negociado hoje!
[SPY :: SC1272] Expirou 1 Ligue 20180513 204.0 0 @ 207: +0.00 às 19:00:00.
[1339: Seg 16.05.16 19:00] +0 +0 5/272 (204.96)
[1340: Ter 17.05.16 19:00] +0 +0 5/272 (206.46)
[1341: Qua 18.05.16 19:00] +0 +0 5/272 (204.44)
[1342: Qui 19.05.16 19:00] +0 +0 5/272 (204.06)
[SPY :: SC4278] Escreva 1 Ligue 20180624 205.0 0@3.4913 às 19:00:00.
[1343: Sex 20.05.16 19:00] +0 +0 6/272 (204.92)
[SPY :: SP1773] Coloque 20180520 208.0 0@4.2851 não negociado hoje!
[SPY :: SP1773] Expirou 1 Coloque 20180520 208.0 0 @ 204: +0.00 às 19:00:00.
[1344: Seg 23.05.16 19:00] +0 +0 5/273 (205.51)
[1345: Ter 24.05.16 19:00] +0 +0 5/273 (206.17)
[1346: Qua 25.05.16 19:00] +0 +0 5/273 (208.67)
[1347: Qui 26.05.16 19:00] +0 +0 5/273 (209.44)
[SPY :: SC4779] Escreva 1 Ligue 20180701 209.0 0@3.7358 às 19:00:00.
[1348: Sex 27.05.16 19:00] +0 +0 6/273 (209.53)
[SPY :: SP2274] Coloque 20180527 208.0 0@3.3622 não negociado hoje!
[SPY :: SP2274] Expirou 1 Coloque 20180527 208.0 0 @ 209: +0.00 às 19:00:00.
[1349: Ter 31.05.16 19:00] +0 +0 5/274 (210.56)
[SPY :: SC2775] Capa 1 Ligue para 20180531 207.0 0@2.2309: +0.00 às 19:00:00.
[SPY :: SC3276] Capa 1 Ligue 20180531 205.0 0@5.1843: +0.00 às 19:00:00.
[SPY :: SP3777] Capa 1 Coloque 20180531 206.0 0@0.8602: +0.00 às 19:00:00.
[SPY :: SC4278] Capa 1 Ligue para 20180531 205.0 0@4.9463: +0.00 às 19:00:00.
[SPY :: SC4779] Capa 1 Ligue 20180531 209.0 0@2.8347: +0.00 às 19:00:00.
[1350: Qua 01.06.16 19:00] +0 +0 0/279 (209.12)
Eu vejo que as posições são todas abertas com zero volume, como se você tivesse definido a quantidade de contratos para 0. Você usou o script não modificado do repositório?
I & # 8217; m usando o arquivo OptionsSimulate. c diretamente do arquivo Zip.
Eu instalei R e as bibliotecas Quantlib e a ponte R pareceu funcionar bem também.
O topo do arquivo.
string FileName = & # 8220; Histórico \\ SPY_SimOptions. t8 & # 8221 ;;
var StrikeMax [3] =; // 3 intervalos de ataque com diferentes passos.
var StrikeStep [3] =; // larguras de passo para os 3 intervalos.
int DaysMax = 180;
var BidAskSpread = 2.5; // Bid / Ask spread em percentagem.
var Dividendo = 0,02;
int Type = 0; // ou EUROPEO, ou FUTURO.
LookBack = 21; // por volatilidade.
Lamentamos as perguntas do n00b, são ferramentas e sistemas realmente interessantes e queria testar alguns spreads de crédito verticais usando este código como base para o SPY e talvez alguns outros instrumentos!
Não é uma questão de noob, na verdade é minha culpa. Eu apenas vejo que eu esqueci de definir as opções multiplicadoras no script. Isso não importava com a versão anterior do Zorro, uma vez que o multiplicador era 100 por padrão, mas agora deve ser configurado porque as opções podem ter multiplicadores muito diferentes.
I & # 8217; corrigiu o script acima. Obrigado por me notificar!
Sim, foi isso!
Obtendo resultados agora, muito obrigado pela sua ajuda jcl.
I & # 8217; m agora para colocar $ 1mm em uma conta e trocar este bebê 😉
Você tem alguma idéia quando você vai começar a trabalhar no resto dos artigos desta série?
Parece que o código abaixo não está funcionando mais.
O arquivo CSV SPY. csv é preenchido com este conteúdo:
QECx05, O URL que você solicitou está incorreto. Use a seguinte URL em vez disso: / api / v3 / datasets /: database_code /: dataset_code.
Desculpe, na verdade, esse arquivo era de Quandl, e precisa de uma assinatura paga.
Do Yahoo eu recebo o erro Can & # 8217; t baixar o SPY do Yahoo.
Alguém que tenha o mesmo problema?
Eu acho que todos estão tendo o mesmo problema, já que o Yahoo mudou seu protocolo na semana passada. Se você se deparar com problemas como esse, procure uma solução não só no meu blog, mas primeiro no fórum Zorro:
Obrigado por esta informação útil sobre sistemas de negociação automatizados!
Eu sou muito novo para isso, mas acho que este é um negócio muito maior do que você faz parecer som:
& gt; Existem pequenas diferenças que podem ser parcialmente aleatórias, parcialmente causadas por anomalias na oferta e na demanda. Para estratégias que exploram essas anomalias, você precisará de dados históricos reais.
Ter uma volatilidade precisa é essencial. Sem isso, você não está apenas escrevendo uma estratégia que não explore essas anomalias, você está escrevendo uma que as ignora completamente. É comparável ao gerar o preço de estoque, escolhendo um número aleatório com base na distribuição de probabilidade das semanas anteriores e # 8217; preços ou alisando todos os maiores movimentos.
Os preços das opções são baseados em expectativas sobre o futuro, mas (a menos que eu não entenda seu código), você está avaliando-os com base no passado. As diferenças serão mais pronunciadas em subjacentes diferentes de SPY, particularmente em torno do tempo de renda (digamos AAPL, MSFT ou GOOG).
Também acho difícil pensar em uma estratégia que não explore a diferença entre a volatilidade implícita e real. Mesmo um delta de 16/5 colocado na SPY só funciona tão bem como porque a IV é muito mais alta do que deveria ser.
Sim, as mudanças nos preços das opções devido à expectativa de volatilidade, talvez quando a abordagem da notícia da empresa pertence às anomalias mencionadas. A regra geral é: para anomalias que também têm um efeito sobre o subjacente, você pode usar os preços artificiais. Para anomalias que afetam apenas as opções, mas não o subjacente, você precisará comprar dados das opções históricas reais.
Quão bons serão os dados simulados se eu mudar o BarPeriod = 1440 para ser BarPeriod = 1?
Teoricamente, tão bom ou ruim quanto os dados diários, já que o priciple é o mesmo. Mas eu ainda não fiz testes com dados de opções de 1 minuto. Isso é uma grande quantidade de dados.
& # 8220; Devido ao solucionador de equação diferencial lenta e ao grande número de opções, o script precisa de várias horas para concluir. & # 8221;
Quanto mais rápido você acha que isso poderia ser se o R / Quantmod fosse substituído por C / C ++? Estou pensando em gerar muitos dados sintéticos.
Eu acredito que ele é _ C ++, pelo menos o Quantlib subjacente está programado em C ++. A sobrecarga R é provavelmente insignificante. O problema não é o código, mas a matemática. A resolução numérica de equações diferenciais é lenta. Black-Scholes é muito mais rápido, mas apenas para opções europeias. Se você realmente possui muitos dados para gerar, pode fazer sentido verificar a velocidade de diferentes métodos de aproximação para opções americanas.
Percebo que a volatilidade é fixada em 20 no script acima para gerar preços de opções sintéticas. Poderia não haver um argumento para que a volatilidade seja 30 dias e calculada programaticamente a partir do subjacente?
O que você quer dizer com & # 8220: 30 dias e # 8221 ?? 20 é o período de volatilidade usual nos cálculos financeiros, já que equivale aproximadamente a um mês. 30 provavelmente não faria muita diferença.
Você usa uma estimativa única de Volatilidade, eu acho: por exemplo, 16 para o S & amp; P. Mas, de forma contínua, será muito amplamente, o que é, naturalmente, parte do motivo pelo qual os preços das opções mudam tanto: como a volatilidade aumenta, o preço da opção também. Se, portanto, você usar uma média móvel de volatilidade de 20 (ou 30) dias, você obterá preços de opções sintéticas mais precisos do que simplesmente assumir um plano 16 único para o S & amp; P quando às vezes o real pode ser 10, às vezes 30. Não tenho olhou para a arquitetura do zorro e, portanto, não é agora se é principalmente vetor, ou olhar ou o que. De qualquer forma, seria possível incluir a média móvel do dia relevante da volatilidade do instrumento subjacente ao invés de uma figura fixa.
Mas lá novamente é o que você faz, talvez? HistVolOV = VolatilidadeOV (20) & # 8211; talvez este seja 20 dias? Não é 20%?
Uma pergunta não é uma declaração.
De qualquer forma, parece um maravilhoso software. Apenas vou seguir o manual.
Sim, parece Vol é uma série temporal. Desculpe incomodá-lo.
Sim, a volatilidade anualizada dos últimos 20 dias. Se fosse 20%, eu teria escrito: HistVolOV = 0,2.
Não. Não o corta. Você não pode usar uma única medida de volatilidade histórica para tudo, desde uma opção de um mês até um prazo de validade de 24 meses. Talvez o esquema inteiro seja inválido. Por exemplo, IV para um vencimento de dois anos do SPX é atualmente de 15%, enquanto uma opção que expira nos próximos dias é de 5% de ish.
Pode ser inválido usar dados manufaturados. Exceto se você tratá-lo como uma espécie de teste de Monte Carlo: isso é o que pode / poderia ter acontecido / pode acontecer.
Anthony, o script está calculando o preço atual de uma opção. O preço atual depende da volatilidade atual. Não há volatilidade de 24 meses atrás.
Você calcula o valor das opções européias com a fórmula Black Scholes e as opções americanas, como no script acima, com um método de aproximação. Ambos os métodos normalmente usam 20 dias de volatilidade. O método de amostragem de volatilidade pode ser diferente, mas os 20 dias são bastante comuns para todas as opções de software de negociação que eu conheço. E você pode ver a partir da comparação com preços reais acima que esse período funciona bastante bem.
Não, você não pode calcular o preço atual de uma opção em um determinado dia dessa maneira. Não há como reproduzir com precisão a volatilidade implícita, portanto, o preço em qualquer data no passado. E é a volatilidade implícita em que nos interessa, e não o histórico. Eu concordo totalmente sobre Black Scholes, é claro, e os seus usos, mas é carrinho antes do cavalo esperar para ligar a volatilidade de 20 dias em 3 de janeiro de 1985 e esperar que ele venha um preço exato negociado no fechamento naquele dia para o SPX para qualquer greve ou expiração.
Está olhando para ele no caminho errado.
O que você pode tentar é brincar com diferentes métodos para estimar o que o implícito vol / preço pode ter ocorrido em 3 de janeiro de 1985 para uma determinada greve e expiração de uma opção SPX.
Por exemplo, você pode usar uma volatilidade histórica de 5 dias para uma opção que expira em uma semana e uma volatilidade de 252 dias para uma opção que expira em um ano. Ou você pode implicar volatilidades ao analisar a estrutura de prazo dos contratos de futuros da VIX a partir de 2004. Ou, pelo menos, usar o próprio índice VIX, que retorna a 1986 como entrada para a volatilidade de 30 dias.
Seja lá o que fizer, você ganhou realmente estar produzindo algo como o que realmente foi negociado no dia. Ou, pelo menos, não de forma consistente e precisa em todos os períodos e greves.
Eu acredito que o processo que você descreve tem um valor, mas que o resultado de ambos os preços produzidos e os testes de retorno resultantes disso serão mais parecidos com um processo aleatório de moet carlo do que com um teste de volta nos dados de preços negociados reais.
Eu acredito que é um processo valioso, mas que o que é produzido é uma série de universos paralelos: o que poderia ter acontecido com uma determinada estratégia ao longo de um determinado período de tempo usando volatilidades implícitas que podem ou não ter sido negociadas.
Desculpe-me por muito tempo e sou um admirador do seu produto e do seu script acima. Eu não teria pensado em gerar preços falsos de opções se não tivesse visto o seu excelente artigo.
Mas, na minha opinião, pelo menos você precisa repensar sua contribuição para a fórmula BS quanto à volatilidade.
Aliás, fique bem ciente de que admiro seu produto e seus pensamentos. Não imagino que estou sendo difícil. Igualmente, por favor, não imagine, acredito que eu seja # 8220; certo e # 8221 ;!
Estou apenas aproveitando a jornada e o diálogo com você e espero que juntos possamos melhorar a compreensão do tema.
O meu é limitado!
Diga a data em que você está procurando a 7 de janeiro de 1987. Naquele dia, a volatilidade histórica de SPX calculada em mais de 20 dias de negociação foi de 15,23. A volatilidade histórica nesse dia nos últimos 252 dias foi de 14,65.
Por 5 dias tinha 18 anos.
Agora diga que estou tentando calcular & # 8221; (adivinhar) um preço (que poderia ter sido negociado em 7 de janeiro de 1987) para uma opção que expira em 5 dias, 20 dias e 252 dias. Vamos assumir ATM.
My suspicion is that it would not be helpful to use 15.23 for all three expiries.
Thank you for your kind words. Finance is complex. My knowledge is even more limited and I’m daily surprised by some results that I didn’t expect. & # 8211; In your example, the 15.23% volatility is the correct value. If you used a higher volatility period for higher expiration, then it depends on whether it’s still annualized volatility or just volatility of a longer time. In the latter case the results are off by some factor, in the former case they are based on too old volatility and thus not up to date. & # 8211; You’re right about the implied volatility, since it is affected by the difference of theoretical and real option value. So you cannot use the script above for getting it. Otherwise you would just get back some approximation of the current volatility. You need real option prices for IV.
I hope that it’s alright that I discuss this with just a few of my clientele, this will assist.
QUANTLABS.
Quant Resources for Traders.
Intro to my Future and Options Trading Formulas Python script.
Introducing my Future and Options Trading Formulas Python script.
I have made a complete Python trading script which will focus on dozens of formulas for fundamental trading with options and futures. As I already hinted in the past, this is now becoming the crust of my Phase 2 for my “Independent Algo trading business in Python” course series which we just started last week.
This Python script will be made available to all my Quant Elite members immediately.
Use CFTC for historical futures data and open interest commitment of trading.
Lastly, did you know about something called Commitment of Trading reports? These can be made available for free to measure open interest in all the major commodities traded throughout the US. Many professional traders use this as a means to measure market direction every Tuesday when these reports come out. Also, expect to see these in my Phase 3 on using Forex to measure government macroeconomic conditions.
There you go, another tidbit of trading goodness where I try to help make you successful in your trading. I mean seriously, I do the this now almost 2 times a week LIVE now for both my Quant Elite members and other Meetup group members.
Hear all your pricing options for my courses that recently to access al the above.
Required to be a ‘Quant Elite Member’ for access to all of the above.
OBSERVAÇÃO Eu agora posto minhas ALERTAS DE NEGOCIAÇÃO na minha conta pessoal de FACEBOOK e TWITTER. Não se preocupe porque não publico vídeos de gato estúpidos ou o que eu como!
Comércio com Python.
Saturday, May 20, 2017.
Yahoo is dead, long live Yahoo!
Note: the data provided seems to be adjusted for splits, but not for dividends.
Saturday, February 20, 2018.
A simple statistical edge in SPY.
It occurred to me that most of the time that there is much talk in the media about the market crashing (after big losses over several days timespan), quite a significant rebound sometimes follows.
In the past I've made a couple of mistakes by closing my positions to cut losses short, just to miss out a recovery in the following days.
After a period of consecutive losses, many traders will liquidate their positions out of fear for even larger loss. Much of this behavior is governed by fear, rather than calculated risk. Smarter traders come in then for the bargains.
After consectutive 3 or more losses, go long. Exit on next close.
This does not look bad at all! Looking a the sharpe ratios the strategy scores a descent 2.2 versus 0.44 for the B&H. This is actually pretty good! ( don't get too excited though, as I did not account for commision costs, slippage etc ).
While the strategy above is not something that I would like to trade simply because of the long time span, the theory itself provokes futher thoughts that could produce something useful. If the same principle applies to intraday data, a form of scalping strategy could be built. In the example above I've oversimplified the world a bit by only counting the *number* of down days, without paying attention to the depth of the drawdown. Also, position exit is just a basic 'next-day-close' . There is much to be improved, but the essence in my opinion is this:
Monday, November 17, 2018.
Trading VXX with nearest neighbors prediction.
My definition of these two is:
volatility premium = VIX-realizedVol delta (term structure slope) = VIX-VXV.
Combining both premium and delta into one model has been a challenge for me, but I always wanted to do a statistical approximation. In essence, for a combination of (delta, premium), I'd like to find all historic values that are closest to the current values and make an estimation of the future returns based on them. A couple of times I've started writing my own nearest-neighbor interpolation algorithms, but every time I had to give up. until I came across the scikit nearest neighbors regression. It enabled me to quickly build a predictor based on two inputs and the results are so good, that I'm a bit worried that I've made a mistake somewhere.
create a dataset of [ delta, premium ] -> [ VXX next day return ] (in-of-sample) create a nearest-neighbor predictor based on the dataset above trade strategy (out-of-sample) with the rules: go long if predicted return > 0 go short if predicted return <0.
In the last two plots, the strategy seems to perform the same in - and out-of-sample. Sharpe ratio is around 2.3.
I'm very pleased with the results and have the feeling that I've only been scratching the surface of what is possible with this technique.
Wednesday, July 16, 2018.
Simple backtesting module.
My search of an ideal backtesting tool (my definition of 'ideal' is described in the earlier 'Backtesting dilemmas' posts) did not result in something that I could use right away. However, reviewing the available options helped me to understand better what I really want. Of the options I've looked at, pybacktest was the one I liked most because of its simplicity and speed. After going through the source code, I've got some ideas to make it simpler and a bit more elegant. From there, it was only a small step to writing my own backtester, which is now available in the TradingWithPython library.
find entry and exits -> calculate pnl and make plots with backtester -> post-process strategy data.
Saturday, June 7, 2018.
Boosting performance with Cython.
5k samples as test data. Here comes the original version of my drawdown function (as it is now implemented in the TradingWithPython library)
Hmm 1.2 seconds is not too speedy for such a simple function. There are some things here that could be a great drag to performance, such as a list *highwatermark* that is being appended on each loop iteration. Accessing Series by their index should also involve some processing that is not strictly necesarry. Let's take a look at what happens when this function is rewritten to work with numpy data.
Well, this is much faster than the original function, approximately 40x speed increase. Still there is much room for improvement by moving to compiled code with cython Now I rewrite the dd function from above, but using optimisation tips that I've found on the cython tutorial . Note that this is my first try ever at optimizing functions with Cython.
Wow, this version runs in 122 micro seconds, making it ten thousand times faster than my original version! I must say that I'm very impressed by what the Cython and IPython teams have achieved! The speed compared with ease of use is just awesome!
P. S. I used to do code optimisations in Matlab using pure C and. mex wrapping, it was all just pain in the ass compared to this.
Tuesday, May 27, 2018.
Backtesting dilemmas: pyalgotrade review.
First impression: actively developed, pretty good documentation, more than enough feautures ( TA indicators, optimizers etc) . Looks good, so I went on with the installation which also went smoothly.
The tutorial seems to be a little bit out of date, as the first command yahoofinance. get_daily_csv() throws an error about unknown function. No worries, the documentation is up to date and I find that the missing function is now renamed to yahoofinance. download_daily_bars(symbol, year, csvFile) . The problem is that this function only downloads data for one year instead of everything from that year to current date. So pretty useless.
After I downloaded the data myself and saved it to csv, I needed to adjust the column names because apparently pyalgotrade expects Date, Adj Close, Close, High, Low, Open, Volume to be in the header. That is all minor trouble.
Following through to performance testing on an SMA strategy that is provided in the tutorial. My dataset consists of 5370 days of SPY:
That is actually pretty good for an event-based framework.
But then I tried searching documentation for functionality needed to backtest spreads and multiple asset portfolios and just could not find any. Then I tried to find a way to feed pandas DataFrame as an input to a strategy and it happens to be not possible, which is again a big disappointment. I did not state it as a requirement in the previous post, but now I come to realisation that pandas support is a must for any framework that works with time series data. Pandas was a reason for me to switch from Matlab to Python and I never want to go back.
Conclusion pyalgotrade does not meet my requrement for flexibility. It looks like it was designed with classic TA in mind and single instrument trading. I don’t see it as a good tool for backtesting strategies that involve multiple assets, hedging etc.
Monday, May 26, 2018.
Backtesting dilemmas.
Be good approximation of the real world. This one is of course the most important requirement . Allow unlimited flexibility: the tooling should not stand in the way of testing out-of-the-box ideas. Everything that can be quantified should be usable. Be easy to implement & maintain. It is all about productivity and being able to test many ideas to find one that works. Allow for parameter scans, walk-forward testing and optimisations. This is needed for investigating strategy performance and stability depending on strategy parameters. The problem with satisfying all of the requirements above is that #2 and #3 are conflicting ones. There is no tool that can do everything without the cost of high complexity (=low maintainablity). Typically, a third party point-and-click tool will severely limit freedom to test with custom signals and odd portfolios, while at the other end of the spectrum a custom-coded diy solution will require tens or more hours to implement with high chances of ending up with cluttered and unreadable code. So in attempt to combine the best of both worlds, let’s start somewehere in the middle: use an existing backtesting framework and adapt it to our taste.
In the following posts I’ll be looking at three possible candidates I’ve found:
Zipline is widely known and is the engine behind Quantopian PyAlgotrade seems to be actively developed and well-documented pybacktest is a light-weight vector-based framework with that might be interesting because of its simplicity and performance. I’ll be looking at suitability of these tools benchmarking them against a hypothetical trading strategy. If none of these options fits my requirements I will have to decide if I want to invest into writing my own framework (at least by looking at the available options I’ll know what does not work) or stick with custom code for each strategy.
First one for the evaluation is Zipline .
My first impression of Zipline and Quantopian is a positive one. Zipline is backed by a team of developers and is tested in production, so quality (bugs) should be great. There is good documentation on the site and an example notebook on github .
To get a hang of it, I downloaded the exampe notebook and started playing with it. To my disappointment I quickly run into trouble at the first example Simplest Zipline Algorithm: Buy Apple . The dataset has only 3028 days, but running this example just took forever. Here is what I measured:
I did not expect stellar performance as zipline is an event-based backtester, but almost a minute for 3000 samples is just too bad. This kind of performance would be prohibitive for any kind of scan or optimization. Another problem would arise when working with larger datasets like intraday data or multiple securities, which can easily contain hundreds of thousands of samples.
Unfortunately, I will have to drop Zipline from the list of useable backtesters as it does not meet my requirement #4 by a fat margin.
In the following post I will be looking at PyAlgotrade.
Note: My current system is a couple of years old, running an AMD Athlon II X2 @2800MHZ with 3GB of RAM. With vector-based backtesting I’m used to calculation times of less than a second for a single backtest and a minute or two for a parameter scan. A basic walk-forward test with 10 steps and a parameter scan for 20x20 grid would result in a whooping 66 hours with zipline. I’m not that paitient.
Quarta-feira, 15 de janeiro de 2018.
Starting IPython notebook from windows file exlorer.
Monday, January 13, 2018.
Leveraged ETFs in 2018, where is your decay now?
Knowing the leveraged etf behavior I would expect that leveraged etfs outperformed their benchmark, so the strategy that would try to profit from the decay would lose money.
Once we normalize the prices to 100$ at the beginning of the backtest period (250 days) it is apparent that the 2x etf outperforms 1x etf.
Full source code of the calculations is available for the subscribers of the Trading With Python course. Notebook #307.
Thursday, January 2, 2018.
Putting a price tag on TWTR.
Price derived from user value.
TWTR is currently more valuable per user thatn FB or LNKD. This is not logical as both competitors have more valuable personal user data at their disposal. GOOG has been excelling at extracting ad revenue from its users. To do that, it has a set of highly diversified offerings, from search engine to Google+ , Docs and Gmail. TWTR has nothing resembling that, while its value per user is only 35% lower thatn that of Google. TWTR has a limited room to grow its user base as it does not offer products comparable to FB or GOOG offerings. TWTR has been around for seven years now and most people wanting an accout have got their chance. The rest just does not care. TWTR user base is volatile and is likely to move to the next hot thing when it will become available.
Price derived from future earnings.
Conclusão.
Thursday, September 19, 2018.
Trading With Python course available!
Sunday, August 18, 2018.
Short VXX strategy.
In an ideal world, if you hold it long enough, a profit generated by time decay in the futures and etn rebalancing is guaranteed, but in the short term, you'd have to go through some pretty heavy drawdowns. Just look back at the summer of 2018. I have been unfortunate (or foolish) enough to hold a short VXX position just before the VIX went up. I have almost blown my account by then: 80% drawdown in just a couple of days resulting in a threat of margin call by my broker. Margin call would mean cashing the loss. This is not a situation I'd ever like to be in again. I knew it would not be easy to keep head cool at all times, but experiencing the stress and pressure of the situation was something different. Luckily I knew how VXX tends to behave, so I did not panic, but switched side to XIV to avoid a margin call. The story ends well, 8 month later my portfolio was back at strength and I have learned a very valuable lesson.
Having said that, let's take a look at a strategy that minimizes some of the risks by shorting VXX only when it is appropriate.
The chart above shows VIX-VXV data since January 2018. Data points from last year are shown in red.
I have chosen to use a quadratic fit between the two, approximating VXV = f(VIX) . The f(VIX) is plotted as a blue line.
The values above the line represent situation when the futures are in stronger than normal contango. Now I define a delta indicator, which is the deviation from the fit: delta = VXV-f(VIX).
It is apparent that green areas correspond to a negative returns in the VXX.
Short VXX when delta > 0 Constant capital ( bet on each day is 100$) No slippage or transaction costs.
Getting short volume from BATS.
Thursday, August 15, 2018.
Building an indicator from short volume data.
We need more information additional to what is contained the price to make a more informed guess about what is going to happen in the near future. An excellent example of combining all sorts of info to a clever analysis can be found on the The Short Side of Long blog. Producing this kind of analysis requires a great amount of work, for which I simply don't have the time as I only trade part-time.
So I built my own 'market dashboard' that automatically collects information for me and presents it in an easily digestible form. In this post I'm going to show how to build an indicator based on short volume data. This post will illustrate the process of data gathering and processing.
BATS exchange provides daily volume data for free on their site.
Short volume data of the BATS exchange is contained in a text file that is zipped. Each day has its own zip file. After downloading and unzipping the txt file, this is what's inside (first several lines):
This data is needs quite some work before it can be presented in a meaningful manner.
What I really want is not just the data for one day, but a ratio of short volume to total volume for the past several years, and I don't really feel like downloading 500+ zip files and copy-pasting them in excel manually.
Luckily, full automation is only a couple of code lines away:
First we need to dynamically create an url from which a file will be downloaded:
Step 5: Make a chart:
Sunday, March 17, 2018.
Trading With Python course - status update.
Starting today I will be preparing a new website and material for the course, which will start in the second week of April.
Thursday, January 12, 2018.
Reconstructing VXX from CBOE futures data.
The scripts below automate this process. The first one, downloadVixFutures. py , gets the data from cboe, saves each file in a data directory and then combines them in a single csv file, vix_futures. csv.
The second script reconstructVXX. py parses the vix_futures. csv, calculates the daily returns of VXX and saves results to reconstructedVXX. csv .
To check the calculations, I've compared my simulated results with the SPVXSTR index data, the two agree pretty well, see the charts below.
Code for reconstructing the VXX.
Monday, December 26, 2018.
howto: Observer pattern.
A listener class can be of any type, here I make a bunch of ExampleListener classes, named Bob, Dave & Charlie. All of them have a method, that is that is subscribed to Sender . The only special thing about the subscribed method is that it should contain three parameters: sender, event, message . Sender is the class reference of the Sender class, so a listener would know who sent the message. Event is an identifier, for which I usually use a string. Optionally, a message is the data that is passed to a function.
A nice detail is that if a listener method throws an exception, it is automatically unsubscribed from further events.
Wednesday, December 14, 2018.
Plotting with guiqwt.
data aquisition: ibpy & tradingWithPython. lib. yahooData - check.
data container: pandas & sqlite - check.
plotting library: matplotlib - ehm. Não.
But as it often happens with Python, somebody, somewhere has already written a kick-ass toolkit that is just perfect for the job. And it looks like guiqwt is just it. Interactive charts are just a couple of code lines away now, take a look at an example here: Creating curve dialog . For this I used guiqwt example code with some minor tweaks.
. If only I knew how to set dates on the x-axis.
Friday, November 4, 2018.
How to setup Python development environment.
2. Install Tortoise SVN. This is a utility that you need to pull the source code from Google Code.
3. Install Pandas (time series library)
To get the code, use 'Svn Checkout' windows explorer context menu that is available after installing Tortoise SVN. Checkout like this (change Checkout directory to the location you want, but it should end with tradingWithPython ):
Ok, all done, now you can run the examples from \cookbok dir.
Friday, October 28, 2018.
kung fu pandas will solve your data problems.
Some time ago I've come across a data analysis toolkit pandas especially suited for working with financial data. After just scratching the surface of its capabilities I'm already blown away by what it delivers. The package is being actively developed by Wes McKinney and his ambition is to create the most powerful and flexible open source data analysis/manipulation tool available. Well, I think he is well on the way!
Here is the result:
Man, this could have saved me a ton of time! But it still will help me in the future, as I'll be using its DataFrame object as a standard in my further work.
Trading options python
Puxe pedidos 0.
Participe do GitHub hoje.
O GitHub é o lar de mais de 20 milhões de desenvolvedores que trabalham juntos para hospedar e rever o código, gerenciar projetos e criar software juntos.
Clone com HTTPS.
Use o Git ou o check-out com o SVN usando o URL da web.
I have Created code for Options Trading based on Various Trading Technical Indicators.
Volatility Index (VIX) based Strategy Put / Call Ratio (PCR) based Strategy Trading Index (TRIN) based Strategy Turtle Trading based Strategy.
Still working on more advanced Strategies based on Black Scholes Merton Option Pricing . Next I will work on incorporating Time Series and Neural Networks (RNNs to be specific) to improve accuraacy (Decrease Standard Deviation from current models) and Perfomance.
LSTMs have gave me promosing results and now I am exploring advance LSTM like MD-LSTM and MiD-LSTM for better prediction and more feature inclusion.
&cópia de; 2018 GitHub, Inc. Termos Privacidade Segurança Status Ajuda.
Você não pode executar essa ação neste momento.
Você fez login com outra guia ou janela. Recarregue para atualizar sua sessão. Você se separou em outra guia ou janela. Recarregue para atualizar sua sessão.
O'Reilly.
Em nosso radar.
Em nosso radar.
Negociação algorítmica em menos de 100 linhas de código Python.
Se você está familiarizado com o comércio financeiro e conhece o Python, você pode começar com o comércio algorítmico básico em nenhum momento.
Se você quiser saber mais sobre a análise de dados financeiros com o Python, confira Python for Finance pela Yves Hilpisch.
Negociação Algorítmica.
A negociação algorítmica refere-se à negociação automatizada e automatizada de instrumentos financeiros (com base em algum algoritmo ou regra) com pouca ou nenhuma intervenção humana durante as horas de negociação. Quase qualquer tipo de instrumento financeiro - sejam ações, moedas, commodities, produtos de crédito ou volatilidade - pode ser negociado de tal forma. Não só isso, em certos segmentos de mercado, os algoritmos são responsáveis pela maior parte do volume comercial. Os livros The Quants de Scott Patterson e Mais dinheiro do que Deus por Sebastian Mallaby pintam uma imagem vívida dos começos do comércio algorítmico e das personalidades por trás do seu aumento.
As barreiras à entrada para negociação algorítmica nunca foram menores. Não muito tempo atrás, apenas investidores institucionais com orçamentos de TI em milhões de dólares poderiam participar, mas hoje mesmo indivíduos equipados apenas com um notebook e uma conexão com a Internet podem começar em poucos minutos. Algumas tendências principais estão por trás desse desenvolvimento:
Software de código aberto: cada pedaço de software que um comerciante precisa para começar na negociação algorítmica está disponível na forma de código aberto; especificamente, Python tornou-se o idioma e o ecossistema de escolha. Abrir fontes de dados: cada vez mais valiosos conjuntos de dados estão disponíveis a partir de fontes abertas e gratuitas, fornecendo uma grande quantidade de opções para testar hipóteses e estratégias de negociação. Plataformas de negociação on-line: existe um grande número de plataformas de negociação on-line que fornecem acesso fácil e padronizado aos dados históricos (através de APIs RESTful) e dados em tempo real (através de APIs de streaming de soquete) e também oferecem recursos comerciais e de portfólio (por meio de APIs programáticas ).
Este artigo mostra como implementar um projeto de negociação algorítmica completo, desde testar a estratégia até realizar negócios automatizados em tempo real. Aqui estão os principais elementos do projeto:
Estratégia: escolhi uma estratégia de impulso de séries temporais (ver Moskowitz, Tobias, Yao Hua Ooi e Lasse Heje Pedersen (2018): "Time Series Momentum". Journal of Financial Economics, Vol. 104, 228-250.), Que basicamente, pressupõe que um instrumento financeiro que tenha funcionado bem / mal continuará a fazê-lo. Plataforma: escolhi Oanda; Isso permite que você troque uma variedade de contratos de alavancagem por diferenças (CFDs), que essencialmente permitem apostas direcionais em um conjunto diversificado de instrumentos financeiros (por exemplo, moedas, índices de ações, commodities). Dados: obteremos todos os nossos dados históricos e dados de transmissão da Oanda. Software: Usaremos o Python em combinação com os poderosos pandas da biblioteca de análise de dados, além de alguns pacotes Python adicionais.
O seguinte pressupõe que você tenha uma instalação Python 3.5 disponível com as principais bibliotecas de análise de dados, como NumPy e pandas, incluídas. Caso contrário, você deve, por exemplo, baixar e instalar a distribuição do Anaconda Python.
Conta Oanda.
No oanda, qualquer pessoa pode se inscrever para uma demonstração de demonstração gratuita ("paper trading") em poucos minutos. Depois de ter feito isso, para acessar a API Oanda por meio de programação, você precisa instalar o pacote Python relevante:
Para trabalhar com o pacote, você precisa criar um arquivo de configuração com o nome do arquivo oanda. cfg que possui o seguinte conteúdo:
Substitua as informações acima com o ID e o token que você encontra em sua conta na plataforma Oanda.
A execução deste código o equipa com o objeto principal para trabalhar programaticamente com a plataforma Oanda.
Backtesting.
Nós já criamos tudo o que é necessário para começar com a análise da estratégia de impulso. Em particular, podemos recuperar dados históricos da Oanda. O instrumento que utilizamos é EUR_USD e é baseado na taxa de câmbio EUR / USD.
O primeiro passo no backtesting é recuperar os dados e convertê-lo em um objeto DataFrame de pandas. O conjunto de dados é para os dois dias 8 e 9 de dezembro de 2018, e tem uma granularidade de um minuto. A saída no final do seguinte bloco de código fornece uma visão geral detalhada do conjunto de dados. Ele é usado para implementar o backtesting da estratégia de negociação.
Em segundo lugar, formalizamos a estratégia de impulso ao dizer a Python que obtenha o retorno de registro médio nas últimas barras de 15, 30, 60 e 120 minutos para derivar a posição no instrumento. Por exemplo, o retorno do log médio para as últimas barras de 15 minutos dá o valor médio das últimas 15 observações de retorno. Se esse valor for positivo, vamos / ficamos longos o instrumento negociado; Se é negativo, vamos / ficamos curtos. Para simplificar o código que se segue, apenas confiamos nos valores closeAsk que recuperamos através do nosso bloco anterior de código:
Em terceiro lugar, para derivar o desempenho absoluto da estratégia momentum para os diferentes intervalos de momentum (em minutos), você precisa multiplicar os posicionamentos derivados acima (deslocados por um dia) pelos retornos do mercado. Veja como fazer isso:
A inspeção da parcela acima revela que, ao longo do período do conjunto de dados, o próprio instrumento negociado tem um desempenho negativo de cerca de -2%. Entre as estratégias de impulso, a baseada em 120 minutos é melhor com um retorno positivo de cerca de 1,5% (ignorando a propagação / oferta). Em princípio, essa estratégia mostra "alfa real": ele gera um retorno positivo mesmo quando o próprio instrumento mostra um negativo.
Negociação automatizada.
Depois de decidir qual estratégia de negociação implementar, você está pronto para automatizar a operação de negociação. Para acelerar as coisas, estou implementando a negociação automatizada com base em doze barras de cinco segundos para a estratégia de momentum da série temporal, em vez de barras de um minuto, como usadas para testes anteriores. Uma única e bastante concisa classe o truque:
O código abaixo permite que a classe MomentumTrader faça seu trabalho. O comércio automatizado ocorre no impulso calculado em 12 intervalos de comprimento cinco segundos. The class automatically stops trading after 250 ticks of data received. Isso é arbitrário, mas permite uma demonstração rápida da classe MomentumTrader.
A saída acima mostra os negócios únicos executados pela classe MomentumTrader durante uma execução de demonstração. A captura de tela abaixo mostra a aplicação de área de trabalho fxTradePractice da Oanda, onde uma negociação da execução da classe MomentumTrader em EUR_USD está ativa.
Todos os exemplos de resultados apresentados neste artigo são baseados em uma conta demo (onde apenas o dinheiro do papel é usado em vez do dinheiro real) para simular o comércio algorítmico. Para mudar para uma operação comercial ao vivo com dinheiro real, você simplesmente precisa configurar uma conta real com a Oanda, fornecer fundos reais e ajustar o ambiente e os parâmetros da conta usados no código. O próprio código não precisa ser alterado.
Conclusões.
Este artigo mostra que você pode iniciar uma operação básica de negociação algorítmica com menos de 100 linhas de código Python. Em princípio, todas as etapas de um projeto desse tipo são ilustradas, como recuperar dados para fins de backtesting, testar uma estratégia momentum e automatizar a negociação com base em uma especificação estratégica momentum. O código apresentado fornece um ponto de partida para explorar muitas direções diferentes: usando estratégias alternativas de negociação algorítmica, trocando instrumentos alternativos, trocando múltiplos instrumentos ao mesmo tempo, etc.
A popularidade do comércio algorítmico é ilustrada pelo aumento de diferentes tipos de plataformas. Por exemplo, a Quantopian - uma plataforma de teste back-test baseada em web e Python para estratégias de negociação algorítmica - informou no final de 2018 que atraiu uma base de usuários de mais de 100.000 pessoas. As plataformas de negociação on-line como a Oanda ou aquelas para criptografia como o Gemini permitem que você comece em mercados reais em poucos minutos e atenda a milhares de comerciantes ativos ao redor do globo.
Se você quiser saber mais sobre a análise de dados financeiros com o Python, confira Python for Finance pela Yves Hilpisch.
Yves Hilpisch.
O Dr. Yves J. Hilpisch é fundador e sócio-gerente da The Python Quants (tpq. io), um grupo que se concentra no uso de tecnologias de código aberto para ciência de dados financeiros, negociação algorítmica e finanças computacionais. Ele é o autor dos livros Python for Finance (O'Reilly, 2018), Derivatives Analytics com Python (Wiley, 2018) e Volatilidade e Derivados de Variância (Wiley, 2017). Yves palestras em finanças computacionais no Programa CQF (cqf), na ciência dos dados na Universidade de Ciências Aplicadas (htws.
Como posso passar parâmetros para um comando em C #?
Saiba como passar dados para um comando sem violar o padrão de comando em C #.
Como uso o padrão singleton em C #?
Saiba como criar instâncias thread-safe com o padrão singleton em C #.
Como eu deveria formatar consultas Transact-SQL?
Aprenda as possibilidades de formatação para consultas Transact-SQL e desenvolva sua própria estrutura de código.
Como localizar dados em minhas tabelas do SQL Server usando os diagramas do SQL Server Management Studio?
Localize os dados de forma rápida e fácil com a ferramenta de diagrama do SQL Server Management Studio.
Комментариев нет:
Отправить комментарий