Monday 19 March 2018

Estratégia de negociação r


QuantStrat TradeR.


Comércio, QuantStrat, R e muito mais.


Replicando Volatilidade ETN Retorna De CBOE Futures.


Esta publicação irá demonstrar como replicar os ETN de volatilidade (XIV, VXX, ZIV, VXZ) dos futuros CBOE, permitindo que qualquer pessoa crie retorno ETF sintético antes do início, sem custo.


Então, antes de chegar ao algoritmo real, isso depende de uma atualização para o algoritmo de estrutura do termo que eu compartilhei alguns meses atrás.


Nesse algoritmo, por engano (ou com a finalidade da simplicidade), usei dias de calendário como o tempo de expiração, quando deveria ter sido dias úteis, o que também é responsável por fins de semana e feriados, que são um artefato irritante para acompanhar .


Então, aqui é a mudança saliente, no loop que calcula tempos para expirar:


A linha saliente em particular, é esta:


O que é esta função bizdays? Ele vem do pacote bizdays em R.


Há também o script tradingHolidays. R, que faz mais uso do pacote bizdays. Aqui, o que se passa sob o capô no tradingHolidays. R, para aqueles que desejam replicar o código:


Existem dois CSVs que eu compilado manualmente, mas compartilharemos capturas de tela do & # 8211; são as férias da Páscoa (porque eles precisam ser ajustados para virar domingo a sexta-feira por causa das sextas da Páscoa) e o resto dos feriados nacionais.


Aqui está o que a easter csv parece:


E o nonEasterHolidays, que contém o Dia do Ano Novo, Dia de MLK Jr., Dia do Presidente, Dia do Memorial Day, Dia da Independência, Dia do Trabalho, Dia de Ação de Graças e Dia de Natal (juntamente com as datas observadas) CSV:


Além disso, precisamos ajustar os dois dias em que as ações não foram negociadas devido ao furacão Sandy.


Então, a lista de férias parece assim:


Assim, uma vez que temos uma lista de feriados, usamos o pacote bizdays para definir os feriados e os fins de semana (sábado e domingo) como nossos dias não comerciais e usamos essa função para calcular os horários corretos para expirar.


Então, agora que temos a estrutura de expiração atualizada, podemos escrever uma função que irá replicar corretamente os 4 ETNs de volatilidade principal e # 8211; XIV, VXX, ZIV e VXZ.


Aqui é a explicação em inglês:


O VXX é composto por dois contratos, o mês de frente e o mês de atraso, e tem um certo número de dias de negociação (AKA dias úteis) que eleva até expirar, digamos, 17. Durante esse período, o primeiro mês ( Deixe-se chamar M1) vai de ser a totalidade da alocação de fundos, a não ser a alocação de fundos, à medida que o contrato do mês da frente se aproxima do prazo de validade. Ou seja, à medida que um contrato se aproxima do prazo de validade, o segundo contrato recebe gradualmente cada vez mais peso, até que, no termo do contrato do mês da frente, o contrato do segundo mês contenha todos os fundos # 8211, assim como * * * o primeiro mês contrato. Então, diga que você tem 17 dias para expirar no primeiro mês da frente. No termo do contrato anterior, o segundo mês terá um peso de 17/17 & # 8211; 100%, já que se torna o primeiro mês. Então, no próximo dia, esse contrato, agora o primeiro mês, terá um peso de 16/17 no momento, depois 15/17, e assim por diante. Esse numerador é chamado de dr, e o denominador é chamado dt.


No entanto, além disso, há um segundo mecanismo que é responsável pelo VXX que parece, em comparação com um contrato de futuros básico (ou seja, a decadência responsável pela baixa volatilidade dos lucros) e Esse é o & # 8220; instantâneo & # 8221; reequilíbrio. Ou seja, os retornos para um determinado dia são hoje ajustados multiplicados pelos pesos de ontem, sobre os ajustes de ontem multiplicados pelos pesos de ontem, menos um. Ou seja, (S_1_t * dr / dt_t-1 + S_2_t * 1-dr / dt_t-1) / (S_1_t-1 * dr / dt_t-1 + S_2_t-1 * 1-dr / dt_t-1) & # 8211; 1 (Eu poderia usar um tutorial no LaTeX). Então, quando você avança um dia, bem, amanhã, os pesos de hoje se tornam t-1. No entanto, quando os recursos podiam ser reequilibrados? Bem, nos ETNs como VXX e VXZ, o & # 8220; hand-waving & # 8221; é que isso acontece instantaneamente. Ou seja, o peso para o primeiro trimestre foi de 93%, o retorno foi realizado na liquidação (isto é, do acordo para liquidar), e imediatamente após esse retorno foi realizado, o peso do mês da frente muda de 93% para, digamos, 88%. Então, digamos que o Credit Suisse (que emite esses ETNs), tem US $ 10.000 (apenas para manter a aritmética e o número de zeros toleráveis, obviamente, há muito mais na realidade) do XIV em circulação depois de perceber imediatamente os retornos, venderá US $ 500 US $ 9300 no mês da frente e imediatamente movê-los para o segundo mês, então passará imediatamente de US $ 9300 em M1 e US $ 700 em M2 para US $ 8800 em M1 e US $ 1200 em M2. Quando esses $ 500 se moveram? Imediatamente, instantaneamente, e se você quiser, você pode aplicar a terceira lei da Clarke & # 8217; chamada e # 8220; magicamente & # 8221 ;.


A única exceção é o dia após o dia do rolo, no qual o segundo mês simplesmente se torna o mês da frente, já que o mês da frente anterior expira, então o que foi um peso de 100% no segundo mês agora será um peso de 100% no primeiro mês da frente, então há algum código extra que precisa ser escrito para fazer essa distinção.


É assim que funciona para VXX e XIV. Qual a diferença para VXZ e ZIV? É realmente simples, em vez de M1 e M2, o VXZ usa as mesmas ponderações exatas (ou seja, o tempo restante no primeiro mês frente a quantos dias existem para que o contrato seja o primeiro mês), usa M4 , M5, M6 e M7, com M4 tomando dr / dt, M5 e M6 sempre sendo 1, e M7 sendo 1-dr / dt.


Em qualquer caso, aqui está o código.


Então, um grande agradecimento a Michael Kapler da Systematic Investor Toolbox por fazer a replicação original e fornecer seu código. O meu código essencialmente faz a mesma coisa, espero que seja mais comentado.


Então, em última análise, isso funciona? Bem, usando meu código de estrutura de prazo atualizado, posso testar isso.


Enquanto eu não irei colar meu código de estrutura de todo o termo (novamente, disponível aqui, basta atualizar o script com minhas atualizações a partir desta postagem), aqui é como você executou a nova função # 8217; d:


E uma vez que retorna o vxx retorna e o vxz retorna, podemos comparar ambos.


Com o resultado:


Basicamente, uma combinação perfeita.


Vamos fazer o mesmo, com ZIV.


Então, a reconstrução do futuro faz um pouco melhor que o ETN. Mas a trajetória é em grande parte idêntica.


Isso conclui esta publicação. Espero que tenha esclarecido sobre como esses ETN de volatilidade funcionam e como obtê-los diretamente dos dados de futuros publicados pelo CBOE, que são as entradas para o meu algoritmo de estrutura de termos.


Isso também significa que, para as instituições interessadas em negociar minha estratégia, que elas possam obter alavancagem para trocar as variáveis ​​replicadas futura-composta desses ETNs, em maior volume.


Obrigado pela leitura.


NOTAS: Para aqueles interessados ​​em uma estratégia de assinatura de varejo para a volatilidade da negociação, não hesite em assinar minha estratégia de negociação de volatilidade. Para os interessados ​​em me empregar em tempo integral ou para projetos de consultoria de longo prazo, eu posso ser contactado no meu LinkedIn, ou meu e-mail: ilya. kipnis@gmail.


