sinais de troca de Python
Obter através da App Store Leia esta publicação em nosso aplicativo!
Usando o Pandas DataFrame para gerar sinais de negociação.
Eu tenho dois DataFrames com os seguintes layouts:
O primeiro DataFrame é o preço das ações e as médias móveis. O segundo DataFrame contém sinais para quando comprar um estoque (entrada) e quando vender (sair).
A parte de entrada já está bem. Mas estou tendo problemas com a parte de saída.
Não faz sentido ter sinais de saída no 2008-06-26 porque nenhum estoque já foi adquirido. E não faria sentido ter um sinal de saída em 2008-06-30 e 2008-07-01 porque não podemos vender os mesmos estoques duas vezes.
Então eu tenho uma maneira de gerar sinais na coluna LONG EXIT, mas preciso filtrá-los olhando para trás de cada data para descobrir se é uma LONG ENTRY = 1 anterior e nenhuma LONG EXIT = 1 entre LONG ENTRY = 1 e a DATA que eu estou olhando.
O DataFrame que eu preciso parece assim, mas como posso fazer isso com os Pandas?
Aqui está um esboço de como você pode rastrear o saldo de seus sinais de entrada / saída para que você apenas comece a sair quando há uma entrada anterior ainda não cancelada pela saída subseqüente:
Adicione uma coluna para seus novos sinais filtrados:
Iterate através do DataFrame, calcule o balanço anterior (isso pressupõe que você não esteja sinalizando entrada e saída no mesmo dia) e filtre de acordo:
para obter o resultado desejado dado os casos que você mencionou:
sinais de troca de Python
Puxe pedidos 0.
Participe do GitHub hoje.
O GitHub é o lar de mais de 20 milhões de desenvolvedores que trabalham juntos para hospedar e rever o código, gerenciar projetos e criar software juntos.
Clone com HTTPS.
Use o Git ou o check-out com o SVN usando o URL da web.
O finmarketpy é uma biblioteca baseada em Python que permite que você analise os dados de mercado e também as estratégias de negociação backtest usando uma API simples de usar, que possui modelos pré-construídos para que você defina backtest. Incluído na biblioteca.
Modelos pré-construídos para estratégias de negociação de backtesting Exibir retornos históricos para estratégias de negociação Investigar sazonalidade das estratégias de negociação Realizar estudos de eventos de mercado em torno de eventos de dados Na calculadora construída para ponderação de risco usando a segmentação de volatilidade Escrito de maneira orientada a objeto para tornar o código mais reutilizável.
Os contribuintes para o projeto são muito bem-vindos, vendem abaixo!
Eu já escrevi a biblioteca financeira open source PyThalesians (que foi mesclada com isso - por isso pode se concentrar em manter um conjunto de bibliotecas). Esta nova biblioteca finmarketpy tem.
Funcionalidade semelhante à parte comercial dos pythalesianos Reescreveu a API para torná-la muito mais limpa e fácil de usar, além de ter muitos novos recursos. finmarketpy requer as bibliotecas, que escrevi chartpy (para gráficos) e findatapy (para carregar dados de mercado) para funcionar. Ao dividir em bibliotecas mais pequenas e mais especializadas, isso facilitaria os colaboradores. Usando a funcionalidade, você pode baixar dados de mercado com facilidade de Bloomberg, Quandl, Yahoo, etc. Usando chartpy, você pode optar por exibir resultados em matplotlib, plotly ou bokeh, alterando uma única palavra-chave!
Por favor, tenha presente que o finmarketpy está em desenvolvimento contínuo. A API está fortemente documentada, mas estamos procurando adicionar documentação mais geral. Usa a licença Apache 2.0.
Calcule historicamente os retornos acumulados de uma estratégia de negociação (veja finmarketpy_exemplo / tradingmodelfxtrend_example. py)
Trace a alavanca da estratégia ao longo do tempo.
Trace os retornos comerciais individuais.
Calcule a sazonalidade de qualquer ativo: aqui mostramos sazonalidade de volatilidade de ouro e FX (veja exemplos / seasonality_examples. py)
Calcule o estudo de eventos em torno de eventos para ativos (veja exemplos / events_examples. py)
Para instruções de instalação detalhadas para finmarketpy e suas bibliotecas Python associadas, vá para https: //github/cuemacro/finmarketpy/blob/master/INSTALL. md (que inclui detalhes sobre como configurar todo o seu ambiente Python).
Você pode instalar a biblioteca usando o abaixo (melhor para obter a versão mais recente do repo, em oposição aos lançamentos).
Certifique-se de editar o arquivo MarketConstants.
Mas, de antemão, assegure-se de que já tenha instalado tanto chartpy, findatapy quanto outras dependências. No chartpy, você precisará alterar o arquivo ChartConstants (para adicionar a API Plotly) e para a descoberta, você também precisará alterar o arquivo DataConstants para adicionar a API Quandl (e, possivelmente, alterar outras configurações).
Os contribuintes são sempre bem-vindos para finmarketpy, findatapy e chartpy. Se você quiser contribuir, dê uma olhada em [Recursos planejados] (PLANNED_FEATURES. md] para áreas em que estamos procurando ajuda. Ou se você tiver alguma idéia de melhorias nas libriares, informe-nos também!
Em finmarketpy / examples você encontrará vários exemplos, incluindo alguns modelos de negociação simples.
0.11 - finmarketpy Primeira versão do pré-lançamento.
04 de janeiro de 2018 - Correção de erros para cancelamento de contas de constantes 16 de setembro de 2017 - Adicionando à lista de recursos planejados 10 de julho de 2017 - Adicionado instruções de instalação para conda 03 de julho de 2017 - Dependência fixa de biblioteca sazonal 26 de junho de 2017 - BacktestEngine agora pode lidar com carteiras de estilo de soma ponderada 23 de junho de 2017 - Data de observação de downloads para dados econômicos (EventStudy) 21 de junho de 2017 - Tendência adicionada após o exemplo usando os dados de retorno total da Bloomberg 07 de junho de 2017 - Produção adicionada de IR / Rets na análise de sensibilidade (TradeAnalysis) 22 de maio de 2017 - Retornos da estratégia (para arquivo CSV) 03 de maio de 2017 - Adicionado mais recursos planejados 13 de abril de 2017 - Data de término alterada na tendência de FX seguindo modelo 12 Mar 2017 - Exemplo de animação de superfície de voltagem FX adicionada 25 de fevereiro de 2017 - Parâmetro de atraso de sinal adicionado 24 de fevereiro de 2017 - Aulas de teste reverso por isso, tenha uma nomeação consistente 21 de fevereiro de 2017 - Repetição do BacktestEngine para usar o SwimPool 20 de fevereiro de 2017 - Instruções de instalação extra 14 de fevereiro de 2017 - Adicionado recursos planejados página 08 Feb 2017 - Adicionado SHOW_CHARTS Parámetro para TradingModel e funcionou SMA com pandas antigos 05 de fevereiro de 2017 - Adicionado mais notas de instalação e saída fixa do Excel em TradeAnalysis se nocional não especificado 02 de fevereiro de 2017 - Alterações adicionais às restrições em max long / shorts (com refatoração) 01 de fevereiro de 2017 - Adicionado restrições para longs / shorts e parcelas máximas em BacktestEngine 25 de janeiro de 2017 - Trabalho adicional em paradas / lucro com vários ativos e amp; planejando correções de bugs para TradeAnalysis 24 de janeiro de 2017 - Corrigindo problemas em torno de paradas / tirar lucros e adicionar campos em TechParams 19 de janeiro de 2017 - Alterar localização de exemplos no projeto 16 de janeiro de 2017 - Método adicionado no BacktestEngine para depuração de P & amp; L (tabela de despejos com sinais / ativos / devoluções) 12 de janeiro de 2017 - Adicionado notas de instalação detalhadas 11 de janeiro de 2017 - Reescreveu um grande número de comentários, adicionou o cálculo do ATR e a perda básica de perda / aproveita a funcionalidade de lucro 07 de janeiro de 2017 - Agora as saídas do tamanho da posição são dimensionadas por nocional e amp; por tamanhos de contrato definidos pelo usuário 06 de janeiro de 2017 - Adicionado ponderações definidas pelo usuário para estratégias e estratégias; correcções gerais de erros 04 de janeiro de 2017 - Adicionado um parâmetro de mudança de período para cálculo de alavancagem (em RiskEngine) 30 de novembro de 2018 - Exemplo de sazonalidade adicionado para NFP 24 de novembro de 2018 - Exemplo de sazonalidade adicionado para gasolina 17 de novembro de 2018 - Fonte alterada para ChartConstants padrão para TradingModel 14 Out 2018 - Referências de ártico corrigidas em MarketConstants 13 de outubro de 2018 - Correção de planejamento de IR fixo para BacktestEngine, adicionado parcelas métricas YoY 11 de outubro de 2018 - Adicionado a TradeAnalysis outra maneira de traçar estatísticas de retorno para uma carteira 10 de outubro de 2018 - Adicionado return_example para mostrar como usar o PyFolio via finmarketpy, entrada adicional de dataframe para TradeAnalysis, typo fixo em readme 07 de outubro de 2018 - Adicionar. idea a. gitignore 06 de outubro de 2018 - Divisão de número de negociações e proporção de posição 22 de setembro de 2018 - Fixação de classificação de colunas quando o sinal conspira 21 de setembro de 2018 - Permitir o enredo de vários dias de sinal 15 de setembro de 2018 - Fusionado finmarketpy e pythalesians totalmente, versão lançada 0.11 12 Set 2018 - Problema corrigido com TradeAnalysis (método na mes) 02 de setembro de 2018 - Problema corrigido com eventos externos de dataframe eco, exemplo de estudo de evento adicionado 01 de setembro de 2018 - Exemplo de sazonalidade adicionado para FX vol 22 de agosto de 2018 - Problema de inicialização corrigido e credenciais adicionadas 17 de agosto de 2018 - Primeiro código carregado.
03 de agosto de 2018 - Corrigido os arquivos de falta de conf 02 02 de agosto de 2018 - Padrão alterado Plotly cores de fundo e constantes fixas problema com AdapterTemplate 01 de agosto de 2018 - Renovado pythalesians_graphics como chartesians (preparando o encerramento final) 29 Jul 2018 - Criado Jupyter notebook plot_market_data para plotar com várias bibliotecas, também corrigiu o problema de dimensionamento de Bokeh, a biblioteca refratada, a funcionalidade do gráfico de spinning em pythalesians_graphics 28 de julho de 2018 - Problema corrigido com vários campos retornados por Quandl, adicionado exemplo de download Quandl 26 de julho de 2018 - Adicionado mais suporte para Gráficos Plotly, superfície adicionada Exemplo de Plotly 21 Jul 2018 - Refactor StrategyTemplate funções de traçado do gráfico 20 de julho de 2018 - Retorno do identificador de figura para AdapterPyThalesians 08 de junho de 2018 - Problema de correção de correção, escala de voltagem refratária em CashBasktest, wrapper de resample adicionado no TimeSeriesFilter 03 de junho de 2018 - Acelere CashBacktest (método construct_strategy) 02 de junho de 2018 - Corrigido o arquivo de StrategyTemplate perdido na instalação, adicionou um uto-detecção do caminho para simplificar a instalação e métodos adicionais para a conversão entre pandas e bcolz 31 de maio de 2018 - Livrado dos métodos Pandas obsoletos no TechIndicator 27 de maio de 2018 - Adicionado a capacidade de traçar o sinal da estratégia no momento 19 de maio de 2018 - Atualizado Whenl wrapper para usar a nova API de Quandl 02 de maio de 2018 - Retirada do BacktestRequest, adicionou o exemplo de sazonalidade SPX 28 de abril de 2018 - Cashbacktest atualizado (para Pandas 0.18) 21 de abril de 2018 - Livrado de métodos de Pandas obsoletos no EventStudy 18 Abr 2018 - Corrigido alguns problemas de incompatibilidade com Pandas 0,18 06 de abril de 2018 - Adicionado mais saída de estatísticas comerciais 01 Abr 2018 - Acelerou as operações de junção, notável ao buscar séries de alta freqüência alta 21 de março de 2018 - Adicionado o notebook IPython para demonstrar como testar a tendência de FX simples após a estratégia de negociação 19 Mar 2018 - Testado com Python 3.5 64 bit (Anaconda 2.5 no Windows 10) 17 de março de 2018 - Refatorizado algumas das funções da série gráfica / temporária e StrategyTemplate 11 Mar 2018 - Alertas corrigidas no matplo tlib 1.5 09 de março de 2018 - Adicionado mais recursos de TradeAnalysis (para análise de sensibilidade de estratégias de negociação) 01 Mar 2018 - Adicionado notebook de IPython para demonstrar como baixar dados de mercado e gráfico 27 de fevereiro de 2018 - Retornos totais corrigidos Exemplo de FX 20 de fevereiro de 2018 - Adicionado mais parâmetros para StrategyTemplate 13 de fevereiro de 2018 - Métodos editados de filtro de séries temporais 11 de fevereiro de 2018 - Exemplo adicionado para traçar intervenções BoJ contra o ponto USDJPY 10 de fevereiro de 2018 - Descrição atualizada do projeto 01 de fevereiro de 2018 - Adicionado LightEventsFactory para tornar mais fácil lidar com eventos de dados econômicos (armazenados como Arquivos HDF5) 20 de janeiro de 2018 - Medida de curtose adicionada para resultados da estratégia de negociação, problema de Quandl fixado 19 de janeiro de 2018 - Nome da pasta de exemplos alterados 15 de janeiro de 2018 - Adicionado o exemplo de correlação FX de risco aumentado 05 Jan 2018 - Construção de índices de retorno total (spot) para FX e exemplo 26 de dezembro de 2018 - Problema corrigido com downloaders de dados econômicos 24 de dezembro de 2018 - Modelos de dados de dados adicionados para criação de indicadores personalizados 19 de dezembro de 2018 - Dukascopy Refatorada do Wnloader 10 de dezembro de 2018 - Diversas correções de bugs 22 de novembro de 2018 - Maiores recursos de segmentação por voltagem para fazer backtesting 07 de novembro de 2018 - Função adicionada para baixar dados de bloqueio de Bloomberg (com exemplo) 05 de novembro de 2018 - Classe de estudo de evento intraday adicionada (e exemplo) 02 nov. 2018 - Adicionado pacote fácil para fazer correlações de rolamento (e exemplo) 28 de outubro de 2018 - Adicionado mais análise de sensibilidade para estratégias de negociação 26 de outubro de 2018 - Diversas correções de bugs para Bloomberg Open API downloader 14 de outubro de 2018 - Capacidade adicional para fazer download paralelo de dados de mercado ( biblioteca de thread / multiprocessamento), com um exemplo de benchmarking e correções de bugs para o baixador Bloomberg 25 de setembro de 2018 - Exemplos Refatorados em diferentes pastas / mais exemplos de sazonalidade 19 de setembro de 2018 - Adicionado suporte para Plotly choropleth map plots & amp; download fácil de dados econômicos via FRED / Bloomberg / Quandl 12 de setembro de 2018 - Adicionado suporte básico para PyFolio para análise estatística de estratégias 04 de setembro de 2018 - Estratégia de Estratégia Adicionada para teste de backtest (com exemplo) e amp; correções de erros 21 de agosto de 2018 - Adicionado gráficos empilhados (com matplotlib e amp; bokeh) & amp; várias correções de bugs 15 de agosto de 2018 - Gráficos de barras adicionados (com matplotlib e amp; bokeh) & amp; adicionou mais funções de filtro de séries temporais 09 de agosto de 2018 - Suporte aprimorado para Bokeh 07 de agosto de 2018 - Suporte adicional de Plotly (através do envoltório de mancuernas Jorge Santos) 04 de agosto de 2018 - Adicionado a capacidade de download de FRED e exemplo para download de FRED. 29 de julho de 2018 - Funções de backtesting adicionadas (incluindo estratégia de tendência de tendência FX simples) e várias correções de erros / comentários. 24 de julho de 2018 - Funções adicionais para fazer estudos sazonais simples e exemplos adicionais. 17 de julho de 2018 - Exemplo criado para mostrar como usar indicadores técnicos. 13 de julho de 2018 - Mudou a localização da conf, renomeando a pasta de exemplos para exemplos pythalesianos. Agora pode ser instalado usando setup. py. 10 de julho de 2018 - Adicionado a capacidade de baixar os dados do ticks Dukascopy FX (os dados são gratuitos para uso pessoal - verifique termos e condições da Dukascopy). Observe que o mês passado de dados geralmente não está disponível pela Dukascopy.
&cópia de; 2018 GitHub, Inc. Termos Privacidade Segurança Status Ajuda.
Você não pode executar essa ação neste momento.
Você fez login com outra guia ou janela. Recarregue para atualizar sua sessão. Você se separou em outra guia ou janela. Recarregue para atualizar sua sessão.
cointrader 0.4.0.
O Cointrader é uma aplicação comercial para moedas criptográficas.
Cointrader.
O Cointrader é um aplicativo de troca CLI baseado em Python para moedas criptográficas na troca Poloniex. O Cointrader pode ser usado para negociação guiada semiautomática.
Você poderia perder dinheiro. Use o monstro sob seu próprio risco! Não aceito nenhuma responsabilidade por quaisquer perdas.
Cointrader é uma qualidade alfa! Não se destina a ser usado para negociação séria ainda. Ainda está em fase de desenvolvimento precoce e tem um monte de defeitos conhecidos. Espere todos os aspectos da aplicação para mudar no futuro. O Cointrader não é testado rotineiramente.
Se você quiser ajudar a combinar o melhor software de Software Livre, sua contribuição é altamente apreciada! Encontre detalhes sobre como participar da documentação.
Status: Alpha Software livre: licença MIT Fonte: https: // github / toirl / cointrader Documentação: https://cointrader. readthedocs. io.
Se você gosta do programa, estou ansioso para uma doação :)
DASH: XypsuUMRTioV7bHSVzSDkNgihtr1gfiqAr BTC: 1L5xtVirGVpDL7958SPaHb6p9dHZoaQ2Cz.
Negociação automática. A Cointrader irá comprar e vender os seguintes sinais de emissão emitidos. Comércio semiautomático. O Cointrader simplesmente emite sinais comerciais. Você finalmente decide se deseja seguir os sinais. Comércio de papel. Simples negociação. Na verdade, não coloque ordens reais. Trade logbook Análise de lucro / perda (Bot vs. Market) Backtesting. Verifique o quão boa sua estratégia executa em gráficos históricos. Explore os intercâmbios e encontre mercados interessantes para negociar em Mostrar seus saldos.
Gerenciamento de risco e dinheiro Parar limites de perda Tomar limites de lucro Estratégias de negociação externas em preenchimento Apoiar mais trocas.
Motivação.
Este programa existe porque eu quero aprender mais sobre negociação automática com base em uma análise técnica de gráficos. Eu não sou um especialista em negociação ou em criptografia! Eu sou um programador Python profissional que enfiou o nariz na moeda cripto e no mundo comercial em 2017 e que foi fascinado diretamente neste tópico. Depois de ler alguns livros sobre análise técnica, decidi escrever este programa para saber mais sobre como funciona a negociação automática.
Este pacote foi criado com Cookiecutter e o modelo de projeto audrey / cookiecutter-pypackage.
0.4.0 (2017-03-16)
Primeira versão com funcionalidade de negociação real. No entanto, o contratador ainda não possui nenhuma estratégia comercial. Portanto, a estratégia padrão não fará nada do que esperar :). No entanto, você pode usar o modo interativo para comprar e vender moedas se quiser.
Comercialização automática adicionada. O Cointrader seguirá os sinais emitidos da estratégia. Adicionado Papertrading. Faça negócios sem qualquer risco. O Cointrader irá simular a negociação. Adicionado Tradelog.
Tag: sinais.
Crie uma estratégia de negociação a partir do zero no Python.
Para mostrar-lhe o processo completo de criação de uma estratégia de negociação, eu vou trabalhar em uma estratégia super simples baseada no VIX e seus futuros. Eu simplesmente ignoro o download de dados de Quandl, I & # 8217; m usando o índice VIX a partir daqui e os futuros VIX a partir daqui, apenas os contratos de dados contínuos VX1 e VX2.
Carregamento de dados.
Primeiro, precisamos carregar todas as importações necessárias, a importação do backtest será usada mais tarde:
Por uma questão de simplicidade, eu irei colocar todos os valores em um DataFrame e em diferentes colunas. Nós temos o índice VIX, VX1 e VX2, isso nos dá esse código:
E aqui é o resultado:
Para este tutorial, irei usar um sinal muito básico, a estrutura é a mesma e você pode substituir a lógica por sua estratégia, que quer, usando algos de aprendizagem de máquina muito complexos ou simplesmente cruzando médias móveis.
O VIX é um recurso de reversão média, pelo menos em teoria, significa que ele vai subir e descer, mas, no final, seu valor se moverá em torno de uma média. Nossa estratégia será diminuir quando for mais do que seu valor médio e ficar curto quando é muito baixo, com base em valores absolutos para mantê-lo simples.
Agora, gostaríamos de visualizar o sinal para verificar se, pelo menos, a estratégia parece lucrativa:
O resultado é bastante bom, apesar de não haver troca entre 2009 e 2018, podemos melhorar isso mais tarde:
Backtesting.
Deixe verificar se a estratégia é rentável e obter algumas métricas. Nós iremos comparar nossos retornos de estratégia com o & # 8220; Buy and Hold & # 8221; estratégia, o que significa que acabamos de comprar o futuro do VX1 e esperar (e rolar em cada período de validade), desta forma, podemos ver se a nossa estratégia é mais rentável do que passiva.
Coloco o método de backtest em um arquivo separado para tornar o código principal menos pesado, mas você pode manter o método no mesmo arquivo:
No código principal, eu irei usar o método backtest como este:
É importante mostrar o retorno anualizado, uma estratégia com um retorno de 20% ao longo de 10 anos é diferente de um retorno de 20% ao longo de 2 meses, anualizamos tudo para que possamos comparar estratégias facilmente. A Ratio Sharpe é uma métrica útil, nos permite ver se o retorno vale o risco, neste exemplo eu simplesmente assumi uma taxa livre de risco de 0%, se a proporção for & gt; 1 significa que o retorno ajustado ao risco é interessante, se ele for # 8217; s & gt; 10 significa que o retorno ajustado ao risco é muito interessante, basicamente alto retorno por uma baixa volatilidade.
No nosso exemplo, temos uma proporção Sharpe bonita de 4.6 que é bastante boa:
Finalmente, queremos traçar a estratégia PnL vs o & # 8220; Compre e segure & # 8221; PnL:
A estratégia foi perfeitamente realizada até 2018, mas, a partir de 2018, a PnL começa a estagnar:
Conclusão.
Eu mostrei-lhe uma estrutura básica de criação de uma estratégia, você pode adaptá-la às suas necessidades, por exemplo, você pode implementar sua estratégia usando a linha aérea em vez de um módulo personalizado de teste de bactos. Com a linha aérea, você terá mais métricas e você poderá facilmente executar sua estratégia em diferentes ativos, uma vez que os dados do mercado são gerenciados pela zipline.
Eu não mencionei quaisquer taxas de transações ou spread de oferta e oferta nesta publicação, o backtest não tem em conta tudo isso, então talvez, se os incluíssemos, a estratégia perderia dinheiro!
Usando matplotlib para identificar sinais comerciais.
Encontrar sinais comerciais é um dos principais problemas de negociação algorítmica, sem quaisquer bons sinais de que sua estratégia será inútil. Este é um processo muito abstrato, pois você não consegue adivinhar intuitivamente quais sinais irão tornar sua estratégia rentável ou não, por isso eu vou explicar como você pode ter pelo menos uma visualização dos sinais para que você possa ver se o Os sinais fazem sentido e os apresentam em seu algoritmo.
Nós usaremos matplotlib para representar o gráfico do preço do ativo e adicionar sinais de compra / venda no mesmo gráfico, desta forma você pode ver se os sinais são gerados no momento certo ou não: comprar baixo, vender alto.
Preparação de dados.
Para este tutorial, escolhi uma estratégia muito simples, que é uma média móvel de cruzamento, a idéia é comprar quando o & # 8220; short & # 8221; média móvel, digamos que 5 dias está cruzando o & # 8220; long & # 8221; média móvel, vamos dizer 20 dias, e vender quando eles cruzam o outro lado.
Primeiro passo fácil, instalando matplotlib através do som comum:
Este exemplo requer pandas e matplotlib:
I & # 8217; m usando o E-mini futuro conjunto de dados de Quandl, veja este artigo.
Carregar dados e calcular as médias móveis é bastante trivial graças a Pandas:
Agora, a parte de geração de sinal real é um pouco mais complicada:
compra e venda está agora contendo todas as datas em que temos um sinal.
Traçando os sinais.
A parte interessante é o gráfico desta, a sintaxe é simples:
Queremos exibir o preço E-Mini e as médias móveis são bastante simples, usamos data. index porque as datas no DataFrame estão no índice:
Mas, para os sinais, queremos colocar cada marcador na data específica, que está no índice e no nível de preço E-Mini para que visualmente não seja muito confuso:
data. ix [buys. index] [& # 8216; Settle & # 8217;] significa que nós levamos o & # 8216; Settle & # 8217; campo no data DataMrame.
Aqui está o resultado final:
Conclusão.
Você pode interpretar isso observando que a maioria dos sinais de compra está em quedas na curva e os sinais de venda estão em máximos locais. Portanto, nossa geração de sinais parece promissora, no entanto, sem um back-back real, não podemos ter certeza de que a estratégia seja rentável, pelo menos podemos validar ou não um sinal.
A principal vantagem deste método é que podemos ver instantaneamente se os sinais são & # 8220; direita & # 8221; ou não, por exemplo, você pode jogar com a média móvel curta e longa, você pode tentar 10 dias contra 30 dias etc. e, no final, você pode escolher os parâmetros certos para este sinal.
Modelo de estratégia de negociação básica em python: da idéia à execução.
Recentemente, tive o privilégio de participar da conferência Python for Quants em Londres via streaming ao vivo. Cada vez que assisto a esta série de palestras, tento capturar uma das apresentações por escrito, desta vez, vou escrever em uma palestra dada pelo Dr. James Munro intitulado "Estratégias de Quant: de idéia para execução".
Note que, enquanto eu usei sua palestra para a maioria das informações aqui, eu faço mudanças e adiciono minhas próprias experiências. O que está escrito aqui não é aprovado pelo Man AHL e use sua imaginação para adicionar todas as outras divulgações que você achar adequadas.
Gostei muito da sua palestra porque me falou como profissional que gasta muito tempo fazendo testes diferentes. Ele muito bem captura os erros comuns em um backtesting.
Neste artigo, cobrimos uma estratégia de negociação bastante básica, que começa a parecer atractiva, mas, à medida que adicionamos fatores mais realistas, você notará como o desempenho decai.
A estratégia é um simples 20 dias em mover uma estratégia de cruzamento média. Exemplo: se o preço atual estiver acima da média móvel, então compre e segure, então, fique curto e aguarde. A estratégia será chamada "ToyStrategy".
O ToyStrategy será executado nos futuros do gás natural.
Observe que, nos futuros, teremos que reverter os contratos e juntar os preços, razão pela qual estamos usando o preço de liquidação ajustado.
Como um evangelista de backtesting, faço questão de divulgar as boas notícias dos dois tipos diferentes de frameworks: vectorizada e orientada para eventos. Para este exemplo, o Dr. Munro decidiu em um backtester vetorial que é ótimo para prototipagem rápida de uma estratégia, mas é o maior mal quando se trata de precisão e flexibilidade.
Passos para um backtester vectorizado:
Obter dados (gás natural) Criar seu indicador (SMA de 20 dias) Gerar sinais com base na lógica de negociação Gerar posições mantidas Calcular métricas de desempenho Traçar a curva de patrimônio.
Tada ... Aqui está o primeiro backtest com retornos totais de US $ 32 milhões e uma taxa de informação de 2,3.
Como a maioria das coisas na vida, quando alguém está tentando vender algo que é muito bom para ser verdade, provavelmente é. À primeira vista, esta é uma estratégia impressionante que deve ser implementada imediatamente! No entanto, este artigo irá orientá-lo através de algumas das verificações que você precisa executar para validar a estratégia.
Passo 1: Transforme sua caixa preta em uma caixa de vidro.
Agora, existem algumas estratégias que implementam técnicas de aprendizado de máquina que são mais difíceis de se transformar em uma caixa de vidro, mas essa não é uma delas. A maneira mais fácil de melhorar a transparência é simplesmente traçar todas as colunas em nosso quadro de dados.
Ao fazer isso, podemos validar que nosso modelo atua como esperado.
Gráfico 1: Existem dados de preços disponíveis para cada dia (Não há dados em falta por períodos de tempo muito grandes).
Gráfico 2: Limpe que o SMA de 20 dias suaviza os dados e que não temos lacunas ou picos anormais.
Gráfico 3: Este gráfico de sinal é diferente dos meus outros backtests, pois não é simplesmente um valor em que 1 representa uma compra, 0 como liquido e -1 para ficar curto. Neste gráfico, temos que multiplicar o valor do sinal por um múltiplo para gerar a Posição. (Não é a melhor técnica de dimensionamento de posição por um tiro longo, mas esta é uma estratégia de brinquedo.)
Gráfico 4: representa o número de lotes que estamos ocupando em qualquer momento.
Gráfico 5: Retornos diários.
Etapa 2: Validação de dados.
Em seguida, precisamos validar que temos dados limpos. Os dados limpos incluem as seguintes verificações:
Tenha dados para cada dia de negociação. Se houver dados em falta, execute um preenchimento para a frente. Certifique-se de que não haja picos irrealistas nos dados. Por exemplo: se o preço da ação média for entre 400 e 300, de repente, há um pico de 4000, você precisará corrigir isso. Isso também se aplica a quando um valor de 0 é inserido em seus dados. Verifique se não há datas duplicadas em sua série temporal Certifique-se de que seus dados sejam ajustados para divisões e consolidações de ações, tendo preços ajustados por dividendos for um bônus. Cuidado com as fontes de dados gratuitas! Na minha experiência, fontes de dados gratuitas possuem dados menos limpos.
Certifique-se de que os dados estejam limpos! Pessoalmente, uma grande parte do meu tempo é gasto comprando e limpando dados. Quandl é dito ser uma boa fonte e eu concordaria que Quandl é uma boa fonte de dados gratuitos. No entanto, dada a opção, eu tomaria uma fonte paga como Bloomberg qualquer dia!
Em seguida, executamos o seguinte código para verificar se temos dados para cada um dos nossos dias de negociação e que podemos visualizar visualmente todas as nossas posições históricas, isso também faz parte do conceito de caixa de vidro:
Na captura de tela acima, você notará que os dados só vão até 2018-11-11 e sei que você não pode dizer isso ao ler o artigo, mas espero que haja dados até o 13º. Para corrigir este Dr. Munro adiciona um cheque ao seu código que permite que o ToyStrategy continue, mesmo que haja dados faltantes.
Essa correção é adicionada afirmando que o ToyStrategy só precisa de um mínimo de 10 pontos de dados para calcular uma figura SMA. & # 8220; min_periods = 10 "
Agora, execute o código novamente e observe que o nada realmente mudou. O ToyStrategy ainda tem o mesmo retorno total e relação de informação que antes.
Passo 3: Gerenciamento de pedidos e dimensionamento de posição.
Em seguida, você precisa validar que o ToyStrategy está implementando a técnica corretiva de dimensionamento de posição e que está atendendo às suas expectativas. Em um backtester vectorizado, isso pode ser um pouco complicado ao lidar com compartilhamentos múltiplos, mas o ToyStrategy está executando apenas um recurso e usando uma metodologia vetorializada.
Na etapa 2, você notará que o ToyStrategy está usando números reais para representar o número de contratos mantidos em um ponto no tempo, mas isso é incorreto, você só pode manter um número inteiro de contratos.
Para corrigir isso é simples, basta adicionar a função round ().
Mais uma vez, nada mudou e verifique se estamos usando números inteiros que executamos: print data. tail ()
Etapa 4: Certifique-se de ter removido o avanço da frente.
Em seguida, é claro que temos que olhar para o futuro, devido aos sinais de baseamento da ToyStrategy no preço de fechamento do dia atual. Para remediar isso, precisamos atrasar os dados, neste exemplo, fazemos isso criando uma coluna de "próxima posição" e depois atrasando os valores em uma nova coluna chamada Posição. No código abaixo, isso é realizado adicionando ".shift (1)".
Ouch! Aqui podemos ver a primeira grande diferença na curva de equidade. Descobre que o ToyStrategy é menos atraente agora que não pode olhar para o futuro.
Etapa 5: adicione custos de transação.
Até agora, a estratégia ToyStrategy foi executada sem taxas de transação e derrapagem. Para adicionar insulto à lesão, temos que usar um método muito básico para adicionar as taxas por causa da metodologia vectorizada.
Um backtest bem pensado deve incluir:
Comissões de desligamento Outros efeitos de liquidez Gerenciamento de posição (limites de risco)
De alguma forma, esta estratégia ainda está em curso, não sei como, mas mais importante, podemos ver que não há maneiras de usar esta estratégia no futuro.
Passo 6: negociação ao vivo versus simulação.
Uma prática recomendada é executar seus resultados simulados de mãos dadas com sua negociação ao vivo. Ao fazer isso, você tem uma maneira de procurar erros e corrigir erros.
Se você incluirá seus resultados simulados na folha de informações do seu fundo para o público, então seria uma boa idéia ser o mais prudente possível. É importante que você não tenha grandes discrepâncias entre os dois. Na verdade, é melhor se seus resultados ao vivo são marginalmente melhores do que os da simulação (Melhor prognosticar e entregar).
Considerações finais:
Espero que este artigo tenha adicionado valor aos membros da nossa comunidade que estão começando com backtesting. Há duas coisas que, na minha experiência, fazem a diferença mais dramática, são:
Removendo o parênteses de olhar para a frente ao atrasar os sinais Adicionando custos de transação e deslizamento.
Se você souber de outros artigos que ajudariam os outros a começar, certifique-se de deixar um link na seção de comentários abaixo.
Se você é um codificador ou um profissional de tecnologia que procura iniciar sua própria mesa de negociação automatizada. Aprenda a negociação automatizada de palestras interativas ao vivo por praticantes diários. Programa Executivo em Negociação Algorítmica abrange módulos de treinamento como Statistics & amp; Econometria, Computação Financeira e Tecnologia e Algorítmica e Negociação quantitativa. Inscreva-se agora!
Posts Relacionados:
4 pensamentos sobre "Modelar uma estratégia de negociação básica em python: da idéia à execução"
13 de janeiro de 2018.
Obrigado por compartilhar. Como você faz esses resumidos gráficos de retornos? Como o código acima mostra retornos individualmente apenas.
25 de janeiro de 2018.
O foco deste artigo foi falar sobre as armadilhas comuns em backtesting que os usuários precisam verificar.
Se você quiser saber mais sobre como criar / testar uma estratégia, eu recomendaria este artigo que o orienta através da lógica usada. quantsportal / building-a-simple-moving-average-sma-crossover-strategy-in-microsoft-excel /
Caro Jacques Joubert,
Como obter uma senha para o seu link postado.
28 de janeiro de 2018.
Eu estava perguntando como você consegue obter o padrão de cumsum (0 com dados de impressão [& # 8216; Posição & # 8217;] [- 1], mas o que quer que seja.
Puxe pedidos 0.
Participe do GitHub hoje.
O GitHub é o lar de mais de 20 milhões de desenvolvedores que trabalham juntos para hospedar e rever o código, gerenciar projetos e criar software juntos.
Clone com HTTPS.
Use o Git ou o check-out com o SVN usando o URL da web.
O finmarketpy é uma biblioteca baseada em Python que permite que você analise os dados de mercado e também as estratégias de negociação backtest usando uma API simples de usar, que possui modelos pré-construídos para que você defina backtest. Incluído na biblioteca.
Modelos pré-construídos para estratégias de negociação de backtesting Exibir retornos históricos para estratégias de negociação Investigar sazonalidade das estratégias de negociação Realizar estudos de eventos de mercado em torno de eventos de dados Na calculadora construída para ponderação de risco usando a segmentação de volatilidade Escrito de maneira orientada a objeto para tornar o código mais reutilizável.
Os contribuintes para o projeto são muito bem-vindos, vendem abaixo!
Eu já escrevi a biblioteca financeira open source PyThalesians (que foi mesclada com isso - por isso pode se concentrar em manter um conjunto de bibliotecas). Esta nova biblioteca finmarketpy tem.
Funcionalidade semelhante à parte comercial dos pythalesianos Reescreveu a API para torná-la muito mais limpa e fácil de usar, além de ter muitos novos recursos. finmarketpy requer as bibliotecas, que escrevi chartpy (para gráficos) e findatapy (para carregar dados de mercado) para funcionar. Ao dividir em bibliotecas mais pequenas e mais especializadas, isso facilitaria os colaboradores. Usando a funcionalidade, você pode baixar dados de mercado com facilidade de Bloomberg, Quandl, Yahoo, etc. Usando chartpy, você pode optar por exibir resultados em matplotlib, plotly ou bokeh, alterando uma única palavra-chave!
Por favor, tenha presente que o finmarketpy está em desenvolvimento contínuo. A API está fortemente documentada, mas estamos procurando adicionar documentação mais geral. Usa a licença Apache 2.0.
Calcule historicamente os retornos acumulados de uma estratégia de negociação (veja finmarketpy_exemplo / tradingmodelfxtrend_example. py)
Trace a alavanca da estratégia ao longo do tempo.
Trace os retornos comerciais individuais.
Calcule a sazonalidade de qualquer ativo: aqui mostramos sazonalidade de volatilidade de ouro e FX (veja exemplos / seasonality_examples. py)
Calcule o estudo de eventos em torno de eventos para ativos (veja exemplos / events_examples. py)
Para instruções de instalação detalhadas para finmarketpy e suas bibliotecas Python associadas, vá para https: //github/cuemacro/finmarketpy/blob/master/INSTALL. md (que inclui detalhes sobre como configurar todo o seu ambiente Python).
Você pode instalar a biblioteca usando o abaixo (melhor para obter a versão mais recente do repo, em oposição aos lançamentos).
Certifique-se de editar o arquivo MarketConstants.
Mas, de antemão, assegure-se de que já tenha instalado tanto chartpy, findatapy quanto outras dependências. No chartpy, você precisará alterar o arquivo ChartConstants (para adicionar a API Plotly) e para a descoberta, você também precisará alterar o arquivo DataConstants para adicionar a API Quandl (e, possivelmente, alterar outras configurações).
Os contribuintes são sempre bem-vindos para finmarketpy, findatapy e chartpy. Se você quiser contribuir, dê uma olhada em [Recursos planejados] (PLANNED_FEATURES. md] para áreas em que estamos procurando ajuda. Ou se você tiver alguma idéia de melhorias nas libriares, informe-nos também!
Em finmarketpy / examples você encontrará vários exemplos, incluindo alguns modelos de negociação simples.
0.11 - finmarketpy Primeira versão do pré-lançamento.
04 de janeiro de 2018 - Correção de erros para cancelamento de contas de constantes 16 de setembro de 2017 - Adicionando à lista de recursos planejados 10 de julho de 2017 - Adicionado instruções de instalação para conda 03 de julho de 2017 - Dependência fixa de biblioteca sazonal 26 de junho de 2017 - BacktestEngine agora pode lidar com carteiras de estilo de soma ponderada 23 de junho de 2017 - Data de observação de downloads para dados econômicos (EventStudy) 21 de junho de 2017 - Tendência adicionada após o exemplo usando os dados de retorno total da Bloomberg 07 de junho de 2017 - Produção adicionada de IR / Rets na análise de sensibilidade (TradeAnalysis) 22 de maio de 2017 - Retornos da estratégia (para arquivo CSV) 03 de maio de 2017 - Adicionado mais recursos planejados 13 de abril de 2017 - Data de término alterada na tendência de FX seguindo modelo 12 Mar 2017 - Exemplo de animação de superfície de voltagem FX adicionada 25 de fevereiro de 2017 - Parâmetro de atraso de sinal adicionado 24 de fevereiro de 2017 - Aulas de teste reverso por isso, tenha uma nomeação consistente 21 de fevereiro de 2017 - Repetição do BacktestEngine para usar o SwimPool 20 de fevereiro de 2017 - Instruções de instalação extra 14 de fevereiro de 2017 - Adicionado recursos planejados página 08 Feb 2017 - Adicionado SHOW_CHARTS Parámetro para TradingModel e funcionou SMA com pandas antigos 05 de fevereiro de 2017 - Adicionado mais notas de instalação e saída fixa do Excel em TradeAnalysis se nocional não especificado 02 de fevereiro de 2017 - Alterações adicionais às restrições em max long / shorts (com refatoração) 01 de fevereiro de 2017 - Adicionado restrições para longs / shorts e parcelas máximas em BacktestEngine 25 de janeiro de 2017 - Trabalho adicional em paradas / lucro com vários ativos e amp; planejando correções de bugs para TradeAnalysis 24 de janeiro de 2017 - Corrigindo problemas em torno de paradas / tirar lucros e adicionar campos em TechParams 19 de janeiro de 2017 - Alterar localização de exemplos no projeto 16 de janeiro de 2017 - Método adicionado no BacktestEngine para depuração de P & amp; L (tabela de despejos com sinais / ativos / devoluções) 12 de janeiro de 2017 - Adicionado notas de instalação detalhadas 11 de janeiro de 2017 - Reescreveu um grande número de comentários, adicionou o cálculo do ATR e a perda básica de perda / aproveita a funcionalidade de lucro 07 de janeiro de 2017 - Agora as saídas do tamanho da posição são dimensionadas por nocional e amp; por tamanhos de contrato definidos pelo usuário 06 de janeiro de 2017 - Adicionado ponderações definidas pelo usuário para estratégias e estratégias; correcções gerais de erros 04 de janeiro de 2017 - Adicionado um parâmetro de mudança de período para cálculo de alavancagem (em RiskEngine) 30 de novembro de 2018 - Exemplo de sazonalidade adicionado para NFP 24 de novembro de 2018 - Exemplo de sazonalidade adicionado para gasolina 17 de novembro de 2018 - Fonte alterada para ChartConstants padrão para TradingModel 14 Out 2018 - Referências de ártico corrigidas em MarketConstants 13 de outubro de 2018 - Correção de planejamento de IR fixo para BacktestEngine, adicionado parcelas métricas YoY 11 de outubro de 2018 - Adicionado a TradeAnalysis outra maneira de traçar estatísticas de retorno para uma carteira 10 de outubro de 2018 - Adicionado return_example para mostrar como usar o PyFolio via finmarketpy, entrada adicional de dataframe para TradeAnalysis, typo fixo em readme 07 de outubro de 2018 - Adicionar. idea a. gitignore 06 de outubro de 2018 - Divisão de número de negociações e proporção de posição 22 de setembro de 2018 - Fixação de classificação de colunas quando o sinal conspira 21 de setembro de 2018 - Permitir o enredo de vários dias de sinal 15 de setembro de 2018 - Fusionado finmarketpy e pythalesians totalmente, versão lançada 0.11 12 Set 2018 - Problema corrigido com TradeAnalysis (método na mes) 02 de setembro de 2018 - Problema corrigido com eventos externos de dataframe eco, exemplo de estudo de evento adicionado 01 de setembro de 2018 - Exemplo de sazonalidade adicionado para FX vol 22 de agosto de 2018 - Problema de inicialização corrigido e credenciais adicionadas 17 de agosto de 2018 - Primeiro código carregado.
03 de agosto de 2018 - Corrigido os arquivos de falta de conf 02 02 de agosto de 2018 - Padrão alterado Plotly cores de fundo e constantes fixas problema com AdapterTemplate 01 de agosto de 2018 - Renovado pythalesians_graphics como chartesians (preparando o encerramento final) 29 Jul 2018 - Criado Jupyter notebook plot_market_data para plotar com várias bibliotecas, também corrigiu o problema de dimensionamento de Bokeh, a biblioteca refratada, a funcionalidade do gráfico de spinning em pythalesians_graphics 28 de julho de 2018 - Problema corrigido com vários campos retornados por Quandl, adicionado exemplo de download Quandl 26 de julho de 2018 - Adicionado mais suporte para Gráficos Plotly, superfície adicionada Exemplo de Plotly 21 Jul 2018 - Refactor StrategyTemplate funções de traçado do gráfico 20 de julho de 2018 - Retorno do identificador de figura para AdapterPyThalesians 08 de junho de 2018 - Problema de correção de correção, escala de voltagem refratária em CashBasktest, wrapper de resample adicionado no TimeSeriesFilter 03 de junho de 2018 - Acelere CashBacktest (método construct_strategy) 02 de junho de 2018 - Corrigido o arquivo de StrategyTemplate perdido na instalação, adicionou um uto-detecção do caminho para simplificar a instalação e métodos adicionais para a conversão entre pandas e bcolz 31 de maio de 2018 - Livrado dos métodos Pandas obsoletos no TechIndicator 27 de maio de 2018 - Adicionado a capacidade de traçar o sinal da estratégia no momento 19 de maio de 2018 - Atualizado Whenl wrapper para usar a nova API de Quandl 02 de maio de 2018 - Retirada do BacktestRequest, adicionou o exemplo de sazonalidade SPX 28 de abril de 2018 - Cashbacktest atualizado (para Pandas 0.18) 21 de abril de 2018 - Livrado de métodos de Pandas obsoletos no EventStudy 18 Abr 2018 - Corrigido alguns problemas de incompatibilidade com Pandas 0,18 06 de abril de 2018 - Adicionado mais saída de estatísticas comerciais 01 Abr 2018 - Acelerou as operações de junção, notável ao buscar séries de alta freqüência alta 21 de março de 2018 - Adicionado o notebook IPython para demonstrar como testar a tendência de FX simples após a estratégia de negociação 19 Mar 2018 - Testado com Python 3.5 64 bit (Anaconda 2.5 no Windows 10) 17 de março de 2018 - Refatorizado algumas das funções da série gráfica / temporária e StrategyTemplate 11 Mar 2018 - Alertas corrigidas no matplo tlib 1.5 09 de março de 2018 - Adicionado mais recursos de TradeAnalysis (para análise de sensibilidade de estratégias de negociação) 01 Mar 2018 - Adicionado notebook de IPython para demonstrar como baixar dados de mercado e gráfico 27 de fevereiro de 2018 - Retornos totais corrigidos Exemplo de FX 20 de fevereiro de 2018 - Adicionado mais parâmetros para StrategyTemplate 13 de fevereiro de 2018 - Métodos editados de filtro de séries temporais 11 de fevereiro de 2018 - Exemplo adicionado para traçar intervenções BoJ contra o ponto USDJPY 10 de fevereiro de 2018 - Descrição atualizada do projeto 01 de fevereiro de 2018 - Adicionado LightEventsFactory para tornar mais fácil lidar com eventos de dados econômicos (armazenados como Arquivos HDF5) 20 de janeiro de 2018 - Medida de curtose adicionada para resultados da estratégia de negociação, problema de Quandl fixado 19 de janeiro de 2018 - Nome da pasta de exemplos alterados 15 de janeiro de 2018 - Adicionado o exemplo de correlação FX de risco aumentado 05 Jan 2018 - Construção de índices de retorno total (spot) para FX e exemplo 26 de dezembro de 2018 - Problema corrigido com downloaders de dados econômicos 24 de dezembro de 2018 - Modelos de dados de dados adicionados para criação de indicadores personalizados 19 de dezembro de 2018 - Dukascopy Refatorada do Wnloader 10 de dezembro de 2018 - Diversas correções de bugs 22 de novembro de 2018 - Maiores recursos de segmentação por voltagem para fazer backtesting 07 de novembro de 2018 - Função adicionada para baixar dados de bloqueio de Bloomberg (com exemplo) 05 de novembro de 2018 - Classe de estudo de evento intraday adicionada (e exemplo) 02 nov. 2018 - Adicionado pacote fácil para fazer correlações de rolamento (e exemplo) 28 de outubro de 2018 - Adicionado mais análise de sensibilidade para estratégias de negociação 26 de outubro de 2018 - Diversas correções de bugs para Bloomberg Open API downloader 14 de outubro de 2018 - Capacidade adicional para fazer download paralelo de dados de mercado ( biblioteca de thread / multiprocessamento), com um exemplo de benchmarking e correções de bugs para o baixador Bloomberg 25 de setembro de 2018 - Exemplos Refatorados em diferentes pastas / mais exemplos de sazonalidade 19 de setembro de 2018 - Adicionado suporte para Plotly choropleth map plots & amp; download fácil de dados econômicos via FRED / Bloomberg / Quandl 12 de setembro de 2018 - Adicionado suporte básico para PyFolio para análise estatística de estratégias 04 de setembro de 2018 - Estratégia de Estratégia Adicionada para teste de backtest (com exemplo) e amp; correções de erros 21 de agosto de 2018 - Adicionado gráficos empilhados (com matplotlib e amp; bokeh) & amp; várias correções de bugs 15 de agosto de 2018 - Gráficos de barras adicionados (com matplotlib e amp; bokeh) & amp; adicionou mais funções de filtro de séries temporais 09 de agosto de 2018 - Suporte aprimorado para Bokeh 07 de agosto de 2018 - Suporte adicional de Plotly (através do envoltório de mancuernas Jorge Santos) 04 de agosto de 2018 - Adicionado a capacidade de download de FRED e exemplo para download de FRED. 29 de julho de 2018 - Funções de backtesting adicionadas (incluindo estratégia de tendência de tendência FX simples) e várias correções de erros / comentários. 24 de julho de 2018 - Funções adicionais para fazer estudos sazonais simples e exemplos adicionais. 17 de julho de 2018 - Exemplo criado para mostrar como usar indicadores técnicos. 13 de julho de 2018 - Mudou a localização da conf, renomeando a pasta de exemplos para exemplos pythalesianos. Agora pode ser instalado usando setup. py. 10 de julho de 2018 - Adicionado a capacidade de baixar os dados do ticks Dukascopy FX (os dados são gratuitos para uso pessoal - verifique termos e condições da Dukascopy). Observe que o mês passado de dados geralmente não está disponível pela Dukascopy.
&cópia de; 2018 GitHub, Inc. Termos Privacidade Segurança Status Ajuda.
Você não pode executar essa ação neste momento.
Você fez login com outra guia ou janela. Recarregue para atualizar sua sessão. Você se separou em outra guia ou janela. Recarregue para atualizar sua sessão.
cointrader 0.4.0.
O Cointrader é uma aplicação comercial para moedas criptográficas.
Cointrader.
O Cointrader é um aplicativo de troca CLI baseado em Python para moedas criptográficas na troca Poloniex. O Cointrader pode ser usado para negociação guiada semiautomática.
Você poderia perder dinheiro. Use o monstro sob seu próprio risco! Não aceito nenhuma responsabilidade por quaisquer perdas.
Cointrader é uma qualidade alfa! Não se destina a ser usado para negociação séria ainda. Ainda está em fase de desenvolvimento precoce e tem um monte de defeitos conhecidos. Espere todos os aspectos da aplicação para mudar no futuro. O Cointrader não é testado rotineiramente.
Se você quiser ajudar a combinar o melhor software de Software Livre, sua contribuição é altamente apreciada! Encontre detalhes sobre como participar da documentação.
Status: Alpha Software livre: licença MIT Fonte: https: // github / toirl / cointrader Documentação: https://cointrader. readthedocs. io.
Se você gosta do programa, estou ansioso para uma doação :)
DASH: XypsuUMRTioV7bHSVzSDkNgihtr1gfiqAr BTC: 1L5xtVirGVpDL7958SPaHb6p9dHZoaQ2Cz.
Negociação automática. A Cointrader irá comprar e vender os seguintes sinais de emissão emitidos. Comércio semiautomático. O Cointrader simplesmente emite sinais comerciais. Você finalmente decide se deseja seguir os sinais. Comércio de papel. Simples negociação. Na verdade, não coloque ordens reais. Trade logbook Análise de lucro / perda (Bot vs. Market) Backtesting. Verifique o quão boa sua estratégia executa em gráficos históricos. Explore os intercâmbios e encontre mercados interessantes para negociar em Mostrar seus saldos.
Gerenciamento de risco e dinheiro Parar limites de perda Tomar limites de lucro Estratégias de negociação externas em preenchimento Apoiar mais trocas.
Motivação.
Este programa existe porque eu quero aprender mais sobre negociação automática com base em uma análise técnica de gráficos. Eu não sou um especialista em negociação ou em criptografia! Eu sou um programador Python profissional que enfiou o nariz na moeda cripto e no mundo comercial em 2017 e que foi fascinado diretamente neste tópico. Depois de ler alguns livros sobre análise técnica, decidi escrever este programa para saber mais sobre como funciona a negociação automática.
Este pacote foi criado com Cookiecutter e o modelo de projeto audrey / cookiecutter-pypackage.
0.4.0 (2017-03-16)
Primeira versão com funcionalidade de negociação real. No entanto, o contratador ainda não possui nenhuma estratégia comercial. Portanto, a estratégia padrão não fará nada do que esperar :). No entanto, você pode usar o modo interativo para comprar e vender moedas se quiser.
Comercialização automática adicionada. O Cointrader seguirá os sinais emitidos da estratégia. Adicionado Papertrading. Faça negócios sem qualquer risco. O Cointrader irá simular a negociação. Adicionado Tradelog.
Tag: sinais.
Crie uma estratégia de negociação a partir do zero no Python.
Para mostrar-lhe o processo completo de criação de uma estratégia de negociação, eu vou trabalhar em uma estratégia super simples baseada no VIX e seus futuros. Eu simplesmente ignoro o download de dados de Quandl, I & # 8217; m usando o índice VIX a partir daqui e os futuros VIX a partir daqui, apenas os contratos de dados contínuos VX1 e VX2.
Carregamento de dados.
Primeiro, precisamos carregar todas as importações necessárias, a importação do backtest será usada mais tarde:
Por uma questão de simplicidade, eu irei colocar todos os valores em um DataFrame e em diferentes colunas. Nós temos o índice VIX, VX1 e VX2, isso nos dá esse código:
E aqui é o resultado:
Para este tutorial, irei usar um sinal muito básico, a estrutura é a mesma e você pode substituir a lógica por sua estratégia, que quer, usando algos de aprendizagem de máquina muito complexos ou simplesmente cruzando médias móveis.
O VIX é um recurso de reversão média, pelo menos em teoria, significa que ele vai subir e descer, mas, no final, seu valor se moverá em torno de uma média. Nossa estratégia será diminuir quando for mais do que seu valor médio e ficar curto quando é muito baixo, com base em valores absolutos para mantê-lo simples.
Agora, gostaríamos de visualizar o sinal para verificar se, pelo menos, a estratégia parece lucrativa:
O resultado é bastante bom, apesar de não haver troca entre 2009 e 2018, podemos melhorar isso mais tarde:
Backtesting.
Deixe verificar se a estratégia é rentável e obter algumas métricas. Nós iremos comparar nossos retornos de estratégia com o & # 8220; Buy and Hold & # 8221; estratégia, o que significa que acabamos de comprar o futuro do VX1 e esperar (e rolar em cada período de validade), desta forma, podemos ver se a nossa estratégia é mais rentável do que passiva.
Coloco o método de backtest em um arquivo separado para tornar o código principal menos pesado, mas você pode manter o método no mesmo arquivo:
No código principal, eu irei usar o método backtest como este:
É importante mostrar o retorno anualizado, uma estratégia com um retorno de 20% ao longo de 10 anos é diferente de um retorno de 20% ao longo de 2 meses, anualizamos tudo para que possamos comparar estratégias facilmente. A Ratio Sharpe é uma métrica útil, nos permite ver se o retorno vale o risco, neste exemplo eu simplesmente assumi uma taxa livre de risco de 0%, se a proporção for & gt; 1 significa que o retorno ajustado ao risco é interessante, se ele for # 8217; s & gt; 10 significa que o retorno ajustado ao risco é muito interessante, basicamente alto retorno por uma baixa volatilidade.
No nosso exemplo, temos uma proporção Sharpe bonita de 4.6 que é bastante boa:
Finalmente, queremos traçar a estratégia PnL vs o & # 8220; Compre e segure & # 8221; PnL:
A estratégia foi perfeitamente realizada até 2018, mas, a partir de 2018, a PnL começa a estagnar:
Conclusão.
Eu mostrei-lhe uma estrutura básica de criação de uma estratégia, você pode adaptá-la às suas necessidades, por exemplo, você pode implementar sua estratégia usando a linha aérea em vez de um módulo personalizado de teste de bactos. Com a linha aérea, você terá mais métricas e você poderá facilmente executar sua estratégia em diferentes ativos, uma vez que os dados do mercado são gerenciados pela zipline.
Eu não mencionei quaisquer taxas de transações ou spread de oferta e oferta nesta publicação, o backtest não tem em conta tudo isso, então talvez, se os incluíssemos, a estratégia perderia dinheiro!
Usando matplotlib para identificar sinais comerciais.
Encontrar sinais comerciais é um dos principais problemas de negociação algorítmica, sem quaisquer bons sinais de que sua estratégia será inútil. Este é um processo muito abstrato, pois você não consegue adivinhar intuitivamente quais sinais irão tornar sua estratégia rentável ou não, por isso eu vou explicar como você pode ter pelo menos uma visualização dos sinais para que você possa ver se o Os sinais fazem sentido e os apresentam em seu algoritmo.
Nós usaremos matplotlib para representar o gráfico do preço do ativo e adicionar sinais de compra / venda no mesmo gráfico, desta forma você pode ver se os sinais são gerados no momento certo ou não: comprar baixo, vender alto.
Preparação de dados.
Para este tutorial, escolhi uma estratégia muito simples, que é uma média móvel de cruzamento, a idéia é comprar quando o & # 8220; short & # 8221; média móvel, digamos que 5 dias está cruzando o & # 8220; long & # 8221; média móvel, vamos dizer 20 dias, e vender quando eles cruzam o outro lado.
Primeiro passo fácil, instalando matplotlib através do som comum:
Este exemplo requer pandas e matplotlib:
I & # 8217; m usando o E-mini futuro conjunto de dados de Quandl, veja este artigo.
Carregar dados e calcular as médias móveis é bastante trivial graças a Pandas:
Agora, a parte de geração de sinal real é um pouco mais complicada:
compra e venda está agora contendo todas as datas em que temos um sinal.
Traçando os sinais.
A parte interessante é o gráfico desta, a sintaxe é simples:
Queremos exibir o preço E-Mini e as médias móveis são bastante simples, usamos data. index porque as datas no DataFrame estão no índice:
Mas, para os sinais, queremos colocar cada marcador na data específica, que está no índice e no nível de preço E-Mini para que visualmente não seja muito confuso:
data. ix [buys. index] [& # 8216; Settle & # 8217;] significa que nós levamos o & # 8216; Settle & # 8217; campo no data DataMrame.
Aqui está o resultado final:
Conclusão.
Você pode interpretar isso observando que a maioria dos sinais de compra está em quedas na curva e os sinais de venda estão em máximos locais. Portanto, nossa geração de sinais parece promissora, no entanto, sem um back-back real, não podemos ter certeza de que a estratégia seja rentável, pelo menos podemos validar ou não um sinal.
A principal vantagem deste método é que podemos ver instantaneamente se os sinais são & # 8220; direita & # 8221; ou não, por exemplo, você pode jogar com a média móvel curta e longa, você pode tentar 10 dias contra 30 dias etc. e, no final, você pode escolher os parâmetros certos para este sinal.
Modelo de estratégia de negociação básica em python: da idéia à execução.
Recentemente, tive o privilégio de participar da conferência Python for Quants em Londres via streaming ao vivo. Cada vez que assisto a esta série de palestras, tento capturar uma das apresentações por escrito, desta vez, vou escrever em uma palestra dada pelo Dr. James Munro intitulado "Estratégias de Quant: de idéia para execução".
Note que, enquanto eu usei sua palestra para a maioria das informações aqui, eu faço mudanças e adiciono minhas próprias experiências. O que está escrito aqui não é aprovado pelo Man AHL e use sua imaginação para adicionar todas as outras divulgações que você achar adequadas.
Gostei muito da sua palestra porque me falou como profissional que gasta muito tempo fazendo testes diferentes. Ele muito bem captura os erros comuns em um backtesting.
Neste artigo, cobrimos uma estratégia de negociação bastante básica, que começa a parecer atractiva, mas, à medida que adicionamos fatores mais realistas, você notará como o desempenho decai.
A estratégia é um simples 20 dias em mover uma estratégia de cruzamento média. Exemplo: se o preço atual estiver acima da média móvel, então compre e segure, então, fique curto e aguarde. A estratégia será chamada "ToyStrategy".
O ToyStrategy será executado nos futuros do gás natural.
Observe que, nos futuros, teremos que reverter os contratos e juntar os preços, razão pela qual estamos usando o preço de liquidação ajustado.
Como um evangelista de backtesting, faço questão de divulgar as boas notícias dos dois tipos diferentes de frameworks: vectorizada e orientada para eventos. Para este exemplo, o Dr. Munro decidiu em um backtester vetorial que é ótimo para prototipagem rápida de uma estratégia, mas é o maior mal quando se trata de precisão e flexibilidade.
Passos para um backtester vectorizado:
Obter dados (gás natural) Criar seu indicador (SMA de 20 dias) Gerar sinais com base na lógica de negociação Gerar posições mantidas Calcular métricas de desempenho Traçar a curva de patrimônio.
Tada ... Aqui está o primeiro backtest com retornos totais de US $ 32 milhões e uma taxa de informação de 2,3.
Como a maioria das coisas na vida, quando alguém está tentando vender algo que é muito bom para ser verdade, provavelmente é. À primeira vista, esta é uma estratégia impressionante que deve ser implementada imediatamente! No entanto, este artigo irá orientá-lo através de algumas das verificações que você precisa executar para validar a estratégia.
Passo 1: Transforme sua caixa preta em uma caixa de vidro.
Agora, existem algumas estratégias que implementam técnicas de aprendizado de máquina que são mais difíceis de se transformar em uma caixa de vidro, mas essa não é uma delas. A maneira mais fácil de melhorar a transparência é simplesmente traçar todas as colunas em nosso quadro de dados.
Ao fazer isso, podemos validar que nosso modelo atua como esperado.
Gráfico 1: Existem dados de preços disponíveis para cada dia (Não há dados em falta por períodos de tempo muito grandes).
Gráfico 2: Limpe que o SMA de 20 dias suaviza os dados e que não temos lacunas ou picos anormais.
Gráfico 3: Este gráfico de sinal é diferente dos meus outros backtests, pois não é simplesmente um valor em que 1 representa uma compra, 0 como liquido e -1 para ficar curto. Neste gráfico, temos que multiplicar o valor do sinal por um múltiplo para gerar a Posição. (Não é a melhor técnica de dimensionamento de posição por um tiro longo, mas esta é uma estratégia de brinquedo.)
Gráfico 4: representa o número de lotes que estamos ocupando em qualquer momento.
Gráfico 5: Retornos diários.
Etapa 2: Validação de dados.
Em seguida, precisamos validar que temos dados limpos. Os dados limpos incluem as seguintes verificações:
Tenha dados para cada dia de negociação. Se houver dados em falta, execute um preenchimento para a frente. Certifique-se de que não haja picos irrealistas nos dados. Por exemplo: se o preço da ação média for entre 400 e 300, de repente, há um pico de 4000, você precisará corrigir isso. Isso também se aplica a quando um valor de 0 é inserido em seus dados. Verifique se não há datas duplicadas em sua série temporal Certifique-se de que seus dados sejam ajustados para divisões e consolidações de ações, tendo preços ajustados por dividendos for um bônus. Cuidado com as fontes de dados gratuitas! Na minha experiência, fontes de dados gratuitas possuem dados menos limpos.
Certifique-se de que os dados estejam limpos! Pessoalmente, uma grande parte do meu tempo é gasto comprando e limpando dados. Quandl é dito ser uma boa fonte e eu concordaria que Quandl é uma boa fonte de dados gratuitos. No entanto, dada a opção, eu tomaria uma fonte paga como Bloomberg qualquer dia!
Em seguida, executamos o seguinte código para verificar se temos dados para cada um dos nossos dias de negociação e que podemos visualizar visualmente todas as nossas posições históricas, isso também faz parte do conceito de caixa de vidro:
Na captura de tela acima, você notará que os dados só vão até 2018-11-11 e sei que você não pode dizer isso ao ler o artigo, mas espero que haja dados até o 13º. Para corrigir este Dr. Munro adiciona um cheque ao seu código que permite que o ToyStrategy continue, mesmo que haja dados faltantes.
Essa correção é adicionada afirmando que o ToyStrategy só precisa de um mínimo de 10 pontos de dados para calcular uma figura SMA. & # 8220; min_periods = 10 "
Agora, execute o código novamente e observe que o nada realmente mudou. O ToyStrategy ainda tem o mesmo retorno total e relação de informação que antes.
Passo 3: Gerenciamento de pedidos e dimensionamento de posição.
Em seguida, você precisa validar que o ToyStrategy está implementando a técnica corretiva de dimensionamento de posição e que está atendendo às suas expectativas. Em um backtester vectorizado, isso pode ser um pouco complicado ao lidar com compartilhamentos múltiplos, mas o ToyStrategy está executando apenas um recurso e usando uma metodologia vetorializada.
Na etapa 2, você notará que o ToyStrategy está usando números reais para representar o número de contratos mantidos em um ponto no tempo, mas isso é incorreto, você só pode manter um número inteiro de contratos.
Para corrigir isso é simples, basta adicionar a função round ().
Mais uma vez, nada mudou e verifique se estamos usando números inteiros que executamos: print data. tail ()
Etapa 4: Certifique-se de ter removido o avanço da frente.
Em seguida, é claro que temos que olhar para o futuro, devido aos sinais de baseamento da ToyStrategy no preço de fechamento do dia atual. Para remediar isso, precisamos atrasar os dados, neste exemplo, fazemos isso criando uma coluna de "próxima posição" e depois atrasando os valores em uma nova coluna chamada Posição. No código abaixo, isso é realizado adicionando ".shift (1)".
Ouch! Aqui podemos ver a primeira grande diferença na curva de equidade. Descobre que o ToyStrategy é menos atraente agora que não pode olhar para o futuro.
Etapa 5: adicione custos de transação.
Até agora, a estratégia ToyStrategy foi executada sem taxas de transação e derrapagem. Para adicionar insulto à lesão, temos que usar um método muito básico para adicionar as taxas por causa da metodologia vectorizada.
Um backtest bem pensado deve incluir:
Comissões de desligamento Outros efeitos de liquidez Gerenciamento de posição (limites de risco)
De alguma forma, esta estratégia ainda está em curso, não sei como, mas mais importante, podemos ver que não há maneiras de usar esta estratégia no futuro.
Passo 6: negociação ao vivo versus simulação.
Uma prática recomendada é executar seus resultados simulados de mãos dadas com sua negociação ao vivo. Ao fazer isso, você tem uma maneira de procurar erros e corrigir erros.
Se você incluirá seus resultados simulados na folha de informações do seu fundo para o público, então seria uma boa idéia ser o mais prudente possível. É importante que você não tenha grandes discrepâncias entre os dois. Na verdade, é melhor se seus resultados ao vivo são marginalmente melhores do que os da simulação (Melhor prognosticar e entregar).
Considerações finais:
Espero que este artigo tenha adicionado valor aos membros da nossa comunidade que estão começando com backtesting. Há duas coisas que, na minha experiência, fazem a diferença mais dramática, são:
Removendo o parênteses de olhar para a frente ao atrasar os sinais Adicionando custos de transação e deslizamento.
Se você souber de outros artigos que ajudariam os outros a começar, certifique-se de deixar um link na seção de comentários abaixo.
Se você é um codificador ou um profissional de tecnologia que procura iniciar sua própria mesa de negociação automatizada. Aprenda a negociação automatizada de palestras interativas ao vivo por praticantes diários. Programa Executivo em Negociação Algorítmica abrange módulos de treinamento como Statistics & amp; Econometria, Computação Financeira e Tecnologia e Algorítmica e Negociação quantitativa. Inscreva-se agora!
Posts Relacionados:
4 pensamentos sobre "Modelar uma estratégia de negociação básica em python: da idéia à execução"
13 de janeiro de 2018.
Obrigado por compartilhar. Como você faz esses resumidos gráficos de retornos? Como o código acima mostra retornos individualmente apenas.
25 de janeiro de 2018.
O foco deste artigo foi falar sobre as armadilhas comuns em backtesting que os usuários precisam verificar.
Se você quiser saber mais sobre como criar / testar uma estratégia, eu recomendaria este artigo que o orienta através da lógica usada. quantsportal / building-a-simple-moving-average-sma-crossover-strategy-in-microsoft-excel /
Caro Jacques Joubert,
Como obter uma senha para o seu link postado.
28 de janeiro de 2018.
Eu estava perguntando como você consegue obter o padrão de cumsum (0 com dados de impressão [& # 8216; Posição & # 8217;] [- 1], mas o que quer que seja.
Комментариев нет:
Отправить комментарий