(Don & # 8217; t Get) Contangled Up In Noise.


Este post será sobre investigar a eficácia de contango como um sinal de negociação de volatilidade.


Para aqueles que comercializam volatilidade (como eu), um termo que você pode ver que é um pouco onipresente é o termo & # 8220; contango & # 8221 ;. O que este termo significa?


Bem, simples: significa apenas a proporção do segundo mês dos futuros VIX sobre o primeiro. A idéia é que, quando o segundo mês dos futuros é mais do que o primeiro, a perspectiva das pessoas para a volatilidade é maior no futuro do que para o presente e, portanto, os futuros são "contango & # 8221 ;, que é a maior parte do tempo.


Além disso, aqueles que tentam encontrar idéias de negociação de volatilidade decente podem ter visto muitas vezes que os futuros no contango implicam que a manutenção de uma pequena posição de volatilidade será rentável.


Este é o caso?


Bem, existe uma maneira fácil de responder a isso.


Em primeiro lugar, consulte minha postagem na obtenção de dados de futuros gratuitos do CBOE.


Usando esses dados, podemos obter nosso sinal (isto é, para executar o código nesta publicação, execute o código naquele post).


Agora, vamos obter os nossos dados XIV (novamente, um grande agradecimento ao Sr. Helmuth Vollmeier por providenciar tão gentilmente isso.


Agora, aqui é como isso funciona: como o CBOE não atualiza seus ajustes até cerca de 9:45 AM EST no dia seguinte (por exemplo, os dados de liquidação de terça-feira, não foram liberados até Quarta-feira às 9h45 da manhã), temos que entrar no fim do dia após o incêndio. (Para aqueles que se perguntam, minha estratégia de assinatura usa este mecanismo, dando aos assinantes tempo suficiente para executar ao longo do dia.)


Então, vamos calcular nossos backtest retorna. Aqui é uma função stratStats para calcular algumas estatísticas resumidas.


Com os seguintes resultados:


Então, isso é obviamente um desastre. A inspeção visual mostrará devastadores, triagens plurianuais. Usando o comando table. Drawdowns, podemos ver os piores.


Então, o top 3 é horrível, e então qualquer coisa acima de 30% ainda é bastante horrível. Algumas dessas retiradas duraram vários anos também, com um comprimento maciço até a calha. 458 dias de negociação é quase dois anos, e 364 é de aproximadamente um ano e meio. Imagine ver uma estratégia consistentemente no lado errado do comércio por quase dois anos, e quando tudo é dito e feito, você perdeu três quartos de tudo nessa estratégia.


Não há nenhum revestimento de açúcar: uma tal estratégia só pode ser chamada de lixo total.


Vamos tentar uma modificação: nós exigiremos ambos contango (C2 & gt; C1), e que contango esteja acima da média móvel simples de 60 dias, semelhante à minha estratégia VXV / VXMT.


Com os resultados:


Então, um Calmar ainda com segurança abaixo de 1, um índice de desempenho de úlcera ainda no porão, uma redução máxima que passou o ponto em que as pessoas teriam abandonado a estratégia e assim por diante.


Então, mesmo que tenha sido melhorado, ainda é seguro dizer que esta estratégia não funciona muito bem. Mesmo após a grande retirada de 2007-2008, ainda recebe algumas coisas muito erradas, como estar exposto a todo o mês de agosto de 2017.


Embora eu pense que existem aplicações para contango em investimentos de volatilidade, não acho que o seu uso seja gerar o sinal de volatilidade longo / curto por conta própria. Em vez disso, acho que outros índices e fontes de dados fazem um trabalho melhor disso. Como o VXV / VXMT, que desde então foi iterado para formar minha estratégia de assinatura.


Obrigado pela leitura.


NOTA: Atualmente, estou buscando oportunidades de rede, projetos de longo prazo e posições de tempo integral relacionadas ao meu conjunto de habilidades. Meu perfil linkedIn pode ser encontrado aqui.


Comparando algumas estratégias de fácil volatilidade de investimento e o comando Table. Drawdowns.


Esta publicação será sobre comparar estratégias do papel & # 8220; Easy Volatility Investing & # 8221 ;, juntamente com uma demonstração do comando de R & # 8217; s table. Drawdowns.


Em primeiro lugar, antes de ir mais longe, enquanto penso que os pressupostos de execução encontrados no EVI não oferecem boas estratégias para o comércio vivo real (embora os compromissos de risco / recompensa também deixem muito espaço para melhorar), acho que essas estratégias são excelentes como benchmarks.


Então, há algum tempo, fiz um teste fora de amostra para uma das estratégias encontradas no EVI, que pode ser encontrada aqui.


Usando a mesma fonte de dados, eu também obtive dados para o SPY (embora, novamente, o AlphaVantage também possa fornecer este serviço gratuitamente para aqueles que não usam Quandl).


Aqui é o novo código.


Então, uma explicação: há quatro fluxos de retorno aqui e compre e segure XIV, o impulso DDN de uma publicação anterior e outras duas estratégias.


O mais simples, chamado VRatio, é simplesmente a proporção do VIX sobre o VXV. Perto do fechamento, verifique esta quantidade. Se isso for menor que um, compre XIV, caso contrário, compre o VXX.


O outro, denominado estratégia de Risco de Volatilidade Premium (ou VRP para breve), compara a volatilidade histórica de 10 dias (ou seja, o desvio padrão de dez dias de duração anualizado) do S & amp; P 500, o subtrai do VIX e leva uma média móvel de 5 dias disso. Perto do fechamento, quando esse acima de zero (ou seja, VIX é maior do que a volatilidade histórica), siga o XIV longo, caso contrário, vá ao VXX longo.


Mais uma vez, todas essas estratégias são efetivamente observadas perto / no fechamento, compre no próximo & # 8221 ;, por isso são úteis para fins de demonstração, embora não para fins de implementação em qualquer conta em grande sem incorrer no impacto do mercado.


Aqui estão os resultados, desde 2018 (ou seja, em torno da época do início real do XIV & # 8217;


Para observar, tanto o impulso como a estratégia VRP conseguiram um desempenho inferior à compra e retenção do XIV desde 2018. A estratégia VRatio, por outro lado, supera a performance.


Aqui, uma função de estatísticas de resumo que compila algumas métricas de desempenho de nível superior.


Para observar, todas as estratégias de benchmark sofreram grandes cortes desde o início do XIV & # 8217; nós podemos examinar usando o comando table. Drawdowns, como se vê abaixo:


Observe que o comando table. Drawdowns examina apenas um fluxo de retorno por vez. Além disso, o argumento principal especifica quantos levantamentos a serem vistos, ordenados pela maior retirada primeiro.


Uma das razões pelas quais eu penso que essas estratégias parecem sofrer as reduções que eles fazem é que eles são todos ativos em um ativo, ou seu oposto exato, sem espaço para erros.


Uma última coisa, para os curiosos, aqui está a comparação com a minha estratégia desde 2018 (essencialmente no início do XIV), comparado com as estratégias do EVI (que tenho negociado com o capital real desde setembro e abriram recentemente um serviço de inscrição para):


Obrigado pela leitura.


NOTA: Atualmente, estou procurando oportunidades em rede e em tempo integral relacionadas ao meu conjunto de habilidades. Meu perfil do LinkedIn pode ser encontrado aqui.


Lançamento do meu serviço de assinatura.


Depois de avaliar o interesse de meus leitores, eu decidi abrir um serviço de assinatura. I & # 8217; copiar e colar as perguntas frequentes, ou a minha melhor tentativa de tentar responder tantas perguntas quanto possível antes do tempo e pode responder mais no futuro.


Eu estou escolhendo usar Patreon apenas para terceirizar todos os aspectos técnicos de manipulação de assinaturas e criar uma fonte centralizada para publicar conteúdo baseado em assinatura.


Perguntas frequentes (copiadas da página de inscrição):


Obrigado pela visita. Depois de avaliar o interesse dos meus leitores no meu site principal (quantstrattrader. wordpress), eu criei isso como uma página de inscrição para estratégias quantitativas de investimento, com o objetivo de fazer com que os assinantes transformem seu dinheiro em mais dinheiro, sem taxas de assinatura (espero). Os sistemas que desenvolvo provêm de um aprendizado de profissionais experientes de negociação quantitativa e pesquisadores seniores em grandes empresas. O sistema atual que eu inicialmente publiquei um protótipo por vários anos atrás e assisti que fosse rastreado, antes de começar a implantar minha própria capital no início deste ano e fazer as modificações mais recentes ainda mais recentemente.


E enquanto a performance passada não garante resultados futuros e o passado não se repete, muitas vezes rima, então deixe o dinheiro em mais dinheiro.


Algumas perguntas frequentes sobre a estratégia:


Qual é o preço de assinatura desta estratégia?


Atualmente, depois de avaliar o interesse dos leitores e fazer pesquisas com base em outros sites, o preço tentativo é de US $ 50 / mês. Como esta estratégia cria um histórico, isso pode estar sujeito a mudanças no futuro, e as notificações serão feitas nesse evento.


Qual é a descrição da estratégia?


A estratégia é principalmente um sistema de baixa volatilidade que comercializa XIV, ZIV e VXX. No que diz respeito às estratégias de volatilidade, é bastante conservador na medida em que usa várias verificações diferentes para garantir uma posição.


Qual é a vantagem da estratégia?


Em duas palavras: gerenciamento de riscos. Essencialmente, existem alguns critérios separados para selecionar um investimento, e o sistema gasta um tempo não insignificante sem exposição quando alguns desses critérios fornecem sinais contraditórios. Além disso, o sistema usa metodologias disciplinadas em sua construção para evitar parâmetros livres desnecessários e para manter a estratégia tão parcimoniosa quanto possível.


Você troca seu próprio capital com essa estratégia?


Quando foi o período de treinamento na amostra para este sistema?


Um site que não atualiza seu blog (volatilidade simples), uma vez rastreou uma estratégia mais rudimentar que escrevi há vários anos atrás. Fiquei particularmente satisfeito com os resultados dessa pesquisa e, recentemente, recebi informações para melhorar meu sistema em um grau muito maior, além de ganhar confiança para investir capital vivo nele.


Quantos negócios por ano faz o sistema?


No backtest de 20 de abril de 2008 até o final de 2018, o sistema efetuou 187 transações no XIV (compra e venda), 160 em ZIV e 52 em VXX. Significando ao longo de aproximadamente 9 anos, houve em média 43 transações por ano. Em alguns casos, isso pode simplesmente mudar de XIV para ZIV ou vice-versa. Em outras palavras, os negócios duram cerca de uma semana (alguns podem ser mais longos, alguns mais curtos).


Quando os sinais serão publicados?


Os sinais serão publicados em algum momento entre as 12 horas e o fechamento do mercado (4 PM EST). Em backtesting, eles são testados como um mercado em certas ordens, para que os indivíduos assumam qualquer risco / recompensa executando anteriormente.


Com que frequência este sistema está no mercado?


Cerca de 56%. No entanto, ao longo do backtesting (e negociação ao vivo), apenas cerca de 9% dos meses têm retorno zero.


Qual é a distribuição dos meses de retorno, perda e zero?


No final de outubro de 2017, houve cerca de 65% de meses vencedores (com um ganho médio de 12,8%), 26% meses perdidos (com uma perda média de 4,9%) e 9% zero meses.


Quais são algumas outras estatísticas sobre a estratégia?


Desde 2018 (em torno do tempo em que o XIV entrou oficialmente no início, em oposição ao uso de dados sintéticos), a estratégia apresentou um retorno anualizado de 82%, com uma redução máxima de 24,8% e um desvio padrão anualizado de 35%. Isso significa uma razão de Sharpe (retorno ao desvio padrão) superior a 2, e uma razão de Calmar superior a 3. Também possui um índice de desempenho de úlcera de 10.


Quais são as piores reduções da estratégia?


Desde 2018 (novamente, em torno da época do início do XIV & # 8217; s), a maior retirada foi de 24,8%, a partir de 31 de outubro de 2018, e registrando uma nova alta patrimonial em 12 de janeiro de 2018. A maior retirada começou em 21 de agosto de 2018. , 2018 e recuperado em 10 de abril de 2018, e durou 160 dias de negociação.


O preço da assinatura mudará no futuro?


Se a estratégia continuar a gerar retornos fortes, então pode haver motivos para aumentar o preço, desde que os retornos o dêem conta.


Pode ser fornecido um sinal de risco conservador para aqueles que podem não ser capazes de tolerar uma redução de 25%?


Uma variante da estratégia que alveja cerca de metade do desvio padrão anualizado da estratégia possui um retorno anualizado de 40% para cerca de 12% de desconto desde 2018. No geral, isso tem uma recompensa ligeiramente maior para as estatísticas de risco, mas ao custo de cortar retornos agregados ao meio.


Can & # 8217; t XIV tem um evento de término?


Isso se refere à idéia de que o XIV ETN termina se perder 80% de seu valor em um único dia. Para dar uma idéia da probabilidade deste evento, usando dados sintéticos, o XIV ETN apresentou uma redução massiva de 92% ao longo da crise financeira de 2008. Para a história desse dado sintético (pré-inicial) e realizado (pós-início), o pior dia absoluto foi um dia de queda de 26,8%. Para notar, a estratégia não estava no XIV durante esse dia.


Qual foi o pior dia da estratégia?


Em 16 de setembro de 2018, a estratégia perdeu 16% em um dia. Este foi o final da cauda de um período positivo que fez cerca de 40%.


Quais são os riscos da estratégia?


O primeiro risco é que, dado que esta estratégia é naturalmente tendenciosa para uma baixa volatilidade, que pode ter potencial para algumas reduções bruscas devido à natureza dos picos de volatilidade. O outro risco é que, dado que essa estratégia às vezes gasta seu tempo em ZIV, isso será inferior ao XIV em alguns dias úteis. Este segundo risco é uma conseqüência de camadas adicionais de gerenciamento de risco na estratégia.


Quão complexa é essa estratégia?


Não excessivamente. É apenas um pouco mais complexo do que uma estratégia básica de momentum ao contar parâmetros gratuitos e pode ser explicado em alguns minutos.


Essa estratégia usa metodologias complexas de aprendizado de máquinas?


Não. Os requisitos de dados para tais algoritmos e o ruído no mundo financeiro tornam muito arriscado aplicar essas metodologias e, até o momento, a pesquisa não deu frutos para justificar sua incorporação.


O volume do instrumento será sempre uma preocupação (particularmente ZIV)?


De acordo com um indivíduo que trabalhou na criação do original VXX ETN (e, por extensão, seu inverso, XIV), novas ações de ETNs podem ser criadas pelo emissor (no caso ZIV & # 8217; Credit Suisse) sob demanda. Em suma, a preocupação do volume é mais uma preocupação com a reputação da pessoa que faz o pedido. Em outras palavras, depende de quão bem a estratégia faz.


A estratégia pode ser responsabilizada / responsável / responsável pela perda / retirada de um assinante?


Deixe isso servir como um aviso: ao subscrever, você concorda em renunciar a qualquer reclamação legal contra a estratégia ou seu (s) criador (s) no caso de cobranças, perdas, etc. A subscrição é para visualizar o resultado de um programa e este serviço não gerencia ativamente um centavo de assinantes & # 8217; ativos reais. Os assinantes podem optar por ignorar os sinais da estratégia em um momento de aviso a seu critério. A saída do programa não deve ser considerada como o conselho de investimento proveniente de um CFP, CFA, RIA, etc.


Por que esses sinais devem ser confiáveis?


Porque meu trabalho em outros tópicos foi exibido em exibição pública por vários anos. Ao contrário de outros sites, eu mostrei "backtests" negativos e # 8221 ;, quebrando o adágio de & # 8220; você nunca verá um backtest ruim e # 8221 ;. Eu mostrei minuciosidade em minha pesquisa, e o mesmo rigor foi aplicado para este sistema também. Até que haja um histórico mais longo, de modo que o sistema possa ficar sozinho, a confiança no sistema é a confiança no criador do sistema.


Quem é o público-alvo desses sinais?


O público-alvo é individual, investidores de varejo com uma certa tolerância ao risco, e tem um preço correspondente.


A volatilidade da indústria não é muito arriscada?


É arriscado, na perspectiva do instrumento subjacente, a capacidade de realizar grandes arranjos (superior a 60% e até maior que 90%). No entanto, de um ponto de vista puramente numérico, a empresa assumiu muitas lojas, a Amazon, desde o início, teve uma taxa de retorno anualizada de 37,1%, um desvio padrão de 61,5%, uma pior retirada de 94% e um índice de desempenho de úlcera de 0,9. Em comparação, XIV, a partir de 2008 (usando dados sintéticos), teve uma taxa de retorno anualizada de 35,5%, um desvio padrão de 57,7%, uma pior retirada de 92% e um índice de desempenho de úlceras de 0,6. Se a Amazon for considerada um recurso de alto nível, então, a partir de uma comparação quantitativa, um sistema que pretende capitalizar as apostas de volatilidade deve ser visto de uma perspectiva similar. Com certeza, o desempenho da estratégia supera muito o de comprar e manter XIV (que ninguém deveria fazer). No entanto, a filosofia dos produtos de volatilidade é muito mais arriscada do que os nomes das máquinas domésticas simplesmente não é válida, a menos que o futuro difira do passado.


Existe a possibilidade de colaborar com outros criadores de estratégias?


Não hesite em contactar-me no meu email ilya. kipnis@gmail para discutir essa possibilidade. Solicito um fluxo diário de retornos antes de iniciar qualquer discussão.


Por ter passado todas as janelas artesanais e interessantes opções de vocabulário, a Patreon é simplesmente uma plataforma que processa pagamentos e cria uma plataforma centralizada para publicar conteúdo baseado em assinatura, em oposição à manutenção de listas de endereços e outras dores de cabeça técnicas. Essencialmente, é simplesmente uma maneira de terceirizar o fim técnico da execução de um negócio, mesmo que o curativo seja pouco ortodoxo.


Obrigado pela leitura.


NOTA: Atualmente, estou interessado em trabalho em rede e em funções de tempo integral com base em minhas habilidades. Meu perfil do LinkedIn pode ser encontrado aqui.


O retorno de dados gratuitos e a possível assinatura de negociação de volatilidade.


Este post será sobre como tirar dados gratuitos do AlphaVantage e avaliar os juros para um serviço de inscrição de importação de volatilidade.


Então, primeiro, desde que os yahoos no Yahoo decidiram desligar seus dados gratuitos, o mundo dos dados diários gratuitos tem estado em uma idade sombria. Bem, graças ao blog. fosstrading / 2017/10 / getsymbols-and-alpha-vantage. html # gpluscommentsJosh Ulrich, Paul Teetor e outros indivíduos R / Finance, a última edição do quantmod (que pode ser instalado no CRAN) agora contém uma maneira de obter dados financeiros gratuitos da AlphaVantage desde o ano 2000, que geralmente é suficiente para a maioria dos backtests, já que essa data é anterior ao início da maioria dos ETFs.


Aqui, é como fazê-lo.


Depois de fazer isso, o download de dados é simples, se não um pouco lento. Aqui, é como fazê-lo.


E os resultados:


O que significa que se qualquer uma das minhas postagens antigas na alocação de ativos tenha sido um pouco extinta graças a dados ruins do Yahoo, ele agora funcionará novamente com uma pequena modificação nos algoritmos de entrada de dados.


Além de demonstrar essa rotina, uma outra coisa que eu gostaria de fazer é avaliar o interesse para um serviço de assinatura de sinal de volatilidade, para um sistema que eu pessoalmente comecei a negociar há alguns meses atrás.


Simplesmente, eu vi outros sites com serviços de inscrição com pior risco / recompensa do que a estratégia que eu negocio atualmente, que alterna entre XIV, ZIV e VXX. Atualmente, a curva de equidade, no log 10, parece assim:


Ou seja, US $ 1000 em 2008 teria se tornado cerca de US $ 1.000.000 hoje, se alguém pudesse negociar essa estratégia desde então.


Desde 2018 (em torno do momento do início do XIV), o desempenho foi:


Considerando que alguns sites lá fora, cobram mais de US $ 50 por mês para uma única estratégia tática de rotação de ativos (e muito mais para uma combinação) com perfis de risco / retorno inferior ou uma estratégia de volatilidade que pode ter tido um histórico maciço e historicamente, Breaking, eu esperava avaliar um ponto de preço para o que os leitores considerariam pagar pelos sinais de uma estratégia melhor do que aqueles.


Obrigado pela leitura.


NOTA: Estou atualmente interessado em trabalhar em rede e estou buscando oportunidades de tempo integral relacionadas ao meu conjunto de habilidades. Meu perfil do LinkedIn pode ser encontrado aqui.


O Critério Kelly & # 8212; Funciona?


Este post será sobre implementar e investigar o Kelly Criterion e # 8212; isto é, um critério Kelly constantemente ajustado que muda à medida que uma estratégia realiza retornos.


Para aqueles que não estão familiarizados com o Kelly Criterion, é a idéia de ajustar um tamanho de aposta para maximizar a taxa de crescimento de uma estratégia a longo prazo. Ambos os https: //en. wikipedia/wiki/Kelly_criterionWikipedia e Investopedia têm entradas no Kelly Criterion. Essencialmente, é sobre maximizar sua expectativa de longo prazo de um sistema de apostas, dimensionando apostas maiores quando a borda é maior e vice-versa.


Existem duas formulações para o critério de Kelly: o resultado da Wikipedia apresenta como significar sobre sigma ao quadrado. A definição Investopedia é P - [(1-P) / winLossRatio], onde P é a probabilidade de uma aposta vencedora, e o winLossRatio é a média da vitória sobre a perda média.


Em qualquer caso, aqui estão as duas implementações.


Vamos tentar isso com alguns dados. Neste momento, eu irei mostrar uma estratégia de volatilidade não replicável que atualmente comercializo.


Para o registro, aqui estão suas estatísticas:


Agora, vamos ver o que a versão de Wikipedia faz:


Os resultados são simplesmente ridículos. E aqui seria o motivo: diga que você tenha um retorno médio de .0005 por dia (5 bps / dia) e um desvio padrão igual a esse (ou seja, uma razão Sharpe de 1). Você teria 1 / .0005 = 2000. Em outras palavras, uma alavancagem de 2000 vezes. Isso claramente não faz sentido.


A outra variante é a definição mais específica de Investopedia.


Parece um pouco mais razoável. No entanto, como ele se empilha contra não usá-lo?


Acontece que o lendário Kelly Criterion não modifica realmente tudo isso.


Para registro, aqui estão as comparações estatísticas:


Obrigado pela leitura.


NOTA: Atualmente estou procurando a minha próxima oportunidade de tempo integral, de preferência na cidade de Nova York ou na Filadélfia em relação às habilidades que demonstrei neste blog. Meu perfil do LinkedIn pode ser encontrado aqui. Se você conhece tais oportunidades, não hesite em contactar-me.


Leverage Up When You & # 8217; re Down?


Esta publicação investigará a idéia de reduzir a alavancagem quando as retiradas são pequenas e aumentar a alavancagem à medida que as perdas se acumulam. É baseado na ideia de que tudo o que for em cima deve descer, e o que quer que seja, geralmente, volta para cima.


Eu originalmente encontrei essa idéia a partir desta postagem no blog.


Então, primeiro, deixe escrever uma função fácil que permita a replicação desta ideia. Essencialmente, temos vários argumentos:


Um: a alavancagem padrão (ou seja, quando sua redução é zero, o que é a sua exposição)? Para referência, na publicação original, é de 10%.


Próximo: os vários níveis de alavancagem. Na publicação original, os níveis de alavancagem são 25%, 50% e 100%.


E, por último, precisamos dos limites correspondentes para aplicar esses níveis de alavancagem. Na postagem original, esses níveis são 20%, 40% e 55%.


Então, agora podemos criar uma função para implementar isso em R. A idéia é que nós possamos calcular os redutos e usar essas informações para determinar os níveis de alavancagem com a maior precisão e frequência possível.


Aqui é um código rápido para fazer isso:


Então, vamos replicar alguns resultados.


E nossos resultados são algo assim:


Dito isto, o que aconteceria se houvesse estender os dados para todos os dados XIV disponíveis?


Uma história diferente.


Neste caso, penso que o takeaway é que esse mecanismo funciona bem quando as retiradas do ponto de referência em questão ocorrem acentuadamente, de modo que a menor exposição protege contra essas retiradas bruscas e, em seguida, o benchmark gasta a maior parte do tempo em um modo de recuperação , de modo que o aumento da exposição tenha tempo para ganhar retornos exagerados e, em seguida, desenha novamente. Quando o benchmark continua a ver as retiradas após a alavancagem máxima ser alcançada, ou continua a funcionar bem quando não está sendo retirado, esse mecanismo cai rapidamente.


Como sempre, não há almoço gratuito quando se trata de retiradas, como tentar diminuir a exposição em preparação para uma correção significará necessariamente perder uma quantidade dolorosa de reversão nos bons tempos, pelo menos como apresentado na publicação original.


Obrigado pela leitura.


NOTA: Atualmente estou procurando a minha próxima oportunidade de tempo integral, de preferência na cidade de Nova York ou na Filadélfia em relação às habilidades que demonstrei neste blog. Meu perfil do LinkedIn pode ser encontrado aqui. Se você conhece tais oportunidades, não hesite em contactar-me.


Deixe o Talk Drawdowns (e as afiliadas)


Este post será direcionado para aqueles mais novos em investir, com uma explicação de drawdowns & # 8211; na minha opinião, uma estatística de risco simples e altamente importante.


Você poderia investir nisso?


Na verdade, milhões de pessoas fazem e fizeram. That is the S&P 500, from 2000 through 2018, more colloquially referred to as “the stock market”. Plenty of people around the world invest in it, and for a risk to reward payoff that is very bad, in my opinion. This is an investment that, in ten years, lost half of its value–twice!


At its simplest, an investment–placing your money in an asset like a stock, a savings account, and so on, instead of spending it, has two things you need to look at.


First, what’s your reward? If you open up a bank CD, you might be fortunate to get 3%. If you invest it in the stock market, you might get 8% per year (on average) if you held it for 20 years. In other words, you stow away $100 on January 1st, and you might come back and find $108 in your account on December 31st. This is often called the compound annualized growth rate (CAGR)–meaning that if you have $100 one year, earn 8%, you have 108, and then earn 8% on that, and so on.


The second thing to look at is the risk. What can you lose? The simplest answer to this is “the maximum drawdown”. If this sounds complicated, it simply means “the biggest loss”. So, if you had $100 one month, $120 next month, and $90 the month after that, your maximum drawdown (that is, your maximum loss) would be 1 – 90/120 = 25%.


When you put the reward and risk together, you can create a ratio, to see how your rewards and risks line up. This is called a Calmar ratio, and you get it by dividing your CAGR by your maximum drawdown. The Calmar Ratio is a ratio that I interpret as “for every dollar you lose in your investment’s worst performance, how many dollars can you make back in a year?” For my own investments, I prefer this number to be at least 1, and know of a strategy for which that number is above 2 since 2018, or higher than 3 if simulated back to 2008.


Most stocks don’t even have a Calmar ratio of 1, which means that on average, an investment makes more than it can possibly lose in a year. Even Amazon, the company whose stock made Jeff Bezos now the richest man in the world, only has a Calmar Ratio of less than 2/5, with a maximum loss of more than 90% in the dot-com crash. The S&P 500, again, “the stock market”, since 1993, has a Calmar Ratio of around 1/6. That is, the worst losses can take *years* to make back.


A lot of wealth advisers like to say that they recommend a large holding of stocks for young people. In my opinion, whether you’re young or old, losing half of everything hurts, and there are much better ways to make money than to simply buy and hold a collection of stocks.


For those with coding skills, one way to gauge just how good or bad an investment is, is this:


An investment has a history–that is, in January, it made 3%, in February, it lost 2%, in March, it made 5%, and so on. By shuffling that history around, so that say, January loses 2%, February makes 5%, and March makes 3%, you can create an alternate history of the investment. It will start and end in the same place, but the journey will be different. For investments that have existed for a few years, it is possible to create many different histories, and compare the Calmar ratio of the original investment to its shuffled “alternate histories”. Ideally, you want the investment to be ranked among the highest possible ways to have made the money it did.


To put it simply: would you rather fall one inch a thousand times, or fall a thousand inches once? Well, the first one is no different than jumping rope. The second one will kill you.


Here is some code I wrote in R (if you don’t code in R, don’t worry) to see just how the S&P 500 (the stock market) did compared to how it could have done.


This is the resulting plot:


That red line is the actual performance of the S&P 500 compared to what could have been. And of the 1000 different simulations, only 91 did worse than what happened in reality.


This means that the stock market isn’t a particularly good investment, and that you can do much better using tactical asset allocation strategies.


One site I’m affiliated with, is AllocateSmartly. It is a cheap investment subscription service ($30 a month) that compiles a collection of asset allocation strategies that perform better than many wealth advisers. When you combine some of those strategies, the performance is better still. To put it into perspective, one model strategy I’ve come up with has this performance:


In this case, the compound annualized growth rate is nearly double that of the maximum loss. For those interested in something a bit more aggressive, this strategy ensemble uses some fairly conservative strategies in its approach.


In conclusion, when considering how to invest your money, keep in mind both the reward, and the risk. One very simple and important way to understand risk is how much an investment can possibly lose, from its highest, to its lowest value following that peak. When you combine the reward and the risk, you can get a ratio that tells you about how much you can stand to make for every dollar lost in an investment’s worst performance.


Obrigado pela leitura.


NOTE: I am interested in networking opportunities, projects, and full-time positions related to my skill set. If you are looking to collaborate, please contact me on my LinkedIn here.


An Out of Sample Update on DDN’s Volatility Momentum Trading Strategy and Beta Convexity.


The first part of this post is a quick update on Tony Cooper’s of Double Digit Numerics’s volatility ETN momentum strategy from the volatility made simple blog (which has stopped updating as of a year and a half ago). The second part will cover Dr. Jonathan Kinlay’s Beta Convexity concept.


So, now that I have the ability to generate a term structure and constant expiry contracts, I decided to revisit some of the strategies on Volatility Made Simple and see if any of them are any good (long story short: all of the publicly detailed ones aren’t so hot besides mine–they either have a massive drawdown in-sample around the time of the crisis, or a massive drawdown out-of-sample).


Why this strategy? Because it seemed different from most of the usual term structure ratio trades (of which mine is an example), so I thought I’d check out how it did since its first publishing date, and because it’s rather easy to understand.


Here’s the strategy:


Take XIV, VXX, ZIV, VXZ, and SHY (this last one as the “risk free” asset), and at the close, invest in whichever has had the highest 83 day momentum (this was the result of optimization done on volatilityMadeSimple).


Here’s the code to do this in R, using the Quandl EOD database. There are two variants tested–observe the close, buy the close (AKA magical thinking), and observe the close, buy tomorrow’s close.


Here are the results.


Looks like this strategy didn’t pan out too well. Just a daily reminder that if you’re using fine grid-search to select a particularly good parameter (EG n = 83 days? Maybe 4 21-day trading months, but even that would have been n = 82), you’re asking for a visit from, in the words of Mr. Tony Cooper, a visit from the grim reaper.


Moving onto another topic, whenever Dr. Jonathan Kinlay posts something that I think I can replicate that I’d be very wise to do so, as he is a very skilled and experienced practitioner (and also includes me on his blogroll).


A topic that Dr. Kinlay covered is the idea of beta convexity–namely, that an asset’s beta to a benchmark may be different when the benchmark is up as compared to when it’s down. Essentially, it’s the idea that we want to weed out firms that are what I’d deem as “losers in disguise”–I. E. those that act fine when times are good (which is when we really don’t care about diversification, since everything is going up anyway), but do nothing during bad times.


The beta convexity is calculated quite simply: it’s the beta of an asset to a benchmark when the benchmark has a positive return, minus the beta of an asset to a benchmark when the benchmark has a negative return, then squaring the difference. That is, (beta_bench_positive – beta_bench_negative) ^ 2.


Here’s some R code to demonstrate this, using IBM vs. the S&P 500 since 1995.


Obrigado pela leitura.


NOTE: I am always looking to network, and am currently actively looking for full-time opportunities which may benefit from my skill set. If you have a position which may benefit from my skills, do not hesitate to reach out to me. My LinkedIn profile can be found here.


Testing the Hierarchical Risk Parity algorithm.


This post will be a modified backtest of the Adaptive Asset Allocation backtest from AllocateSmartly, using the Hierarchical Risk Parity algorithm from last post, because Adam Butler was eager to see my results. On a whole, as Adam Butler had told me he had seen, HRP does not generate outperformance when applied to a small, carefully-constructed, diversified-by-selection universe of asset classes, as opposed to a universe of hundreds or even several thousand assets, where its theoretically superior properties result in it being a superior algorithm.


First off, I would like to thank one Matthew Barry, for helping me modify my HRP algorithm so as to not use the global environment for recursion. You can find his github here.


Here is the modified HRP code.


With covMat and corMat being from the last post. In fact, this function can be further modified by encapsulating the clustering order within the getRecBipart function, but in the interest of keeping the code as similar to Marcos Lopez de Prado’s code as I could, I’ll leave this here.


Anyhow, the backtest will follow. One thing I will mention is that I’m using Quandl’s EOD database, as Yahoo has really screwed up their financial database (I. E. some sector SPDRs have broken data, dividends not adjusted, etc.). While this database is a $50/month subscription, I believe free users can access it up to 150 times in 60 days, so that should be enough to run backtests from this blog, so long as you save your downloaded time series for later use by using write. zoo.


This code needs the tseries library for the portfolio. optim function for the minimum variance portfolio (Dr. Kris Boudt has a course on this at datacamp), and the other standard packages.


A helper function for this backtest (and really, any other momentum rotation backtest) is the appendMissingAssets function, which simply adds on assets not selected to the final weighting and re-orders the weights by the original ordering.


Next, we make the call to Quandl to get our data.


While Josh Ulrich fixed quantmod to actually get Yahoo data after Yahoo broke the API, the problem is that the Yahoo data is now garbage as well, and I’m not sure how much Josh Ulrich can do about that. I really hope some other provider can step up and provide free, usable EOD data so that I don’t have to worry about readers not being able to replicate the backtest, as my policy for this blog is that readers should be able to replicate the backtests so they don’t just nod and take my word for it. If you are or know of such a provider, please leave a comment so that I can let the blog readers know all about you.


Next, we initialize the settings for the backtest.


While the AAA backtest actually uses a 126 day lookback instead of a 6 month lookback, as it trades at the end of every month, that’s effectively a 6 month lookback, give or take a few days out of 126, but the code is less complex this way.


Next, we have our actual backtest.


In a few sentences, this is what happens:


The algorithm takes a subset of the returns (the past six months at every month), and computes absolute momentum. It then ranks the ten absolute momentum calculations, and selects the intersection of the top 5, and those with a return greater than zero (so, a dual momentum calculation).


If no assets qualify, the algorithm invests in nothing. If there’s only one asset that qualifies, the algorithm invests in that one asset. If there are two or more qualifying assets, the algorithm computes a covariance matrix using 20 day volatility multiplied with a 126 day correlation matrix (that is, sd_20′ %*% sd_20 * (elementwise) cor_126. It then computes normalized inverse volatility weights using the volatility from the past 20 days, a minimum variance portfolio with the portfolio. optim function, and lastly, the hierarchical risk parity weights using the HRP code above from Marcos Lopez de Prado’s paper.


Lastly, the program puts together all of the weights, and adds a cash investment for any period without any investments.


Here are the results:


In short, in the context of a small, carefully-selected and allegedly diversified (I’ll let Adam Butler speak for that one) universe dominated by the process of which assets to invest in as opposed to how much, the theoretical upsides of an algorithm which simultaneously exploits a covariance structure without needing to invert a covariance matrix can be lost.


However, this test (albeit from 2007 onwards, thanks to ETF inception dates combined with lookback burn-in) confirms what Adam Butler himself told me, which is that HRP hasn’t impressed him, and from this backtest, I can see why. However, in the context of dual momentum rank selection, I’m not convinced that any weighting scheme will realize much better performance than any other.


Obrigado pela leitura.


NOTE: I am always interested in networking and hearing about full-time opportunities related to my skill set. My linkedIn profile can be found here.


Estratégia de Negociação Quantitativa Usando R: Um Guia Passo a Passo.


Nesta publicação, discutiremos sobre a construção de uma estratégia de negociação usando R. Antes de morar nos jargões comerciais usando R, vamos passar algum tempo entendendo o que R é. R é uma fonte aberta. Existem mais de 4000 extras em pacotes, mais 18000 membros do grupo do LinkedIn e perto de 80 R grupos Meetup atualmente existentes. É uma ferramenta perfeita para análise estatística, especialmente para análise de dados. A configuração concisa da Rede de Arquivo Abrangente R sabe que o CRAN fornece a lista de pacotes junto com a instalação básica necessária. Há muitos pacotes disponíveis dependendo da análise precisa ser feita. Para implementar a estratégia de negociação, usaremos o pacote chamado quantstrat.


Processo em Quatro Passos de qualquer Estratégia de Negociação Básica.


Formação de hipóteses Testando a produção de refinação.


Nossa hipótese é formulada como "o mercado é reversão". A reversão média é uma teoria que sugere que os preços eventualmente retornem ao seu valor médio. O segundo passo consiste em testar a hipótese para a qual formulamos uma estratégia em nossa hipótese e computamos indicadores, sinais e métricas de desempenho. A fase de teste pode ser dividida em três etapas, obter os dados, escrever a estratégia e analisar a saída. Neste exemplo, consideramos NIFTY-Bees. É um fundo negociado em bolsa administrado pela Goldman Sachs. A NSE tem um enorme volume para o instrumento, portanto, consideramos isso. A imagem abaixo mostra o preço Open-High-Low-Close do mesmo.


Nós estabelecemos um nível limiar para comparar as flutuações no preço. Se o preço aumentar / diminuir, atualizamos a coluna do limite. O preço de fechamento é comparado com a banda superior e com a banda inferior. Quando a banda superior é cruzada, é um sinal para venda. Da mesma forma, quando a banda inferior é cruzada, é um sinal de venda.


A seção de codificação pode ser resumida da seguinte forma,


Uma visão de helicóptero para a saída da estratégia é dada no diagrama abaixo.


Assim, nossa hipótese de que o mercado é um retorno significativo é suportada. Uma vez que este é o teste de volta, temos espaço para refinar os parâmetros de negociação que melhorariam nossos retornos médios e os lucros realizados. Isso pode ser feito configurando níveis de limiar diferentes, regras de entrada mais rígidas, perda de parada, etc. Pode-se escolher mais dados para back-testing, usar a abordagem bayseiana para configuração de limite, ter em conta a volatilidade.


Uma vez que você está confiante sobre a estratégia de negociação apoiada pelos resultados dos back-testing, você pode entrar em negociação ao vivo. O ambiente de produção é um grande tópico em si e está fora do escopo no contexto do artigo. Para explicar em breve, isso envolveria escrever a estratégia em uma plataforma de negociação.


Como mencionado anteriormente, estaríamos construindo o modelo usando o pacote quantstrat. O Quantstrat fornece uma infra-estrutura genérica para modelo e estratégias quantitativas baseadas em sinal de backtest. É uma camada de abstração de alto nível (construída em xts, FinancialInstrument, blotter, etc.) que permite que você crie e teste estratégias em poucas linhas de código.


As principais características do quantstrat são,


Suporta estratégias que incluem indicadores, sinais e regras Permite que estratégias sejam aplicadas a carteiras de ativos múltiplos Suporta tipos de ordem de mercado, limite, stoplimit e stoptrailing Suporta dimensionamento de ordem e otimização de parâmetros.


Nesta publicação, construímos uma estratégia que inclui indicadores, sinais e regras.


Para um modelo baseado em sinal genérico, os seguintes objetos devem ser considerados,


Instrumentos - Contém dados de mercado Indicadores - Valores quantitativos derivados de dados de mercado Sinais - Resultado da interação entre dados de mercado e indicadores Regras - Gerar ordens usando dados de mercado, indicadores e sinais.


Sem muito tempo, vamos discutir a parte de codificação. Preferimos o estúdio R para codificação e insistimos em usar o mesmo. Você precisa ter determinados pacotes instalados antes de programar a estratégia.


O seguinte conjunto de comandos instala os pacotes necessários.


Depois de instalar os pacotes, você os importa para uso posterior.


Leia os dados do arquivo csv e converta-o em objeto xts.


Inicializamos o portfólio com o estoque, moeda, capital inicial e o tipo de estratégia.


Adicione o limite de posição se desejar negociar mais de uma vez no mesmo lado.


Crie o objeto de estratégia.


Construímos uma função que calcula os limiares que queremos negociar. Se o preço se move por thresh1, atualizamos o limite para o novo preço. Novas bandas para negociação são Threshold +/- Thresh2. A saída é um objeto xts, embora usemos a função reclass para garantir.


Adicione o indicador, o sinal e a regra de negociação.


Execute a estratégia e veja o caderno de pedidos.


Atualize o portfólio e veja as estatísticas comerciais.


Aqui está o código completo.


Uma vez que você esteja familiarizado com esses conceitos básicos, você poderia dar uma olhada em como começar a usar o pacote quantimod em R. Ou no caso de você ser bom no C ++, veja uma estratégia de exemplo codificada em C ++.


Se você é um comerciante de varejo ou um profissional de tecnologia que procura iniciar sua própria mesa de negociação automatizada, comece a aprender algo trading hoje! Comece com conceitos básicos como arquitetura de negociação automatizada, microestrutura de mercado, sistema de backtesting de estratégia e sistema de gerenciamento de pedidos.


Estratégias de Backtesting com R.


Vamos começar com uma variação da estratégia de negociação de Luxor. Esta estratégia usa dois indicadores SMA: SMA (10) e SMA (30).


Se o indicador SMA (10) for maior ou igual ao indicador SMA (30), enviaremos uma ordem longa stoplimit para abrir e fechar quaisquer posições curtas que possam estar abertas. Se o SMA (10) for menor que o SMA (30), enviaremos uma ordem curta stoplimit para abrir e fechar quaisquer posições longas abertas.


Nota: Lembre-se de que já estabelecemos algumas variáveis ​​no início do livro. If you copy and paste the code below by itself you will get errors. Haverá tutoriais completos listados mais tarde no livro.


5.1 Configuração de Estratégia.


Carregamos nossos símbolos em símbolos.


Depois de carregarmos nossos símbolos, usamos o FinancialInstrument :: stock () para definir os meta-dados para nossos símbolos. Neste caso, estamos definindo a moeda em USD (dólares americanos) com um multiplicador de 1. O multiplicador é aplicado ao preço. Isso variará de acordo com o instrumento financeiro em que você está trabalhando, mas para ações deve ser sempre 1.


Next we’ll assign proper names for our portfolio, account and strategy objects. Estes podem ser qualquer nome que você deseja e deve ser baseado em como você pretende registrar os dados mais tarde.


Removemos os resíduos das corridas anteriores, eliminando os valores da carteira e da conta. At this point for what we have done so far this is unnecessary. However, it’s a good habit to include this with all of your scripts as data stored in memory can affect results or generate errors.


Agora, inicializamos nosso portfólio, conta e pedidos. Também armazenamos nossa estratégia para economizar para mais tarde.


5.2 Adicionar indicadores.


Indicators are functions used to measure a variable. Um SMA é apenas uma média dos preços anteriores; tipicamente preço de fechamento. Portanto, a SMA (10) é apenas uma média dos últimos 10 preços de fechamento.


Este é o lugar onde a biblioteca TTR entra; abreviação de Regras de Negociação Técnicas. SMA () é uma função da TTR, assim como muitos outros indicadores. Se você quer MACD, RSI, Bollinger Bands, etc., você usará a biblioteca TTR.


add. indicator é uma função do quantstrat e adiciona nossos indicadores ao nosso objeto de estratégia. Por enquanto, usaremos os seguintes parâmetros:


strategy : As we stored our strategy name in the strategy. st variable all we need to do is pass that variable. Caso contrário, forneceríamos uma string. Use variáveis ​​quando isso se tornará redundante à medida que nos movemos.


Nome: função de indicador; para este exemplo, SMA. Nós apenas passamos o nome da função como uma seqüência de caracteres. Parâmetros para a função são passados ​​para o parâmetro de argumentos ...


argumentos: se olharmos? SMA, vemos os parâmetros necessários são x e n com o n padrão sendo 10. x é o objeto de preço. No nosso exemplo, estamos usando preços de fechamento.


etiqueta: rótulo da variável que será adicionada ao nosso conjunto de dados. Isso deve ser exclusivo para cada indicador que adicionamos.


Vamos pausar por um momento e examinar os argumentos. Notice we’re passing a series of functions to x . If you wanted to access the Close variable of the IWM dataset you would normally do so by calling IWM$Close or IWM[,4] . Aqui estamos acessando um objeto de dados mktdata.


mktdata é um conjunto de dados especial criado para cada símbolo que irá armazenar todos os nossos indicadores e sinais. Quando a estratégia é executada, você verá o objeto mktdata em seu ambiente. Só existirá para o último símbolo, a estratégia executada.


The add. indicator() function (along with add. signal and add. rules which we’ll discuss momentarily) is not evaluated until we run our strategy. Tudo o que faz é adicionar nossas especificações ao objeto de estratégia. Quando executamos nossa estratégia, o objeto mktdata é criado para cada iteração de símbolos em que nossos dados serão adicionados.


Cl é realmente curto para Close como você pode ter adivinhado. Na verdade, temos várias funções de mão curta para nossas variáveis:


OpCl (): Abrir e fechar (conjunto de dados n x 2)


HLC (): alto, baixo e fechado (conjunto de dados n x 3)


Veja a ajuda para qualquer um desses símbolos acima para uma listagem mais detalhada.


quote () é uma função R que simplesmente envolve o parâmetro fornecido entre aspas.


Então, adicionamos dois indicadores ao nosso objeto mktdata, nFast (SMA (10)) e nSlow (SMA (30)). Vamos agora adicionar sinais.


5.3 Adicionar sinais.


Os sinais são um valor dado quando as condições são atendidas por nossos indicadores. Por exemplo, nesta estratégia, queremos um sinal sempre que nFast seja maior ou igual a nSlow. Nós também queremos outro sinal onde nFast é menor do que nSlow. Vamos nomear estes sinais longos e curtos, respectivamente.


Mais uma vez, estamos passando strategy. st para o parâmetro de estratégia. name takes a function just as it did in add. indicator . Aqui vamos usar algumas funções de Quantstrat embutidas. Vamos dar uma olhada no que está disponível:


sigComparison: booleano, compare duas variáveis ​​por relação gt maior que lt inferior a eq igual a gte maior ou igual a lte menor ou igual a.


sigCrossover: booleano, VERDADEIRO quando um sinal cruza outro. Usa os mesmos relacionamentos como sigComparison.


sigFormula: aplique uma fórmula para múltiplas variáveis.


sigPeak: identifique mínimos locais ou máximos de um indicador.


sigThreshold: booleano, quando um indicador cruza um valor. Usa relacionamentos como identificados acima.


sigTimestamp: gera um sinal com base em um timestamp.


Nós tentaremos usar cada um desses sinais ao longo do livro quando possível.


5.4 Adicionar regras.


We’ve now constructed our nFast and nSlow indicators and generated signals based on those indicators. Agora, temos que adicionar regras para esses sinais.


add. rules will determine the positions we take depending on our signals, what type of order we’ll place and how many shares we will buy.


Sempre que nossa variável longa (sigcol) é TRUE (sigval), queremos colocar uma ordem stoplimit (tipo de ordem). Our preference is at the High ( prefer ) plus threshold . Queremos comprar 100 ações (orderqty). Uma nova variável EnterLONG será adicionada ao mktdata. Quando entramos (digitar), uma posição EnterLONG será VERDADEIRA, caso contrário FALSO. This order will not replace any other open orders.


Se a nossa variável curta (sigcol) for TRUE (sigval), colocamos outra ordem stoplimit (tipo de ordem) com uma preferência no Low (preferir). We will sell 100 shares ( orderqty ). Este pedido não substituirá nenhuma ordem aberta (substituir).


We now have rules set up to enter positions based on our signals. No entanto, não temos regras para sair de posições abertas. Vamos criar esses agora.


Nossa próxima regra, Exit2SHORT, é uma ordem de mercado simples para sair (tipo) quando breve é ​​VERDADEIRO (sigcol, sigval). Isso encerra todas as posições longas (orderside, orderqty). This order will replace ( replace ) any open orders.


Por fim, fechamos as posições curtas (ordens) quando há tempo é VERDADEIRO (sigcol, sigval). Nós sairemos (tipo) ao preço de mercado (tipo de ordem) todas as posições abertas (orderqty). Este pedido irá substituir quaisquer ordens abertas que possamos (substituir).


TxnFees são taxas de transação associadas a um pedido. Isso pode ser qualquer valor que você escolher, mas deve refletir com precisão as taxas cobradas pelo corretor selecionado. Além disso, mostramos apenas aqui as saídas. Alguns corretores cobram taxas em posições de entrada também. TxnFees pode ser adicionado a qualquer conjunto de regras.


Se você não tem certeza de quais taxas o corretor selecionado cobra - o que há de errado com você? Go find out now. Alguns corretores de varejo (TD Ameritrade, ETrade) cobrará menos de US $ 10 por posição em ações ilimitadas; some such as Interactive Brokers or TradeStation will charge even less depending on the number of shares. $ 10 é um bom ponto de partida.


5.5 Apply Strategy.


Now we get to the fun part! Faz ou morre. Aqui vamos descobrir se nós construímos nossa estratégia corretamente ou se temos algum erro em nosso código. Cruze seus dedos. Vamos!


Impressionante! Sabemos que pelo menos o nosso código é bom.


applyStrategy () é a função que vamos executar quando tivermos uma estratégia direta. O que quero dizer com isso é uma estratégia que não testa parâmetros diferentes. Chegaremos a esse tipo de teste mais tarde.


Você pode ver que é uma chamada muito simples; we just pass our strategy. st variable as the first parameter and our portfolio as the second parameter. Não há necessidade de entrar em parâmetros adicionais no momento.


We won’t show the results of any more applyStrategy runs to save space. Basta saber que, se você obtiver saída de comércio, você deveria estar bem.


Em seguida, atualizamos nosso portfólio e objetos de conta. Fazemos isso com as funções updatePortf (), updateAcct () e updateEndEq (). updatePortf calcula o P & amp; L para cada símbolo nos símbolos. updateAcct calculcates the equity from the portfolio data. E updateEndEq atualiza o patrimônio final para a conta. Eles devem ser chamados em ordem.


Tarefa Algorítmica de Negociação em R.


Nesta publicação, vou mostrar como usar R para coletar os estoques listados em leais3, obter dados históricos do Yahoo e depois executar uma estratégia de negociação algorítmica simples. Ao longo do caminho, você aprenderá alguma raspagem na web, uma função atingindo uma API de finanças e um htmlwidget para fazer um gráfico de séries de tempo interativo.


Para esta publicação, um algoritmo de negociação é definido como um conjunto de regras que desencadeiam um evento de compra ou venda, em vez de um modelo preditivo ou uma previsão de séries temporais. Este é o tipo mais simples de troca de algo, mas se você estiver interessado em investigar mais profundamente em finanças com R, eu encorajaria você a tomar o curso da DataCamp na modelagem de uma estratégia de negociação quantitativa em R.


Fundo.


Em 2018, comecei a investir um pouco em loyal3. O seu serviço é incomum e um ótimo lugar para iniciar sua jornada de investimento. Em vez de cobrar ao investidor por negociações, leal3 cobra as empresas para listar em sua plataforma. A premissa é que as pessoas que gostam do serviço de uma empresa também comprarão o estoque e, assim, se tornarão defensoras fortes da marca. Fazer a plataforma mais atraente é que você pode comprar partes fracionárias. Então, você pode entrar nesse estoque de $ 800 amazon por apenas US $ 10 e comprar outra fração de US $ 10 cada vez que você tiver um pouco de dinheiro extra no final do mês. Claro que há custos de fricção, uma vez que você precisa negociar no Windows e seu portfólio inteiro está limitado.


70 ações, mas leais3 representa uma maneira divertida e de baixo custo para explorar o treinamento de capital. Você pode colocar a pele real no jogo por apenas US $ 10!


Para ser claro, tenho as contas típicas de aposentadoria e investimento, mas eu gosto da interface limpa do leal no aplicativo e da falta de taxas. Eu acabo checando minha carteira de lealdade e diversão mais frequentemente do que meus fundos mútuos, simplesmente porque é fácil e divertida ver o desempenho dos estoques que escolhi diretamente.


Os estoques disponíveis em loyal3.


Configurando seu espaço de trabalho.


Para começar, carregue as bibliotecas no seu ambiente. Eu quase sempre uso rvest for web scraping estes dias. Existem outros pacotes que funcionam, incluindo o RSelenium, mas eu gosto do quão fácil pode ser executado.


O segundo pacote, pbapply, é opcional porque simplesmente adiciona uma barra de progresso às funções de aplicação. Como você poderia estar raspando centenas de páginas da web, uma barra de progresso pode ser útil para estimar o tempo.


Em seguida, a TTR é um pacote que acabei de começar a explorar. A biblioteca é usada para construir "Regras de Negociação Técnicas". Embora você aprenda um algoritmo de negociação simples nesta publicação, o pacote TTR pode realizar cálculos mais sofisticados e vale a pena aprender.


A biblioteca dygraphs é um invólucro para uma biblioteca de gráficos de JavaScript rápida e aberta. É um dos htmlwidgets que torna o R mais dinâmico e faz parte de um arquivo html em vez de uma imagem estática. Por fim, o pacote lubridate é usado para facilitar a manipulação da data.


Coleção de dados.


Todos os estoques loyal3 estão todos listados em uma única página. Antes de pesquisar os preços diários individuais das ações para construir seu algoritmo de negociação, você precisa coletar todos os tickers disponíveis. A primeira coisa a fazer é declarar stock. list como uma string de URL. O próximo uso read_html () para que sua sessão R crie uma sessão na Internet e colete todas as informações html na página como um conjunto de nós XML. A página CSS tem uma ID chamada "nome da empresa". Use isso como um parâmetro ao chamar html_nodes () para selecionar apenas os dados XML associados a este nó. Por fim, use html_text () para que os valores de texto reais para os nomes das empresas sejam coletados.


Para examinar os estoques disponíveis em loyal3, você pode imprimir o objeto stocks. names no seu console. Isso retorna o nome da empresa como um vetor de texto.


Para pesquisar os preços das ações, você precisa primeiro obter o símbolo do ticker. Quando você está no site leal3, você pode clicar no tile da empresa para carregar uma página com um símbolo de ticker e outras informações da empresa.


Usando html_nodes () em ações, você puxa todos os nós marcados com um "Em HTML" & lt; a & gt; tag define um hiperlink que é usado para vincular a página de um formulário a outro. Dentro da tag de hiperlink, o "href" refere-se ao endereço de URL exato. Então, html_attr () irá extrair o URL de TODOS os links na página, se você passar em "href ...".


Depois de fazer uma inspeção manual, achei que os links 54 a 123 na página representam as páginas da empresa que eu preciso para raspar as informações do ticker. A última linha usa paste0 () para concatenar a seqüência de URL base "loyal3" para as páginas específicas da empresa, como "/ WALMART". Por exemplo, loyal3 / WALMART:


Em cada uma das páginas da empresa, há uma descrição, um preço de fechamento recente e o ticker. Todas as páginas da empresa são organizadas o mesmo, de modo que a função personalizada get. ticker () pode ser usada para extrair o símbolo do ticker.


Dentro de uma página da empresa, há uma tabela chamada "preço-marcador". A função irá navegar para uma página da empresa, identificar a tabela apropriada, extrair o texto com html_text (). Por fim, usando sub () juntamente com a expressão regular ^ ([[: alpha:]] *). * E \\ 1 manterão todos os caracteres alfabéticos. O resultado é que todos os caracteres especiais, como $, e quaisquer caracteres numéricos, como o preço de fechamento, são removidos. Como a função lê cada uma das 70 páginas, ela somente coletará o ticker de estoque.


A página de estoque leal3 para Alibaba, onde você vê a tabela que contém o ticker do estoque, BABA, está abaixo do texto em negrito.


Armado com sua função personalizada, use pblapply () para aplicá-lo a cada um dos stock. links que contêm a página de cada empresa. O objeto resultante, stock. tickers, é uma lista de tickers de ações individuais com cada elemento correspondente a uma empresa individual.


Uma maneira de alterar uma lista de elementos em um objeto plano é com do. call (). Aqui, você está aplicando rbind para row bind cada elemento de lista em um único vetor. Por fim, você cria um quadro de dados com o símbolo e a informação do nome da empresa.


Para ser consistente em sua análise, você pode querer limitar a quantidade de informações históricas que você coleciona em cada estoque. A função Sys. Data () armazenará um objeto de data como ano, mês e dia. Usar anos com um número inteiro é uma maneira de subtrair uma quantidade de tempo específica do objeto start. date.


Para obter os dados de finanças do Yahoo, o objeto da data deve ser alterado para objetos de personagem simples sem um traço. Usando a função de substituição global gsub () em start. date e end. date mudará a classe e simultaneamente removerá traços. Dentro de gsub (), passe o padrão de personagem para procurar, então os caracteres de substituição. Neste caso, o padrão de substituição é um caractere vazio entre citações. O último parâmetro é o objeto ao qual gsub () será aplicado.


A função TTR () getYahooData () aceita um símbolo de estoque e uma data inicial e final. A função retorna um quadro de dados que possui informações de séries temporais. Cada linha é uma data e as colunas contêm informações como o "Por favor", "Alto", "Por favor" e "encerrando" o preço por uma equidade. Como você está pesquisando várias empresas, você pode usar o lapply () ou o pblapply (). Passe no vetor dos símbolos da empresa, então a função, getYahooData (), e depois a data da informação. Os objetos de data são parâmetros reciclado sempre que getYahooData () é aplicado a um símbolo de estoque.


Para fazer a seleção da lista retornada, stocks. ts, mais fácil de navegar, você pode adicionar nomes aos elementos da lista. O uso de nomes com o objeto stocks. ts declara os nomes como o vetor de símbolo $ original.


Ao trabalhar com grandes listas, eu gosto de examinar o objeto resultante para garantir que o resultado seja o que eu esperava. Agora que os elementos têm nomes, você pode fazer referência diretamente a eles. Neste exemplo, você está examinando as 6 primeiras linhas para AMC Entertainment Holdings (AMC). Usar head () na lista ao fazer referência a $ AMC retornará uma parte da série temporal para este estoque:


Examinando os dados de estoque.


Quando eu ouço as notícias financeiras, os comentadores geralmente se referem a gráficos. Apesar da negociação de alta freqüência e da gestão ativa realizada por outros, muitos pequenos investidores ainda se referem a gráficos para obter informações. O objeto da série temporal pode ser exibido rapidamente com o enredo. Passe na lista referente ao elemento nomeado, como $ AMC e depois a coluna que deseja exibir, aqui $ Close.


O enredo anterior é estático e não muito interessante.


Vamos usar uma biblioteca de JavaScript para criar um gráfico que você possa explorar. Neste trecho de código, você pode observar o "% & gt;%" ou operador de tubulação. O operador de tubulação é uma boa maneira de escrever um código conciso. Ele encaminha um objeto para a próxima função sem forçar você a reescrever um nome de objeto como você fez anteriormente nesta publicação.


Neste exemplo, você cria um dygraph referente ao estoque do Twitter, $ TWTR e, em seguida, a coluna que deseja traçar, $ Close. Dentro do dygraph, main adiciona um título especificado entre as cotações. Usando o "% & gt;%" este objeto inteiro é encaminhado para a próxima função dyRangeSelector (). Você pode especificar um intervalo de datas padrão usando c () com uma string de data de início e fim. O objeto HTML resultante é uma série de tempo dinâmico para o estoque do Twitter com um controle deslizante de data na parte inferior.


Lembre-se, para alterar o patrimônio exibido, altere o símbolo do ticker na lista stocks. ts e, em seguida, o título do gráfico.


Este é um dígrafo básico para o estoque do Twitter.


Uma Estratégia de Negociação Simples: Trend Following.


Os comerciantes de alta freqüência e os hedge funds usam modelos sofisticados e abordagens baseadas em regras para executar negócios. Se você quiser saber mais, sugiro visitar a parapian para abordagens avançadas. Para abordagens mais simples, comece com esta página na Investopedia.


No código abaixo, você irá visualizar uma estratégia de negociação de impulso simples. Basicamente, você gostaria de calcular as médias móveis de 200 dias e 50 dias para um preço de ações. Em qualquer dia em que a média móvel de 50 dias esteja acima da média móvel de 200 dias, você compraria ou manteria sua posição. Nos dias em que a média de 200 dias é superior à média móvel de 50 dias, você venderia suas ações. Esta estratégia é chamada de estratégia seguindo estratégia. A natureza positiva ou negativa entre as duas médias médias temporais representa o impulso do estoque.


O pacote TTR fornece SMA () para calcular a média móvel simples. Neste trecho de código, você está examinando os primeiros 6 valores para as médias móveis de Twitter e 200 dias. SMA () funciona passando os dados da série temporal para um estoque e uma coluna específica como Close. Este é um único vetor de preços de fechamento do estoque TWTR. O segundo parâmetro é um número inteiro que representa o número de observações para a média móvel. Sem usar head (), a função SMA () retornará todos os valores.


Agora que você examinou detalhadamente a função da média móvel, você precisa se inscrever para cada uma das 70 ações. stocks. ts é uma lista de 70 quadros de dados contendo dados de estoque individuais. A quarta coluna de cada quadro de dados contém o preço de fechamento que queremos usar para as médias móveis.


A função personalizada mov. avgs () aceita um único quadro de dados de estoque para calcular as médias móveis. A primeira linha seleciona os preços de fechamento porque indexa [, 4] para criar stock. close. Em seguida, a função usa ifelse para verificar o número de linhas no quadro de dados. Especificamente se o nrow no quadro de dados for inferior a (2 * 260), então a função criará uma moldura de dados de médias móveis com “NA”.


Eu escolhi esse número porque há cerca de 250 dias de negociação por ano, então isso irá verificar se a série temporal tem cerca de 2 anos ou mais de duração. Loyal3 às vezes pode ter acesso a IPOs e, se o estoque for recém-público, não haverá dados suficientes para uma média móvel de 200 dias. No entanto, se o valor nrow for superior a 2 * 260, a função criará um quadro de dados com os dados originais juntamente com médias móveis de 200 e 50 dias como novas colunas. Usando colnames, eu declaro os nomes das colunas. A última parte da função usa full. cases para verificar os valores na coluna média móvel de 200 dias. Quaisquer linhas que não tenham um valor são descartadas no resultado final.


Armado com esta função mov. avgs (), você pode usar o pblapply () para adicionar os cálculos da média móvel a cada um dos 70 quadros de dados.


Use o código abaixo para visualizar as médias móveis de um estoque usando um dígrafo. Mais uma vez, esse código está usando o operador "% & gt;%" para encaminhar objetos. A função dygraph () aceita a estrutura de dados stocks. ts $ FOX. Especificamente, o quadro de dados é indexado pelo nome da coluna com c ('sma_200', 'sma_50'). Este objeto é passado para dySeries () nas próximas 2 linhas. Você pode se referir a uma coluna por nome para que dySeries () traçam uma linha para os valores "40 e 40" nas linhas 2 e 3. Este objeto é reenviado novamente para o dyRangeSelector () para ajustar a altura do seletor. Por fim, adicionei algum sombreamento para definir períodos em que você quisesse comprar ou manter o patrimônio líquido e um período em que você deveria ter vendido suas ações ou ficado afastado, dependendo da sua posição.


Aqui está o resultado final em uma série de tempo interativa.


As médias móveis FOX com regiões sombreadas para comprar / segurar versus vender.


Conclusão.


Como comerciante algorítmico de brotação, você não precisa traçar todos os 70 compartilhamentos. Em vez disso, você gostaria de executar o código todos os dias e adicionar uma maneira programática para identificar estoques que se encaixam no método baseado em regras, "compre se a média móvel de 50 dias está acima da média móvel de 200 dias". À medida que você revisa o gráfico anterior, a seção verde é uma hora em que você compraria o capital da FOX. A seção vermelha representa o tempo para vender suas ações e não voltar a entrar.


Como o gráfico é interativo, você pode usar o controle deslizante para redimensionar o visual. Com base nesta abordagem simples de troca de algo, agora pode ser um bom momento para comprar FOX! 30 de dezembro de 2018 foi um dia de negociação em que a média móvel de 50 dias mudou US $ 0,01 maior do que a média móvel de 200 dias!


A seção ampliada da equidade FOX.


Claro, lembre-se de todos os investimentos podem perder valor. Para saber mais sobre finanças e trocas comerciais, cheque os cursos da DataCamp aqui.


Tarefa Algorítmica de Negociação em R.


Nesta publicação, vou mostrar como usar R para coletar os estoques listados em leais3, obter dados históricos do Yahoo e depois executar uma estratégia de negociação algorítmica simples. Ao longo do caminho, você aprenderá alguma raspagem na web, uma função atingindo uma API de finanças e um htmlwidget para fazer um gráfico de séries de tempo interativo.


Para esta publicação, um algoritmo de negociação é definido como um conjunto de regras que desencadeiam um evento de compra ou venda, em vez de um modelo preditivo ou uma previsão de séries temporais. Este é o tipo mais simples de troca de algo, mas se você estiver interessado em investigar mais profundamente em finanças com R, eu encorajaria você a tomar o curso da DataCamp na modelagem de uma estratégia de negociação quantitativa em R.


Fundo.


Em 2018, comecei a investir um pouco em loyal3. O seu serviço é incomum e um ótimo lugar para iniciar sua jornada de investimento. Em vez de cobrar ao investidor por negociações, leal3 cobra as empresas para listar em sua plataforma. A premissa é que as pessoas que gostam do serviço de uma empresa também comprarão o estoque e, assim, se tornarão defensoras fortes da marca. Fazer a plataforma mais atraente é que você pode comprar partes fracionárias. Então, você pode entrar nesse estoque de $ 800 amazon por apenas US $ 10 e comprar outra fração de US $ 10 cada vez que você tiver um pouco de dinheiro extra no final do mês. Claro que há custos de fricção, uma vez que você precisa negociar no Windows e seu portfólio inteiro está limitado.


70 ações, mas leais3 representa uma maneira divertida e de baixo custo para explorar o treinamento de capital. Você pode colocar a pele real no jogo por apenas US $ 10!


Para ser claro, tenho as contas típicas de aposentadoria e investimento, mas eu gosto da interface limpa do leal no aplicativo e da falta de taxas. Eu acabo checando minha carteira de lealdade e diversão mais frequentemente do que meus fundos mútuos, simplesmente porque é fácil e divertida ver o desempenho dos estoques que escolhi diretamente.


Os estoques disponíveis em loyal3.


Configurando seu espaço de trabalho.


Para começar, carregue as bibliotecas no seu ambiente. Eu quase sempre uso rvest for web scraping estes dias. Existem outros pacotes que funcionam, incluindo o RSelenium, mas eu gosto do quão fácil pode ser executado.


O segundo pacote, pbapply, é opcional porque simplesmente adiciona uma barra de progresso às funções de aplicação. Como você poderia estar raspando centenas de páginas da web, uma barra de progresso pode ser útil para estimar o tempo.


Em seguida, a TTR é um pacote que acabei de começar a explorar. A biblioteca é usada para construir "Regras de Negociação Técnicas". Embora você aprenda um algoritmo de negociação simples nesta publicação, o pacote TTR pode realizar cálculos mais sofisticados e vale a pena aprender.


A biblioteca dygraphs é um invólucro para uma biblioteca de gráficos de JavaScript rápida e aberta. É um dos htmlwidgets que torna o R mais dinâmico e faz parte de um arquivo html em vez de uma imagem estática. Por fim, o pacote lubridate é usado para facilitar a manipulação da data.


Coleção de dados.


Todos os estoques loyal3 estão todos listados em uma única página. Antes de pesquisar os preços diários individuais das ações para construir seu algoritmo de negociação, você precisa coletar todos os tickers disponíveis. A primeira coisa a fazer é declarar stock. list como uma string de URL. O próximo uso read_html () para que sua sessão R crie uma sessão na Internet e colete todas as informações html na página como um conjunto de nós XML. A página CSS tem uma ID chamada "nome da empresa". Use isso como um parâmetro ao chamar html_nodes () para selecionar apenas os dados XML associados a este nó. Por fim, use html_text () para que os valores de texto reais para os nomes das empresas sejam coletados.


Para examinar os estoques disponíveis em loyal3, você pode imprimir o objeto stocks. names no seu console. Isso retorna o nome da empresa como um vetor de texto.


Para pesquisar os preços das ações, você precisa primeiro obter o símbolo do ticker. Quando você está no site leal3, você pode clicar no tile da empresa para carregar uma página com um símbolo de ticker e outras informações da empresa.


Usando html_nodes () em ações, você puxa todos os nós marcados com um "Em HTML" & lt; a & gt; tag define um hiperlink que é usado para vincular a página de um formulário a outro. Dentro da tag de hiperlink, o "href" refere-se ao endereço de URL exato. Então, html_attr () irá extrair o URL de TODOS os links na página, se você passar em "href ...".


Depois de fazer uma inspeção manual, achei que os links 54 a 123 na página representam as páginas da empresa que eu preciso para raspar as informações do ticker. A última linha usa paste0 () para concatenar a seqüência de URL base "loyal3" para as páginas específicas da empresa, como "/ WALMART". Por exemplo, loyal3 / WALMART:


Em cada uma das páginas da empresa, há uma descrição, um preço de fechamento recente e o ticker. Todas as páginas da empresa são organizadas o mesmo, de modo que a função personalizada get. ticker () pode ser usada para extrair o símbolo do ticker.


Dentro de uma página da empresa, há uma tabela chamada "preço-marcador". A função irá navegar para uma página da empresa, identificar a tabela apropriada, extrair o texto com html_text (). Por fim, usando sub () juntamente com a expressão regular ^ ([[: alpha:]] *). * E \\ 1 manterão todos os caracteres alfabéticos. O resultado é que todos os caracteres especiais, como $, e quaisquer caracteres numéricos, como o preço de fechamento, são removidos. Como a função lê cada uma das 70 páginas, ela somente coletará o ticker de estoque.


A página de estoque leal3 para Alibaba, onde você vê a tabela que contém o ticker do estoque, BABA, está abaixo do texto em negrito.


Armado com sua função personalizada, use pblapply () para aplicá-lo a cada um dos stock. links que contêm a página de cada empresa. O objeto resultante, stock. tickers, é uma lista de tickers de ações individuais com cada elemento correspondente a uma empresa individual.


Uma maneira de alterar uma lista de elementos em um objeto plano é com do. call (). Aqui, você está aplicando rbind para row bind cada elemento de lista em um único vetor. Por fim, você cria um quadro de dados com o símbolo e a informação do nome da empresa.


Para ser consistente em sua análise, você pode querer limitar a quantidade de informações históricas que você coleciona em cada estoque. A função Sys. Data () armazenará um objeto de data como ano, mês e dia. Usar anos com um número inteiro é uma maneira de subtrair uma quantidade de tempo específica do objeto start. date.


Para obter os dados de finanças do Yahoo, o objeto da data deve ser alterado para objetos de personagem simples sem um traço. Usando a função de substituição global gsub () em start. date e end. date mudará a classe e simultaneamente removerá traços. Dentro de gsub (), passe o padrão de personagem para procurar, então os caracteres de substituição. Neste caso, o padrão de substituição é um caractere vazio entre citações. O último parâmetro é o objeto ao qual gsub () será aplicado.


A função TTR () getYahooData () aceita um símbolo de estoque e uma data inicial e final. A função retorna um quadro de dados que possui informações de séries temporais. Cada linha é uma data e as colunas contêm informações como o "Por favor", "Alto", "Por favor" e "encerrando" o preço por uma equidade. Como você está pesquisando várias empresas, você pode usar o lapply () ou o pblapply (). Passe no vetor dos símbolos da empresa, então a função, getYahooData (), e depois a data da informação. Os objetos de data são parâmetros reciclado sempre que getYahooData () é aplicado a um símbolo de estoque.


Para fazer a seleção da lista retornada, stocks. ts, mais fácil de navegar, você pode adicionar nomes aos elementos da lista. O uso de nomes com o objeto stocks. ts declara os nomes como o vetor de símbolo $ original.


Ao trabalhar com grandes listas, eu gosto de examinar o objeto resultante para garantir que o resultado seja o que eu esperava. Agora que os elementos têm nomes, você pode fazer referência diretamente a eles. Neste exemplo, você está examinando as 6 primeiras linhas para AMC Entertainment Holdings (AMC). Usar head () na lista ao fazer referência a $ AMC retornará uma parte da série temporal para este estoque:


Examinando os dados de estoque.


Quando eu ouço as notícias financeiras, os comentadores geralmente se referem a gráficos. Apesar da negociação de alta freqüência e da gestão ativa realizada por outros, muitos pequenos investidores ainda se referem a gráficos para obter informações. O objeto da série temporal pode ser exibido rapidamente com o enredo. Passe na lista referente ao elemento nomeado, como $ AMC e depois a coluna que deseja exibir, aqui $ Close.


O enredo anterior é estático e não muito interessante.


Vamos usar uma biblioteca de JavaScript para criar um gráfico que você possa explorar. Neste trecho de código, você pode observar o "% & gt;%" ou operador de tubulação. O operador de tubulação é uma boa maneira de escrever um código conciso. Ele encaminha um objeto para a próxima função sem forçar você a reescrever um nome de objeto como você fez anteriormente nesta publicação.


Neste exemplo, você cria um dygraph referente ao estoque do Twitter, $ TWTR e, em seguida, a coluna que deseja traçar, $ Close. Dentro do dygraph, main adiciona um título especificado entre as cotações. Usando o "% & gt;%" este objeto inteiro é encaminhado para a próxima função dyRangeSelector (). Você pode especificar um intervalo de datas padrão usando c () com uma string de data de início e fim. O objeto HTML resultante é uma série de tempo dinâmico para o estoque do Twitter com um controle deslizante de data na parte inferior.


Lembre-se, para alterar o patrimônio exibido, altere o símbolo do ticker na lista stocks. ts e, em seguida, o título do gráfico.


Este é um dígrafo básico para o estoque do Twitter.


Uma Estratégia de Negociação Simples: Trend Following.


Os comerciantes de alta freqüência e os hedge funds usam modelos sofisticados e abordagens baseadas em regras para executar negócios. Se você quiser saber mais, sugiro visitar a parapian para abordagens avançadas. Para abordagens mais simples, comece com esta página na Investopedia.


No código abaixo, você irá visualizar uma estratégia de negociação de impulso simples. Basicamente, você gostaria de calcular as médias móveis de 200 dias e 50 dias para um preço de ações. Em qualquer dia em que a média móvel de 50 dias esteja acima da média móvel de 200 dias, você compraria ou manteria sua posição. Nos dias em que a média de 200 dias é superior à média móvel de 50 dias, você venderia suas ações. Esta estratégia é chamada de estratégia seguindo estratégia. A natureza positiva ou negativa entre as duas médias médias temporais representa o impulso do estoque.


O pacote TTR fornece SMA () para calcular a média móvel simples. Neste trecho de código, você está examinando os primeiros 6 valores para as médias móveis de Twitter e 200 dias. SMA () funciona passando os dados da série temporal para um estoque e uma coluna específica como Close. Este é um único vetor de preços de fechamento do estoque TWTR. O segundo parâmetro é um número inteiro que representa o número de observações para a média móvel. Sem usar head (), a função SMA () retornará todos os valores.


Agora que você examinou detalhadamente a função da média móvel, você precisa se inscrever para cada uma das 70 ações. stocks. ts é uma lista de 70 quadros de dados contendo dados de estoque individuais. A quarta coluna de cada quadro de dados contém o preço de fechamento que queremos usar para as médias móveis.


A função personalizada mov. avgs () aceita um único quadro de dados de estoque para calcular as médias móveis. A primeira linha seleciona os preços de fechamento porque indexa [, 4] para criar stock. close. Em seguida, a função usa ifelse para verificar o número de linhas no quadro de dados. Especificamente se o nrow no quadro de dados for inferior a (2 * 260), então a função criará uma moldura de dados de médias móveis com “NA”.


Eu escolhi esse número porque há cerca de 250 dias de negociação por ano, então isso irá verificar se a série temporal tem cerca de 2 anos ou mais de duração. Loyal3 às vezes pode ter acesso a IPOs e, se o estoque for recém-público, não haverá dados suficientes para uma média móvel de 200 dias. No entanto, se o valor nrow for superior a 2 * 260, a função criará um quadro de dados com os dados originais juntamente com médias móveis de 200 e 50 dias como novas colunas. Usando colnames, eu declaro os nomes das colunas. A última parte da função usa full. cases para verificar os valores na coluna média móvel de 200 dias. Quaisquer linhas que não tenham um valor são descartadas no resultado final.


Armado com esta função mov. avgs (), você pode usar o pblapply () para adicionar os cálculos da média móvel a cada um dos 70 quadros de dados.


Use o código abaixo para visualizar as médias móveis de um estoque usando um dígrafo. Mais uma vez, esse código está usando o operador "% & gt;%" para encaminhar objetos. A função dygraph () aceita a estrutura de dados stocks. ts $ FOX. Especificamente, o quadro de dados é indexado pelo nome da coluna com c ('sma_200', 'sma_50'). Este objeto é passado para dySeries () nas próximas 2 linhas. Você pode se referir a uma coluna por nome para que dySeries () traçam uma linha para os valores "40 e 40" nas linhas 2 e 3. Este objeto é reenviado novamente para o dyRangeSelector () para ajustar a altura do seletor. Por fim, adicionei algum sombreamento para definir períodos em que você quisesse comprar ou manter o patrimônio líquido e um período em que você deveria ter vendido suas ações ou ficado afastado, dependendo da sua posição.


Aqui está o resultado final em uma série de tempo interativa.


As médias móveis FOX com regiões sombreadas para comprar / segurar versus vender.


Conclusão.


Como comerciante algorítmico de brotação, você não precisa traçar todos os 70 compartilhamentos. Em vez disso, você gostaria de executar o código todos os dias e adicionar uma maneira programática para identificar estoques que se encaixam no método baseado em regras, "compre se a média móvel de 50 dias está acima da média móvel de 200 dias". À medida que você revisa o gráfico anterior, a seção verde é uma hora em que você compraria o capital da FOX. A seção vermelha representa o tempo para vender suas ações e não voltar a entrar.


Como o gráfico é interativo, você pode usar o controle deslizante para redimensionar o visual. Com base nesta abordagem simples de troca de algo, agora pode ser um bom momento para comprar FOX! 30 de dezembro de 2018 foi um dia de negociação em que a média móvel de 50 dias mudou US $ 0,01 maior do que a média móvel de 200 dias!


A seção ampliada da equidade FOX.


Claro, lembre-se de todos os investimentos podem perder valor. Para saber mais sobre finanças e trocas comerciais, cheque os cursos da DataCamp aqui.

No comments:

Post a Comment