Estratégia de negociação simples python
Python de estratégia de negociação simples
Nós vamos criar uma estratégia de cruzamento Simple Moving Average neste financiamento com o tutorial Python, o que nos permitirá ficar confortáveis com a criação de nosso próprio algoritmo e utilizando os recursos da Quantopian. Para começar, vá para a guia Algoritmos e escolha o botão "Algoritmo novo". Aqui, você pode nomear seu algoritmo o que quiser, e então você deve ter algum código inicial como:
Como você pode ver, alguns códigos iniciais foram preparados para nós.
Se você não está familiarizado com as médias móveis, o que faz é ter um certo número de "janelas" de dados. No caso de correr contra preços diários, uma janela seria um dia. Se você pegasse uma média móvel de 20, isso significaria uma média móvel de 20 dias. A partir daqui, a idéia é dizer que você tem uma média móvel de 20 e uma média móvel de 50. Traçar isso em um gráfico pode parecer algo como:
Aqui, a linha azul é o preço das ações, a linha vermelha é a média móvel de 20 e a linha amarela é a média móvel de 50. A idéia é que quando a média móvel de 20, que reage mais rápido, ultrapassa a média móvel de 50, isso significa que o preço pode estar tendendo, e podemos querer investir. Por outro lado, se a média móvel de 20 cai abaixo da média móvel de 50, isso talvez signifique que o preço está em declínio e que queremos vender ou investir ou até vender a empresa.
Venda curta.
A venda a descoberto é o ato de vender uma segurança que não possui. Normalmente, isso é feito emprestando a parte de outra pessoa para vender, com a promessa de comprá-lo de volta. O objetivo aqui é vender o estoque de outra pessoa, por exemplo, $ 100, porque você acha que vai cair. Então, então cai para US $ 90, você compra de volta, e depois devolve o proprietário original. A diferença de US $ 10 é sua para manter.
A venda a descoberto é arriscada por dois motivos principais. O primeiro é que, na maioria das vezes, é que a outra pessoa está emprestando as ações da empresa, então este é um empréstimo, e você pode acabar perdendo dinheiro que você nunca teve.
A próxima razão pela qual isso é arriscado é porque um short pode ir infinitamente ruim. Por exemplo, se você comprar uma empresa por US $ 100, o máximo que você pode perder é de US $ 100 por ação, pois a participação pode ser igual a zero. Se você abre uma empresa que é de US $ 100, você pode perder uma quantidade infinita de dinheiro, porque essa empresa deve pagar US $ 200 por ação, US $ 2.000 por ação. ou $ 200,000 por ação. É claro que é improvável que isso seja ruim, mas o ponto é: você pode perder muito mais do que seu investimento original, e isso geralmente é acompanhado pelo fato de que o investimento original não era mesmo com o dinheiro, era um empréstimo.
Normalmente, você será emprestado a parte pelo seu corretor ou banco, que também tem o direito de reclamar as ações sempre que quiserem. Isso significa que as ações de US $ 100 podem subir para US $ 110 antes de descer para US $ 90, mas o banco pode reclamar as ações na marca de US $ 110 e você está pagando essa conta.
Olhando para o gráfico acima, parece-nos gostaríamos de fazer muito bem. Perdemos os picos absolutos e as tarifas do preço, mas, em geral, pensamos que faríamos tudo bem com esta estratégia.
Toda vez que você cria um algoritmo com Zipline ou Quantopian, você precisará ter os métodos initialize e handle_data. Eles devem ser incluídos em todos os algoritmos que você inicia de novo.
O método de inicialização é executado uma vez no início do algoritmo (ou uma vez por dia, se você estiver executando o algoritmo ao vivo em tempo real). Handle_data é executado uma vez por período. No nosso caso, estamos executando dados diários, então isso significa que ele será executado uma vez por dia.
Dentro do nosso método de inicialização, geralmente passamos esse parâmetro de contexto. Contexto é um dicionário de Python, que é o que usaremos para rastrear o que de outra forma poderemos usar variáveis globais. O contexto acompanhará vários aspectos do nosso algoritmo de negociação à medida que o tempo passa, para que possamos fazer referência a essas coisas dentro do nosso script.
Dentro do nosso método de inicialização:
O que isto faz, é definir nossa segurança para negociação para o SPY. Este é o ETF (Exchange Traded Fund) do Spyder S & P 500, que é um método que podemos usar para negociar o índice S & P 500.
Isso é tudo o que faremos agora no nosso método de inicialização, a seguir iniciaremos nosso método handle_data:
Observe aqui que passamos o contexto e um novo parâmetro chamado dados. Dados rastreiam os dados atuais das empresas dentro do nosso "universo comercial". O universo é a coleção de empresas às quais estamos potencialmente interessados em investir. No nosso caso, estabelecemos este universo no início no método de inicialização, definindo todo o nosso universo no SPY.
Simplificando, o contexto var é usado para rastrear nossa atual situação de investimento, com coisas como nosso portfólio e dinheiro. A variável de dados é usada para rastrear nosso universo de empresas e suas informações.
.mavg () é um método incorporado em Quantopian, e "data [context. security]" é nós referenciando a chave por este nome no nosso dicionário de contexto.
Poderíamos chamar esses context. MA1 e context. MA2 se quisermos armazená-los no nosso dicionário de contexto e usá-lo fora do nosso método handle_data, mas não precisamos acessar esses dados fora daqui, então nós apenas os faremos variáveis locais.
Agora que temos as médias móveis calculadas, estamos prontos para obter mais lógica. Para negociar, precisamos ter lógica como se os MAs se cruzassem, mas também, antes que possamos fazer um comércio, precisamos ver se temos dinheiro suficiente para fazer uma compra, precisamos saber o preço do segurança, e devemos verificar se já temos essa posição. Para fazer isso, adicionamos o seguinte ao nosso método handle_data:
Nós pegamos o preço atual referenciando dados, que é nossa maneira de rastrear nosso universo de empresas (atualmente apenas o S & P 500 ETF $ SPY). Em seguida, verificamos para ver as posições atuais que temos ao fazer referência ao nosso contexto. Portfólio. Aqui, podemos fazer referência a todos os tipos de coisas em relação ao nosso portfólio, mas, agora mesmo, queremos verificar nossas posições. Isso retorna um dicionário de todas as suas posições, o valor, quanto foi preenchido e assim por diante. Então, estamos interessados em uma posição específica em uma empresa, então fazemos context. portfolio. positions [symbol ('SPY')]. A partir daqui, nossa única preocupação agora é apenas ver se temos algum investimento, então o atributo que mais nos interessa é a quantidade de posições que temos, então usamos. amount no final.
Até agora, criamos as informações necessárias para que possamos saber antes de realmente usar alguma lógica para executar negócios, mas não escrevemos nada para realmente fazer a negociação. É o que vamos cobrir no próximo tutorial.
PracticalQuant.
Comentários recentes.
Categorias.
Nas últimas duas décadas, os avanços na computação e a popularidade das bibliotecas analíticas de software livre (por exemplo, para R e Python) capacitaram qualquer pessoa com um laptop moderno com a capacidade de executar uma análise de dados bastante sofisticada. Isso afetou muitos campos diferentes, mas particularmente o campo de finanças e investimentos.
Meu objetivo é demonstrar a facilidade com que qualquer pessoa com conhecimento de programação e algumas finanças básicas pode desenvolver e executar um backtest de negociação quantitativo completo. Um backtest, para nossos propósitos, é o processo pelo qual aplicamos uma estratégia sistemática contra dados históricos, a fim de quantificar os retornos e os riscos associados à estratégia. Até o final deste artigo, você poderá replicar a maioria, senão toda a análise abaixo. Todo o código (e algumas das entradas) para a estratégia é hospedado no Github.
1. Formulando uma Hipótese de Negociação.
3. Seleção de Carteira e Reequilíbrio.
4. Backtesting com retornos históricos.
5. Quantificação do Alfa: o CAPM e os modelos Fama-French.
6. Concentrações Setoriais.
Formulando uma hipótese de negociação.
Os analistas geralmente começam com alguma hipótese de como os preços dos ativos se comportam com base em vários fatores. Isso pode vir da intuição, da experiência ou pode basear-se em alguns testes empíricos. Para ações, esses fatores podem incluir métricas baseadas em rentabilidade, valor, accruals ou momentum.
A hipótese que vou testar é tirada de "Estratégias quantitativas para alcançar Alpha & # 8220 ;, por Richard Tortoriello". Existem muitos fatores e combinações ideais discutidos no livro, mas eu escolhi um mix de avaliação de rentabilidade para este backtest em particular. As estratégias comerciais também são um dos principais tópicos da pesquisa acadêmica, com muitos papéis no corpus acadêmico para escolher.
A estratégia, que chamaremos PROVA-1, utilizará dois fatores: (1) ROIC (retorno do capital investido), que serve como proxy para rentabilidade, e (2) EV / EBITDA (valor / lucro da empresa antes da amortização de juros). Este é o valor total da empresa em uma medida de renda operacional e # 8211; quanto menor for a proporção, mais de uma negociação & # 8201; a empresa é. Ao selecionar uma mistura de ROIC alto e baixo EV / EBITDA, a estratégia busca investir em empresas que geram altos retornos, mas para as quais o investidor não será obrigado a pagar tanto quanto. Parece lógico?
Dados da estratégia.
Existem dois conjuntos de dados primários usados pela estratégia no núcleo do backtest para PROVA-1. O primeiro é os dados anuais sobre os fundamentos (que incluem todas as métricas contábeis informadas pelas empresas de capital aberto em seus relatórios de 10 mil), que tinham cerca de 39 MB de tamanho. O segundo conjunto de dados principal é o retorno mensal de dados para todas as empresas de capital aberto, com cerca de 159MB de tamanho. Eu escolhi usar cerca de 36 anos de dados, voltando para 1980.
Existem alguns conjuntos de dados disponíveis no Quandl, a maioria dos quais permite que você se inscreva para uma versão de avaliação gratuita. Eu escolhi usar dados CRSP / Compustat, que está disponível no Wharton Research Data Services & # 8211; isso também requer uma assinatura. Devido aos direitos autorais, não posso publicar esses arquivos, mas publicarei as instruções de download nos arquivos ReadMe no Github, assumindo que você tenha uma assinatura. No futuro, vou escrever outro artigo usando dados Quandl ou outro recurso mais acessível.
Seleção de Portfólio e Reequilíbrio.
A estratégia PROVA-1 assume um reequilíbrio anual da carteira com base nas duas métricas. Também assume que assumimos uma posição igual em todas as ações selecionadas para esse ano, independentemente do tamanho da empresa. Em uma situação de investimento real, você pode ajustar a alocação de investimentos para ou para longe de ações de ações grandes ou pequenas, dependendo da sua tolerância ao risco. Todos esses fatores podem ser codificados nas regras de alocação de portfólio.
Para cada ano de investimento (que é o ano seguinte ao ano fiscal dos números 10K reportados), fazemos o seguinte:
Classifique todos os estoques para o ano pelo ROIC, dividindo os estoques em quintis (ou seja, 5 segmentos iguais) Pegue o quintil superior (ou seja, quintil nº 5) para a medida ROIC e descarte os outros quatro. Isso seleciona os estoques mais lucrativos para aquele ano Classifique esse quintil por EV / EBITDA e divida os estoques em quintis por esse fator. Pegue o quintil inferior (ou seja, o quintil nº 1) para EV / EBITDA, descarte os outros quatro. Isso seleciona o EV mais baixo por lucro operacional, que são os mais acessíveis & # 8217; das ações. As ações remanescentes são nossa seleção de investimentos.
Aqui é um pouco da saída do loop de reequilíbrio da estratégia (abaixo). O processo de seleção reduziu o universo dos estoques de 3000 para baixo para cerca de 125. Se decidimos utilizar deciles, restringiria o campo para cerca de 30..40 ações por ano.
Como o nome do artigo sugere (e se você viu o código no Github), a estratégia é escrita em Python. Eu uso a biblioteca de pandas bastante extensivamente para ler / manipular / consultar / mesclar conjuntos de dados, bem como para realizar agregações. Eu também importai os modelos statsmodels e bibliotecas numpy também.
Backtesting com retornos históricos.
Agora, nossas decisões anuais de investimento retornam 35+ anos. Para quantificar os retornos, as alocações de portfólio são mescladas com o conjunto de dados de retorno mensal por ano. Isso nos dá os retornos mensais de cada estoque no portfólio. Além disso, agregamos isso, calculando a média dos retornos de cada estoque para criar os retornos mensais globais do portfólio. Para essa estratégia, podemos calcular a média dos retornos das ações por mês, porque assumimos uma alocação de investimento igual em cada ação. A biblioteca de pandas foi extremamente útil com a funcionalidade de mesclagem e agregação.
Abaixo estão os gráficos dos retornos anuais com os retornos anuais do índice S & P 500, e além do índice S & P 500. Nos últimos anos, a estratégia tem um desempenho inferior ao índice, mas se você tivesse executado essa estratégia por algumas décadas, estaria indo muito bem.
Em um portfólio da vida real, os gerentes de investimento podem implementar telas adicionais para excluir ações ou setores particularmente arriscados, bem como empresas de micro capitalização que possam apresentar problemas de liquidez. As medidas de gerenciamento de risco de senso comum prejudicariam definitivamente os retornos globais por uma boa razão. Muitas empresas de investimento quantitativas também utilizam rastreios e verificações fundamentais para afastar o portfólio ou para investimentos que os dados por si só podem não ser capazes de capturar.
Quantificando Alpha: os modelos CAPM e Fama-French.
Comparar retornos e desempenho com o índice S & P 500 (ou qualquer outro índice de mercado de escolha) é uma prática bastante comum na indústria & # 8211; Ele assumiu que um gerente de portfólio adicionou valor se (s) ele superasse o benchmark escolhido. Mas é um gestor de carteira ativo que está marginalmente superando algum índice realmente adicionando qualquer alfa adicional? Ou eles simplesmente assumem mais riscos acima e além do mercado? As melhores carteiras conseguem retornos superiores para uma determinada unidade de risco.
Uma maneira de quantificar o perfil de risco da estratégia é quantificar o perfil de risco sistemático e idiossincrático derivando o beta e o alfa subsequente do histórico de backtest. O risco sistemático é o risco que se obtém investindo no mercado ou uma carteira diversificada. Como investidor, você está interessado no & # 8220; alfa & # 8221 ;, que é o retorno adicional que essa estratégia lhe oferece. Se você obtiver alpha muito baixo ou até alpha negativo, é melhor investir em um índice de mercado amplo.
Para derivar as betas, executo uma regressão linear nos retornos históricos históricos da carteira em relação aos principais fatores do mercado. Para o CAPM, o regressor é o retorno do mercado além da taxa livre de risco. Para o modelo Fama-French 3-factor, os regressores são o retorno do mercado e dois fatores adicionais chamados de & # 8220; SMB & # 8221; e & # 8220; HML & # 8221; (mais sobre isso abaixo). Eu uso o pacote statsmodels em Python para executar regressões OLS nos fatores de entrada (os resultados estão abaixo).
A regressão do CAPM nos dá um beta de mercado de 1.038, que está praticamente alinhado com o mercado. O beta é um proxy para a correlação do portfólio (ou ativo) com esse fator de risco sistemático. Também ficamos com um alfa mensal de 0,0097, o que anualizado revela-se aproximadamente 0.1164, ou 12%. Então, o que é alfa? Alpha é o retorno adicional que esta estratégia nos dá acima e além dos retornos sistemáticos de investir no mercado. 12% de retornos adicionais anualmente não são ruins! Vá PROVA-1!
O modelo Fama-French 3, como o CAPM, utiliza um fator de retorno de mercado, mas também adiciona SMB e HML como fatores sistemáticos adicionais. O SMB, ou pequeno-menos-alto, mede o retorno adicional que os investidores historicamente receberam de empresas com menor limite de mercado. Um beta. SMB de 0,7881 abaixo indica que o portfólio é direcionado para empresas de maior porte. HML, ou alto-menos-baixo, mede o retorno que os investidores historicamente receberam de empresas em crescimento (contra empresas de valor). Uma vez que selecionamos explicitamente para empresas de valor nessa estratégia (menor EV / EBITDA), isso explica por que nosso beta. HML é 0,412. O alfa mensal é 0,0079, que anualizado acaba sendo 0,0948, ou 9,48%. Então, nós caímos.
250 bps (2,5%) do alfa anualizado do CAPM, o que faz sentido, uma vez que adicionamos fatores explicativos adicionais.
Um excelente papel acadêmico (traduzido: curto e fácil de ler) que descreve o modelo CAPM e FF-3, bem como o risco sistemático é o "Entendimento do Risco e Retorno", o CAPM e o Fama-French Three-Factor Model & # 8221; por Kent Womack e Ying Zhang.
Nota: todos os fatores foram baixados da Kenneth French Data Library (esta é gratuita e atualizada mensalmente). O arquivo que eu usei para este backtest também está no diretório de entrada no repositório github da estratégia # 8217 ;.
Concentrações do setor.
Uma coisa a ter em conta é se as métricas específicas tendem a ser mais abrangentes em certos setores ou indústrias. Por exemplo, o uso de acréscimos elevados ou capital de giro como fator em uma estratégia de negociação pode apenas concentrar as alocações de carteiras da estratégia em indústrias que operam em altas provisões e capital de giro por qualquer motivo. Qualquer estratégia precisa ter uma boa combinação diversificada de setores, ou pode ser exposta a riscos específicos para um determinado setor. Os dados completos de cada ano estão nos resultados completos (abaixo), mas podemos analisar as concentrações do setor para 2014 e 2015. Observamos um aumento no estoque de energia em 2015, que sabemos ter tido um desempenho inferior no segundo semestre de 2015 e em 2016. Essa observação também parece consistente com os retornos negativos dessa estratégia em 2015 e o desempenho inferior em relação ao índice S & P 500.
Veredicto: Inverter ou não investir?
Então, nós fizemos o nosso backtest sistemático sobre PROVA-1, retornos quantificados e risco da estratégia, e examinamos as concentrações do setor. Também teríamos analisado as concentrações em outras métricas (ou seja, a distribuição do limite de mercado) para definir uma lente mais clara no perfil de risco. Adicionalmente, seria útil ter uma noção de como as concentrações e o risco evoluíram ao longo do tempo, particularmente durante recessões ou períodos de retornos negativos.
Como você provavelmente já determinou, essa não é uma estratégia de negociação de alta frequência, ou mesmo uma baseada em movimentos de mercado durante o dia. O backtest subjacente a esta estratégia é para investidores com um horizonte temporal mais longo (ou seja, um ano ou mais), reequilibrando uma vez por ano. Ele estreita o campo em um mercado onde temos milhares de investimentos para escolher.
Outro fator prático a considerar é o número de títulos nesta carteira anualmente. Mais de 120 ações têm muito a oferecer em um portfólio pessoal, e você pode querer considerar parâmetros mais restritos para restringir o campo (por exemplo, considerar um fator adicional ou utilizar decodificação em vez de quintil, por exemplo).
Espero que isso seja o suficiente para você começar!
Compartilhar isso:
Pós-navegação.
3 pensamentos sobre & ldquo; PROVA-1: uma estratégia de negociação quantitativa simples Backtest em Python & rdquo;
Esta é uma informação incrível! Eu gosto da maneira como você quebra o Fama-French, facilita a compreensão de um não-quant como eu.
Obrigado! Fico feliz em saber que foi útil.
Muito bom escrever, muitos dos quantos exemplos / foco que encontrei são de negociação intradiária / de alta freqüência. O seu era exatamente o que eu estava procurando.
LearnDataSci.
Início »Python for Finance, Parte 3: uma estratégia de negociação média móvel.
Python for Finance, Parte 3: Uma estratégia de negociação média móvel.
Python for Finance, Parte 3: estratégia de negociação média em movimento.
No artigo anterior desta série, continuamos a discutir conceitos gerais que são fundamentais para o design e backtesting de qualquer estratégia de negociação quantitativa. Em detalhe, discutimos sobre isso.
retornos relativos e de log, suas propriedades, diferenças e como usar cada um, uma representação genérica de uma estratégia de negociação usando os pesos de ativos normalizados $ w_i \ left (t \ right) $ para um conjunto de $ N $
ativos negociáveis e uma estratégia muito simples, porém rentável, a maneira de representá-la e como calcular seu retorno total.
Se você encontrou este artigo, consulte a Parte 1 e a Parte 2.
Neste artigo, começaremos a projetar uma estratégia de negociação mais complexa, que terá pesos não constantes $ w_i \ left (t \ right) $, e assim se adapte de algum modo ao comportamento recente do preço de nossos ativos.
Voltaremos a supor que temos um universo de apenas 3 ativos negociáveis, os estoques da Apple e da Microsoft (com tickers AAPL e MSFT, respectivamente) e o índice S & P 500 (ticker ^ GSPC).
Como um lembrete, o dataframe contendo os três & # 8220; limpos & # 8221; preço timeeries tem o seguinte formato:
Considerações médias móveis.
Uma das estratégias de negociação mais antigas e mais simples que existe é aquela que usa uma média móvel das séries de tempo de preço (ou retornos) para representar a tendência recente do preço.
A ideia é bem simples, mas poderosa; se usarmos uma média móvel (digamos) de 100 dias de nossa série de preços, então uma parcela significativa do ruído do preço diário terá sido # 8220; em média, e # 8221 ;. Assim, podemos observar mais de perto o comportamento a longo prazo do bem.
Deixe-nos, novamente, calcular as médias móveis móveis simples (SMA) destas três vezes, da seguinte forma. Lembre-se, novamente, que ao calcular os $ S $ SMA, os primeiros $ M-1 $ não são válidos, pois os preços de $ M $ são necessários para o primeiro ponto de dados de média móvel.
Deixe-nos traçar os últimos $ 2 $ anos para estes três timeseries para o estoque da Microsoft, para ter uma idéia sobre como estes se comportam.
É direto observar que os timeseries SMA são muito menos barulhentos que os timeseries de preços originais. No entanto, isso ocorre com um custo: os timeseries da SMA atrasam os timeseries de preços originais, o que significa que as mudanças na tendência só são vistas com um atraso (atraso) de $ L $ dias.
Quanto é o atraso $ L $? Para uma média móvel SMA calculada com $ M $ dias, o atraso é aproximadamente $ \ frac $ days. Assim, se estamos usando SMA de US $ 100 por US $, isso significa que podemos chegar atrasado em quase US $ 50 $ por dia, o que pode afetar significativamente nossa estratégia.
Uma maneira de reduzir o atraso induzido pelo uso do SMA é usar a chamada Média Mover Exponencial (EMA), definida como.
& amp; \ text \ left (t \ right) & amp; = \ left (1- \ alpha \ right) \ text \ left (t-1 \ right) + \ alpha \ p \ left (t \ right) \ & amp; \ text \ left (t_0 \ right) & amp; = p \ left (t_0 \ right)
onde $ p \ left (t \ right) $ é o preço no momento $ t $ e $ \ alpha $ é chamado de parâmetro de decaimento para o EMA. $ \ alpha $ está relacionado ao lag como $$ \ alpha = \ frac $$ e ao comprimento da janela (span) $ M $ como $$ \ alpha = \ frac $$.
A razão pela qual o EMA reduz o atraso é que ele coloca mais peso em observações mais recentes, enquanto o SMA avalia todas as observações igualmente por $ \ frac $. Usando Pandas, calcular a média móvel exponencial é fácil. Precisamos fornecer um valor de atraso, a partir do qual o parâmetro de decaimento $ \ alpha $ é calculado automaticamente. Para poder comparar com o SMA de curto prazo, usaremos um valor de span de $ 20 $.
Uma estratégia de negociação média móvel.
Vamos tentar usar as médias móveis calculadas acima para projetar uma estratégia de negociação. Nossa primeira tentativa será relativamente difícil e vai aproveitar o fato de que uma média média em movimento (seja SMA ou EMA) está atrasada ao comportamento dos preços reais.
Tendo isso em mente, é natural supor que, quando ocorre uma mudança no comportamento de longo prazo do ativo, as séries de tempo reais de preço reagirão mais rapidamente do que o da EMA. Portanto, consideraremos o cruzamento dos dois como sinais comerciais potenciais.
Quando os preços de preços $ p \ left (t \ right) $ atravessam as temporadas EMA $ e \ left (t \ right) $ abaixo, fecharemos qualquer posição curta existente e iremos long (buy) uma unidade do recurso.
Quando os preços de preços $ p \ left (t \ right) $ atravessam as temporadas EMA $ e \ left (t \ right) $ a partir do acima, fecharemos qualquer posição longa existente e ficarão curtos (vender) uma unidade do ativo.
Como isso é traduzido para o framework descrito em nosso artigo anterior sobre os pesos $ w \ left (t \ right) $?
Bem, para esta estratégia, é muito difícil. Tudo o que precisamos é ter uma posição longa, ou seja, $ w_i \ left (t \ right) $ & gt; 0, desde que os timeseries de preços estejam acima dos timeseries EMA e uma posição curta, ou seja, $ w_i \ left (t \ right ) $ & lt; 0, desde que o preço timeseries esteja abaixo do timeseries da EMA.
Uma vez que, neste momento, ainda não estamos interessados no dimensionamento de posição, assumiremos que usamos todos os nossos fundos disponíveis para negociar o recurso $ i $. Também vamos supor que nossos fundos sejam divididos igualmente entre todos os ativos de US $ 3 (MSFT, AAPL e GSPC).
Com base nessas suposições, nossa estratégia para cada um dos ativos $ i, i = 1, \ ldots, 3 $ pode ser traduzida da seguinte maneira:
Go long condition: If $ p_i \ left (t \ right) & gt; e_i \ left (t \ right) $, então $ w_i \ left (t \ right) = \ frac $ Ir condição curta: se $ p_i \ left (t \ right) & lt; e_i \ left (t \ right) $, depois $ w_i \ left (t \ right) = - \ frac $
Sempre que as condições de comércio são satisfeitas, os pesos são $ \ frac $ porque $ \ frac $ do total de fundos são atribuídos a cada ativo e sempre que somos longos ou curtos, todos os fundos disponíveis são investidos.
Como isso é implementado no Python? O truque é levar o sinal da diferença entre o preço $ p_i \ left (t \ right) $ e EMA $ e_i \ left (t \ right) $.
Uma advertência final.
Antes de ver o desempenho desta estratégia, vamos nos concentrar no primeiro dia $ t_o $ quando os preços de preços $ p \ left (t_o \ right) $ cruzam acima e EMA timeseries $ e_i \ left (t_o \ right) $. Uma vez que $ p \ left (t_o \ right) & gt; e_i \ left (t_o \ right) $. Nesse ponto, o peso da negociação $ w_i \ left (t_o \ right) $ torna-se positivo e, assim, de acordo com nossa estratégia de negociação, precisamos definir para esse dia $ w_i \ left (t_o \ right) = \ frac $.
Entretanto, tenha em mente que $ p \ left (t_o \ right) $ é o preço do ativo no fechamento do dia $ t_o $. Por esse motivo, não saberemos que $ p \ left (t_o \ right) & gt; e_i \ left (t_o \ right) $ até o encerramento do dia de negociação. Portanto, ao calcular os retornos da estratégia, assumir que no dia $ t_o $ nós tivemos uma posição longa é um erro; É equivalente a nós peaking no futuro, uma vez que só sabemos que temos que ir muito no final do dia $ t_o $.
O melhor que podemos fazer é assumir que trocamos no final deste dia $ t_o $. Portanto, nossa posição será longa no dia seguinte, $ t_o + 1 $. Isso é facilmente corrigido por atraso em nossas posições de negociação por um dia, de modo que no dia $ t_o $ nossa posição atual é a do dia anterior $ t_o & # 8211; 1 $ e apenas no dia $ t_o + 1 $, temos uma posição longa. Portanto:
Vamos examinar como são as séries temporais e a respectiva posição de negociação para um de nossos ativos, a Microsoft.
Agora que a posição que nossa estratégia determina cada dia foi calculada, o desempenho desta estratégia pode ser facilmente estimado. Para esse fim, precisaremos novamente dos retornos de log dos três ativos $ r_i \ left (t \ right) $. Estes são calculados como:
Observe que nossa estratégia comercializa cada ativo separadamente e é agnóstica de qual é o comportamento dos outros ativos. Se nós vamos ser longos ou curtos (e quanto) na MSFT não são afetados pelos outros dois recursos. Com isso em mente, os log-return diários da estratégia para cada recurso $ i $, $ r_ ^ s \ left (t \ right) $ são calculados como.
r_ ^ s \ left (t \ right) = w_i \ left (t \ right) r_i \ left (t \ right)
onde $ w_i \ left (t \ right) $ é a posição da estratégia no dia $ t $ que já foi alcançado no final do dia de negociação $ t-1 $.
O que isto significa?
Suponha que $ p \ left (t \ right) $ cruza acima de $ e_i \ left (t \ right) $ algum dia durante a sessão de negociação na segunda-feira, dia $ t-1 $. Assumimos que ao fechar na segunda-feira nós compramos unidades suficientes de ativo $ i $ para gastar $ \ frac $ de nosso total de fundos, que é $ \ $ \ frac $ e que o preço que compramos é $ p \ left (t -1 \ right) = \ $ 10 $. Vamos também assumir que na terça-feira, dia $ t $, o preço fecha em $ p \ left (t \ right) = \ $ 10.5 $. Então, nosso retorno de log para o recurso $ i $ na terça-feira, é simplesmente.
O retorno real $ r_, i> ^ s \ left (t \ right) $ é.
r_, i> ^ s \ left (t \ right) = w_i \ left (t \ right) \ times \ left [\ exp \ left (r_i \ left (t \ right) \ right) & # 8211; 1 \ right] = \ frac.
Em termos de dólares, na terça-feira, dia $ t $, fizemos $ N \ times r_, i> ^ s \ left (t \ right) = \ $ \ frac $.
Para obter todos os retornos de log da estratégia para todos os dias, basta simplesmente multiplicar as posições da estratégia pelos retornos do log de ativos.
Lembrando que os retornos de log podem ser adicionados para mostrar o desempenho ao longo do tempo, deixe-nos traçar os retornos de registro cumulativos e os retornos relativos totais acumulados de nossa estratégia para cada um dos ativos.
Qual é o retorno total da estratégia?
Estritamente falando, podemos adicionar apenas retornos relativos para calcular os retornos da estratégia. Portanto $$ r_> ^ s \ left (t \ right) = \ sum_ ^ r_, i> ^ s \ left (t \ right) $$.
Vimos no artigo anterior, no entanto, que para valores pequenos dos retornos relativos, a seguinte aproximação contém $$ r_i \ left (t \ right) \ simeq r_, i> \ left (t \ right) $$
Assim, uma maneira alternativa é simplesmente adicionar todos os retornos de log da estratégia primeiro e depois convertê-los em retornos relativos. Vamos examinar o quão boa é essa aproximação.
Como podemos ver, por intervalos de tempo relativamente pequenos e, quanto tempo, a suposição de que os retornos relativos são suficientemente pequenos, o cálculo da estratégia total retorna usando a aproximação log-retorno pode ser satisfatório. No entanto, quando a suposição de pequena escala se quebra, a aproximação é fraca. Portanto, o que precisamos lembrar o seguinte:
Os retornos de log podem e devem ser adicionados ao longo do tempo para um único ativo calcular as séries de tempo de retorno cumulativas ao longo do tempo. No entanto, ao somar (ou em média) log-returns em todos os ativos, deve-se ter cuidado. Retornos relativos podem ser adicionados, mas log-returns somente se pudermos assumir com segurança que eles são uma aproximação suficiente dos retornos relativos.
O desempenho global, anual, da nossa estratégia pode ser calculado novamente como:
Pode-se observar que esta estratégia significativamente inferior à estratégia de compra e retenção que foi apresentada no artigo anterior. Vamos compará-los novamente:
Qual estratégia é melhor?
Esta não é uma pergunta simples para alguém responder neste momento. Quando precisamos escolher entre duas ou mais estratégias, precisamos definir uma métrica (ou métricas) com base nas quais as comparar. Este tópico muito importante será abordado no próximo artigo.
Além disso, observamos neste último gráfico que o desempenho das duas estratégias não é constante ao longo do tempo. Há alguns períodos em que um supera o outro e outros períodos quando não é. Então, uma segunda pergunta que naturalmente surge é como mitiguamos o risco de ser & # 8220; enganado & # 8221; por um bom desempenho de backtest em um determinado período.
Georgios Efstathopoulos.
A Georgios tem mais de 7 anos de experiência como analista quantitativo no setor financeiro e tem trabalhado extensivamente em modelos estatísticos e de aprendizagem por máquina para negociação quantitativa, gerenciamento de risco de mercado e de crédito e modelagem comportamental. Georgios possui doutorado em Matemática Aplicada e Estatística no Imperial College de Londres, e é fundador e CEO da QuAnalytics Limited, uma consultoria focada em soluções quantitativas e de análise de dados para indivíduos e organizações que desejam colher o potencial de seus próprios dados para aumentar seus negócios .
Recomendado.
Python for Finance, Parte I: Yahoo Finance API, pandas e matplotlib.
Em detalhes, no primeiro de nossos tutoriais, vamos mostrar como se pode usar facilmente o Python para baixar dados financeiros de bancos de dados on-line gratuitos, manipular os dados baixados e, em seguida, criar alguns indicadores técnicos básicos que serão usados como base de nossa estratégia quantitativa.
Python for Finance, Parte 2: Introdução às Estratégias Quantitativas de Negociação.
Com base nesses resultados, nosso objetivo final será projetar uma estratégia de negociação simples e realista. No entanto, primeiro precisamos passar por alguns dos conceitos básicos relacionados a estratégias de negociação quantitativa, bem como as ferramentas e técnicas no processo.
Melhores Cursos Online de Ciência de Dados em 2017.
A seguir, uma lista extensa de cursos e recursos de Ciência de Dados, de plataformas como Coursera, edX e Udacity, que fornecem as habilidades necessárias para se tornar um cientista de dados.
Ei, eu preciso de ajuda # 8211; quando eu passo pelos tutoriais, o script pára de funcionar no segundo tutorial. Especificamente, quando eu tento a primeira coisa (depois de conectar tudo do primeiro tutorial)
Eu recebo: FileNotFoundError: [Errno 2] Nenhum tal arquivo ou diretório: & # 8216; ./data. pkl & # 8217;
Como posso consertar isso?
Além disso, no primeiro tutorial, não há como # 8220;.ix & # 8221; então eu mudo para & # 8220;.loc & # 8221; b / c Eu recebo este erro:
DeprecationWarning:.ix está obsoleto. Por favor, use.
.loc para indexação baseada em etiquetas ou.
.iloc para indexação de posicionamento.
Eu sei que isso acabou sendo respondido no tópico do Reddit, mas eu vou re-responder aqui caso alguém tenha um problema semelhante.
O FileNotFoundError foi causado porque o arquivo data. pkl não estava presente no local GitHub repo. Este foi o arquivo que contém os dados de amostra para este exercício. Isso já foi remediado.
O DeprecationWarning é nada de que se preocupar, é causado por uma atualização no pacote Pandas.
Copyright © 2017 LearnDataSci. Todos os direitos reservados.
QuantStart.
Junte-se ao portal de membros privados da Quantcademy que atende à comunidade de comerciantes de varejo de varejo em rápido crescimento. Você encontrará um grupo de comerciantes quânticos bem informados e com a mesma mentalidade, prontos para responder às suas perguntas mais prementes sobre negociação de quant.
Confira meu ebook sobre o comércio de quant, onde eu ensino você como criar estratégias de negociação sistemáticas lucrativas com ferramentas Python, desde o início.
Dê uma olhada no meu novo ebook sobre estratégias de negociação avançadas usando análise de séries temporais, aprendizado de máquina e estatísticas bayesianas, com Python e R.
Por Michael Halls-Moore em 21 de janeiro de 2014.
No artigo anterior sobre Ambientes de Análise de Análise de Pesquisa Em Python Com Pandas, criamos um ambiente de backtesting baseado em pesquisa orientado a objetos e testávamos isso em uma estratégia de previsão aleatória. Neste artigo, faremos uso da maquinaria que introduzimos para realizar pesquisas sobre uma estratégia real, ou seja, o Crossover de média móvel na AAPL.
Estratégia de Crossover Média em Movimento.
A técnica de Crossover de média móvel é uma estratégia de impulso simplista extremamente conhecida. Muitas vezes, é considerado o exemplo do "Olá Mundo" para negociação quantitativa.
A estratégia descrita aqui é longa apenas. São criados dois filtros de média móvel simples separados, com diferentes períodos de lookback, de uma série temporal específica. Os sinais para comprar o recurso ocorrem quando a média móvel de lookback mais curta excede a média móvel de lookback mais longa. Se a média mais longa exceder a média mais curta, o ativo é vendido de volta. A estratégia funciona bem quando uma série temporal entra em um período de forte tendência e, em seguida, inverte lentamente a tendência.
Para este exemplo, escolhi a Apple, Inc. (AAPL) como a série temporal, com uma pequena retrospectiva de 100 dias e uma longa retrospectiva de 400 dias. Este é o exemplo fornecido pela biblioteca de negociação algorítmica de tirolesa. Assim, se quisermos implementar o nosso próprio backtester, precisamos garantir que ele coincida com os resultados na linha aérea, como um meio básico de validação.
Implementação.
Certifique-se de seguir o tutorial anterior aqui, que descreve como a hierarquia de objeto inicial para o backtester é construída, caso contrário, o código abaixo não funcionará. Para esta implementação particular usei as seguintes bibliotecas:
A implementação do ma_cross. py requer backtest. py do tutorial anterior. O primeiro passo é importar os módulos e objetos necessários:
Como no tutorial anterior, vamos sub-classificar a classe base abstrata da Estratégia para produzir MovingAverageCrossStrategy, que contém todos os detalhes sobre como gerar os sinais quando as médias móveis da AAPL se cruzam.
O objeto requer um short_window e um long_window sobre o qual operar. Os valores foram configurados para padrões de 100 dias e 400 dias, respectivamente, que são os mesmos parâmetros utilizados no exemplo principal de tirolesa.
As médias móveis são criadas usando a função pandas rolling_mean nas barras ['Fechar'] preço de fechamento do estoque da AAPL. Uma vez que as médias móveis individuais foram construídas, a série do sinal é gerada definindo a coluna igual a 1,0 quando a média móvel curta é maior do que a média móvel longa, ou 0,0 caso contrário. A partir disso, as ordens de posições podem ser geradas para representar sinais comerciais.
O MarketOnClosePortfolio é subclassado do Portfolio, que é encontrado em backtest. py. É quase idêntico à implementação descrita no tutorial anterior, com a exceção de que os negócios são agora realizados em uma base Close-to-Close, em vez de Open-to-Open. Para obter detalhes sobre como o objeto Portfolio está definido, consulte o tutorial anterior. Eu deixei o código em completo e mantenho esse tutorial autônomo:
Agora que as classes MovingAverageCrossStrategy e MarketOnClosePortfolio foram definidas, uma função __main__ será chamada para amarrar toda a funcionalidade em conjunto. Além disso, o desempenho da estratégia será examinado através de um gráfico da curva de equidade.
O objeto DataReader de pandas transfere os preços de ações da AAPL da OHLCV para o período de 1º de janeiro de 1990 a 1º de janeiro de 2002, momento em que os sinais DataFrame são criados para gerar os sinais de longo tempo. Posteriormente, o portfólio é gerado com uma base de capital inicial de 100.000 USD e os retornos são calculados na curva de patrimônio.
O passo final é usar matplotlib para plotar um gráfico de dois dígitos de ambos os preços da AAPL, superado com as médias móveis e os sinais de compra / venda, bem como a curva de equidade com os mesmos sinais de compra / venda. O código de plotagem é tomado (e modificado) do exemplo de implementação de tirolesa.
A saída gráfica do código é a seguinte. Eu usei o comando IPython% paste para colocar isso diretamente no console do IPython enquanto no Ubuntu, para que a saída gráfica permanecesse visível. Os roseticks cor-de-rosa representam a compra do estoque, enquanto os bastões negros representam a venda de volta:
AAPL Moving Average Crossover Performance de 1990-01-01 a 2002-01-01.
Como pode ser visto, a estratégia perde dinheiro ao longo do período, com cinco comércios de ida e volta. Isso não é surpreendente, dado o comportamento da AAPL durante o período, que estava em uma ligeira tendência descendente, seguido de um aumento significativo em 1998. O período de lookback dos sinais da média móvel é bastante grande e isso impactou o lucro do comércio final , o que de outra forma pode ter tornado a estratégia rentável.
Em artigos subsequentes, criaremos um meio mais sofisticado de análise de desempenho, além de descrever como otimizar os períodos de lookback dos sinais de média móvel individual.
Apenas iniciando o comércio quantitativo?
3 razões para se inscrever para a lista de e-mails QuantStart:
1. Quant Trading Lessons.
Você terá acesso instantâneo a um curso de e-mail gratuito de 10 partes, repleto de sugestões e dicas para ajudá-lo a começar a negociação quantitativa!
2. Todo o conteúdo mais recente.
Todas as semanas, vou enviar-lhe um envoltório de todas as atividades no QuantStart para que você nunca mais perca uma postagem novamente.
Real, dicas de negociação viáveis, sem tonturas.
Estratégia de negociação de migração média móvel Backtest em Python.
Oi tudo, para esta publicação, vou construir um backtest de estratégia de negociação em média móvel simples em Python, usando o S & amp; P500 como o mercado para testar.
Uma estratégia de cross-over média simples é possivelmente um dos exemplos, se não o mais simples, de uma estratégia de negociação baseada em regras usando indicadores técnicos, então pensei que este seria um bom exemplo para aqueles que aprendem Python; tente mantê-lo o mais simples possível e construa a partir daí.
Então, como sempre, ao usar o Python para shenanigans relacionados aos dados finaciais, é hora de importar os nossos módulos necessários:
importar pandas como pd importar numpy como np de dados de importação de pandas_datareader.
Em primeiro lugar, usaremos a funcionalidade pandas-datareader para baixar os dados de preços do primeiro dia de negociação em 2000, até hoje, para a S & P500 da Yahoo Finance, da seguinte forma:
sp500 = data. DataReader ('^ GSPC', 'yahoo', start = '1/1/2000')
Ok, vamos fazer uma verificação rápida para ver em que formato os dados foram baixados.
Coisas boas, então deixe criar um gráfico rápido dos preços de fechamento para ver como o S & amp; P realizou durante o período.
A estratégia de tendência que queremos implementar baseia-se no cruzamento de duas médias móveis simples; os 2 meses (42 dias de negociação) e 1 ano (252 dias de negociação) médias móveis.
Nosso primeiro passo é criar os valores médios móveis e anexá-los simultaneamente a novas colunas no nosso DataFrame sp500 existente.
sp500 ['42d'] = np. round (sp500 ['Close']. rolling (window = 42).mean (), 2) sp500 ['252d'] = np. round (sp500 ['Close']. (janela = 252).mean (), 2)
O código acima cria a série e os adiciona automaticamente ao nosso DataFrame. Podemos ver isso da seguinte forma (eu uso o & # 8216;.tail & # 8217; chame aqui como as médias móveis don & # 8217; t realmente mantêm os valores até o dia 42 e o dia 252, então, simplesmente aparecerá como & # 8216; NaN & # 8217; em uma chamada & # 8216;.head & # 8217;):
E aqui vemos que, de fato, as colunas médias móveis foram corretamente adicionadas.
Agora, vamos avançar e traçar os preços de fechamento e as médias móveis em conjunto no mesmo gráfico.
Nosso conjunto de dados básicos está praticamente completo agora, com tudo o que realmente é preciso fazer é criar uma regra para gerar nossos sinais comerciais.
Teremos 3 estados / regras básicos:
1) Comprar sinal (vá em frente) & # 8211; a média móvel 42d é pela primeira vez que os pontos X acima da tendência 252d.
2) Estacione em Dinheiro & # 8211; sem posição.
3) Sell Signal (vá curto) & # 8211; a média móvel 42d é pela primeira vez pontos X abaixo da tendência 252d.
O primeiro passo na criação desses sinais é adicionar uma nova coluna ao DataFrame, que é apenas a diferença entre as duas médias móveis:
sp500 ['42 -252 '] = sp500 [' 42d '] - sp500 [' 252d ']
O próximo passo é formalizar os sinais adicionando uma coluna adicional que chamaremos Stance. Nós também estabelecemos nosso limiar de sinal & # 8216; X & # 8217; para 50 (isso é um pouco arbitrário e pode ser otimizado em algum momento)
X = 50 sp500 ['Postura'] = np. onde (sp500 ['42 -252 '] & gt; X, 1, 0) sp500 [' Postura '] = np. onde (sp500 ['42 -252'] & lt; ; X, -1, sp500 ['Stance']) sp500 ['Stance']. Value_counts ()
A última linha de código acima produz:
-1 2077 1 1865 0 251 Nome: Stance, dtype: int64.
Mostrando isso durante o período de tempo que optamos por testar, nas datas de negociação de 2077, a média móvel de 42d é mais de 50 pontos abaixo da média móvel de 252d e, em 1865, a média móvel de 42d é mais de 50 pontos acima da média móvel de 252d.
Um enredo rápido mostra uma representação visual desta "Postura & # 8216 ;. Eu configurei o & # 8216; ylim & # 8217; (que são os limites do eixo y) para apenas acima de 1 e logo abaixo de -1, para que possamos ver as partes horizontais da linha.
Tudo está agora no lugar para testar nossa estratégia de investimento com base nos sinais que geramos. Neste caso, assumimos por simplicidade que o índice S & P500 pode ser comprado ou vendido diretamente e que não há custos de transação. Na realidade, precisamos ganhar exposição ao índice através de ETFs, fundos indexados ou futuros no índice # 8230 e, claro, haveria custos de transação a pagar! Esperemos que essa omissão não tenha muito efeito, pois não planejamos estar dentro e fora de negócios e muitas vezes e # 8221 ;.
Portanto, neste modelo, nosso investidor é comprido no mercado, em curto prazo, ou em menor escala. Isso nos permite trabalhar com os retornos do mercado e simplesmente multiplicar o retorno do mercado do dia em -1 se ele é curto, 1 se ele for longo e 0 se ele for plano no dia anterior.
Então, adicionamos mais uma coluna ao DataFrame para manter o retorno diário do índice e, em seguida, multiplique essa coluna pelo & # 8216; Stance & # 8217; coluna para obter retornos de estratégia:
sp500 ['Market Returns'] = np. log (sp500 ['Close'] / sp500 ['Fechar']. shift (1)) sp500 ['Estratégia'] = sp500 ['Market Returns'] * sp500 ['Stance '].shift (1)
Observe como mudamos a série sp [& # 8216; Close & # 8217;] para baixo, de modo que estamos usando o & # 8216; Stance & # 8217; no final do dia anterior para calcular o retorno no dia seguinte.
Agora, podemos traçar os retornos do S & amp; P500 versus os retornos na estratégia de cruzamento média móvel no mesmo gráfico para comparação:
Então, podemos ver que, embora a estratégia pareça ser bastante boa durante as desacelerações do mercado, isso não funciona muito bem durante as manifestações de mercado ou quando é apenas uma tendência ascendente.
Durante o período do teste, ele quase não supera uma estratégia simples de compra e retenção, dificilmente para chamar uma "# 8222; sucesso" estratégia pelo menos.
Mas lá nós temos isso; Uma simples estratégia de transferência de média móvel retrocedeu em Python do início ao fim em apenas algumas linhas de código!
Posts Relacionados.
Estratégia de Negociação de Crossover Médio Mover Backtest em Python & # 8211; V 2.0.
25 Comentários.
Eu estou tendo problemas com esta linha. Por acaso você seria capaz de ajudar?
Coisa certa & # 8230; Com o que você está tendo problemas com exatamente? Se você pudesse fornecer um pouco mais de informações, eu tentarei ajudar o & # 8230;
Você está recebendo uma mensagem de erro? Se você pudesse postar aqui, eu vou dar uma olhada.
Muito obrigado por responder ao meu comentário inicial, agradeço muito e consegui resolver o problema. (100% minha falha) Esses tutoriais são ótimos. MUITO OBRIGADO NOVAMENTE!!
Eu tenho outra pergunta / embora sobre este back-test. Se estivéssemos usando médias móveis mais curtas, seria possível criar os seguintes parâmetros:
(1) Se a média móvel curta cruza acima da média móvel longa, continue por x dias.
(2) se a média móvel curta cruza abaixo da média móvel longa curta por x dias.
(3a) Se houver um cruzamento adicional durante o período de espera, ignore-o.
(3b) Se não houver cruzamentos, mantenha em dinheiro.
Oi Sal, obrigado pelas amáveis palavras e feliz prazer em saber que minhas divagações online são úteis para pelo menos uma ou duas pessoas!
Suas perguntas são boas, e as que tenho certeza de que muitas pessoas terão ao olhar para uma estratégia de negociação sobre cruzamento de mestrado. Tive uma jogada e acredito que encontrei algo que lhe dará o que você deseja. Não é o código mais rápido, e com certeza não é o mais bonito, mas o resultado final segue a lógica do que você pediu. # 8230, então é aqui:
#import módulos relevantes importam pandas como pd import numpy como np de pandas_datareader importam dados de math import sqrt import matplotlib. pyplot como plt% matplotlib inline #download de dados no DataFrame e criam colunas de médias móveis sp500 = data. DataReader ('^ GSPC', 'yahoo', start = '1/1/2014') sp500 ['42d'] = np. round (sp500 ['Fechar']. rolando (janela = 42).mean (), 2) sp500 ['252d' ] = np. round (sp500 ['Fechar']. rolando (janela = 252).mean (), 2) #create coluna com spread de propagação média móvel sp500 ['42 -252 '] = sp500 [' 42d '] - sp500 ['252d'] # define o número desejado de pontos como limite para a diferença de propagação e crie a coluna que contém a estratégia 'Stance' X = 50 sp500 ['Stance'] = np. where (sp500 ['42 -252 '] & gt; X , 1, 0) sp500 ['Stance'] = np. onde (sp500 ['42 -252 '] & lt; - X, -1, sp500 [' Stance ']) sp500 [' Stance ']. Value_counts () # crie colunas que contenham diariamente os retornos do log de mercado e a estratégia diária retorna log sp500 ['Market Returns'] = np. log (sp500 ['Close'] / sp500 ['Close']. shift (1)) sp500 ['Strategy'] = sp500 [ 'Market Returns'] * sp500 ['Stance']. Shift (1) # configure uma nova coluna para manter nossa posição relevante para o período de espera pré-especificado sp500 ['Stance2'] = 0 # definir um período de espera predeterminado, após o qual hora em que retornaremos para aguentar dinheiro e aguardar # para a próxima transferência média média - também ignoraremos quaisquer cruzamentos extras durante esses dias de período de espera = 50 Niterar através do DataFrame e atualizar o & quot; Stance2 & quot; coluna para manter a posição de revelação para i no alcance (X, len (sp500)): teste # logico para verificar 1) um cruzamento sobre curto e longo MA 2) Que estamos atualmente em dinheiro se (sp500 ['Posição'].iloc [i] & gt; sp500 ['Stance']. iloc [i-1]) e (sp500 ['Stance']. iloc [i-1] == 0) e (sp500 ['Stance2']. iloc [i-1] == 0): #popule o DataFrame para a frente no tempo para a quantidade de dias em nosso período de espera para k no intervalo (dias): try: sp500 ['Stance2']. iloc [i + k] = 1 sp500 ['Stance2']. Iloc [i + k + 1] = 0, exceto: passa o teste #logico para verificar 1) um cruzamento curto abaixo de MA 2) Que estamos atualmente em dinheiro se (sp500 ['Posição '].iloc [i] & lt; sp500 [' Stance ']. iloc [i-1]) e (sp500 [' Stance ']. iloc [i-1] == 0) e (sp500 [' Stance2 '].iloc [i-1] == 0): #popule o DataFrame para a frente no tempo para a quantidade de dias em nosso período de espera para k no intervalo (dias): try: sp500 ['Stance2']. iloc [i + k ] = -1 sp500 ['Stance2']. Iloc [i + k + 1] = 0 exceto: pass #Calcular os retornos diários do mercado e os retornos diários da estratégia sp500 ['Market Returns'] = np. log (s p500 ['Fechar'] / sp500 ['Fechar']. shift (1)) sp500 ['Estratégia'] = sp500 ['Market Returns'] * sp500 ['Stance2']. shift (1) #plot strategy returns vs retornos de mercado sp500 [['Market Returns', 'Estratégia']]. cumsum (). plot (grid = True, figsize = (8,5)) plt. show () # estratégia de jogo inicializando a equidade para 1 (ie 100%) e gerar curva de equidade sp500 ['Strategy Equity'] = sp500 ['Estratégia']. Cumsum () + 1 #show gráfico da curva de equidade sp500 ['Estratégia Equity']. Plot (grid = True, figsize = ( 8,5)) plt. show ()
Um par de coisas para estar ciente de:
1) O & # 8220; limiar & # 8221; da distância que a série MA precisa divergir para contar como uma cruzada em & # 8221; foi definido como 50. Isso pode ser alterado e otimizado de acordo com suas próprias preferências. Por exemplo, se você quiser que as linhas MA cruzem JUST para contar como um & # 8220; cruze & # 8221; você pode definir o limite (vairable X) para 1.
2) Eu defini os & # 8220; dias & # 8221; variável para 50 & # 8211; Este é o período de espera, e é claro que você pode mudar isso à vontade também.
Espero que ajude e se você tiver mais perguntas, por favor, pergunte.
Obrigado pela resposta. Estou tendo algum problema para entender este pedaço de código. O código está funcionando, mas eu gostaria de entender melhor. Estou principalmente confundido com o iloc, e k e eu. Eu realmente não entendo o que são ou de onde estão tirando informações. qualquer clareza seria muito apreciada !!
#ertifique através do DataFrame e atualize o & # 8220; Stance2 & # 8221; coluna para manter a posição reveladora.
para i na faixa (X, len (sp500)):
# teste clínico para verificar 1) um cross over short long MA 2) Que estamos atualmente em dinheiro.
#popule o DataFrame para a frente no tempo para a quantidade de dias em nosso período de espera.
para k no intervalo (dias):
# teste clínico para verificar 1) um cruzamento curto abaixo de um longo MA 2) Que estamos atualmente em dinheiro.
#popule o DataFrame para a frente no tempo para a quantidade de dias em nosso período de retenção.
para k no intervalo (dias):
Oi lá, não há problema em todos os gostos de ouvir o código funciona como o pretendido, pelo menos.
Em termos de suas outras perguntas sobre o & # 8220; iloc & # 8221; ek e eu, eu acho que eles podem ser melhor abordados em um post separado do blog centrado em torno dessa seção de código especificamente; seria um pouco difícil explicar tudo corretamente nessas caixas de comentários.
Eu tentarei o meu melhor para encontrar algum tempo neste fim de semana e juntei algo para você, o que, com esperança, tornará um pouco mais claro sobre o que realmente está fazendo, etc.
Posso pedir & # 8211; você e você e & # 8220; algo & # 8221; a mesma pessoa? Eu vejo postagens por vocês mesmos e "# 8220; algo & # 8221; sobre o mesmo assunto.
Oi, estou tendo um problema com a importação de dados do yahoo usando pandas. Por favor, você pode ajudar?
File & # 8220; C: \ Python27 \ lib \ site-packages \ requests \ adaptters. py & # 8221 ;, linha 504, em enviar.
criar ConnectionError (e, request = request)
oo & # 8217 ;, port = 80): tentativas máximas excedidas com url: /table. csv? a=0&ignore=.csv&s=%
5EGSPC & amp; b = 1 & amp; e = 10 & d = 6 & amp; g = d & amp; f = 2017 & c = 2000 (Causado por NewConnectionError (& # 8216 ;: Falha ao estabelecer uma nova conexão.
íon: [Errno 11004] getaddrinfo falhou & # 8217 ;,))
Oi, obrigado pelo comentário e desculpas pelo atraso na resposta, eu tenho viajado essas 2 semanas e # 8211; Infelizmente, a Yahoo Finance API foi descontinuada, eu acredito e, portanto, não funciona mais com o Pandas DataReader. Você poderia usar um provedor como Quandl em vez disso & # 8211; a sintaxe é ligeiramente diferente e os dados se reduzem em um formato ligeiramente diferente, mas com alguns ajustes você pode usá-lo sem problemas. Você precisará instalar o & # 8220; quandl & # 8221; módulo com instalação de pip do & # 8220; & # 8221; e depois inscreva-se para o mesmo. Depois disso, você pode procurar o contrato que você precisa e clicar no & # 8220; Python & # 8221; opção sob o & # 8220; Exportar dados & # 8221; no canto superior direito da página.
Dê uma olhada nisso e, se você precisar de alguma orientação ou esclarecimento extra, informe-me!
Quando eu corri essa linha de código: sp500 [& # 8216; Strategy & # 8217;] = sp500 [& # 8216; Market Returns & # 8217;] * sp500 [& # 8216; Stance & # 8217;]. Shift (1), I obteve este erro: AttributeError: & # 8216; numpy. ndarray & # 8217; objeto não tem atributo & # 8216; shift & # 8217;
Por favor, o que você acha que estou fazendo errado?
Isso é muito estranho, sp500 [& # 8216; Stance & # 8217;] deve ser um & ldquo; pandas. core. series. Series & # 8221; não um numpy. ndarray & # 8221 ;.
Por favor, tente executar o código.
e deixe-me saber qual é o resultado.
Eu finalmente resolvo isso.
Btw, por favor, você tem um código para representar graficamente Lake Ratio & amp; Ganho a relação de dor de uma estratégia como acima?
A relação entre ganho e dor é fácil de se fazer # 8211; Eu tive uma rápida brincadeira e tenho algum código que calcula e cria um gráfico de barras muito simples dos dados de Ganho para Dor. O Rácio Lake é, no entanto, um processo muito mais complicado # 8230; eu teria que pensar e passar algum tempo tentando obter algo juntado.
Para começar, aqui está o código para o ganho de dor & # 8230;
#import módulos relevantes importam pandas como pd import numpy como np de pandas_datareader import dados de math import sqrt import matplotlib. pyplot como plt% matplotlib inline #download de dados no DataFrame e criar médias móveis colunas strategy = data. DataReader ('PG', ' google ', start =' 1/1/2000 ') strategy [' 42d '] = np. round (estratégia [' Close ']. rolling (window = 42).mean (), 2) estratégia [' 252d '] = np. round (estratégia ['Close']. rolling (window = 252).mean (), 2) #criar coluna com estratégia diferencial de spread médio móvel ['42 -252 '] = strategy [' 42d '] - strategy ['252d'] #set o número desejado de pontos como limite para a diferença de spread e criar a coluna que contém a estratégia 'Stance' X = 50 strategy ['Stance'] = np. where (strategy ['42 -252 '] & gt; X, 1, 0) estratégia ['Stance'] = np. where (estratégia ['42 -252 '] & lt; X, -1, estratégia [' Stance ']) estratégia [' Stance ']. Value_counts () #create colunas contendo retornos diários do mercado e estratégia estratégia diária de retorno de logs ['Market Returns'] = np. log (strategy ['Close'] / strate gy ['Close']. shift (1)) estratégia ['Strategy'] = estratégia ['Market Returns'] * estratégia ['Stance']. shift (1) #set estratégia começando a equidade para 1 (ou seja, 100%) e gerar estratégia de equity ['Strategy Equity'] = estratégia ['Strategy']. Cumsum () + 1 #show chart da estratégia de equity curve ['Strategy Equity']. Plot () #Resemple a estratégia em mensal data stratm = pd. DataFrame (estratégia ['Estratégia']. resample ('M'). sum ()) #Adicionar uma coluna de mês para posterior tradução stratm ['Month'] = stratm. index. month #Calculate the sum of retorna sum_returns = estratégia ['Strategy']. sum () #Calcular a soma dos retornos mensais negativos absolutos sum_neg_months = abs (stratm [stratm & lt; 0].sum (). sum ()) #Calcular a proporção de ganho para dor gain_to_pain = sum_returns / sum_neg_months #Crie um DataFrame para reter os dados do Gain to Pain d = gain_to_pain_df = pd. DataFrame. from_dict (d, orient = 'index') #Planar para obter dados do Pain em um gráfico de barras gain_to_pain_df. plot. bar (legend = Falso)
Obrigado. Isso foi realmente útil.
Olá: Por favor, mais um problema, eu estou tentando traçar um gráfico gráfico simples que mostra o período de baixa e alta, usando a média Exponencial Movente e criar um novo regime, etc. Eu apreciarei porque preciso de mais educação sobre isso.
Oi Famson, você pode apenas usar o método Exponential Weighted Average incluído na biblioteca Pandas & # 8230;
Isso explica seu uso.
Então, por exemplo, poderíamos usar o código:
para obter a média ponderada exponencial do Close Ajustado Sp500 usando um & # 8220; Center of Mass & # 8221; de 0,5.
Se você quisesse plotá-lo, basta adicionar & # 8220;.plot () & # 8221; no final da linha acima.
Espero que ajude.
Sim. Mas o que eu realmente estava olhando é MA que usa diferentes cores e linhas de tendência para movimentos descendentes e movimentos ascendentes.
Além disso, também estou olhando o comércio de pares entre esses 2 índices usando um indicador específico.
Muito obrigado por esta série de tutoriais! Quero dizer todos os seus TRABALHOS! Excelente trabalho! Continue por favor.
Trabalho brilhante, de fato! Muito obrigado. Seria bom se você pudesse esclarecer minha dúvida abaixo.
Eu tenho um arquivo csv. 6 colunas no formato abaixo.
Data Estoque 1 Preço Estoque 2 Preço Ações 3 Preço Ações 4 Preço Mercado Index Preço.
Mas o que está aqui é que eu tenho os dados de preço armazenados no csv na área de trabalho. Eu gostaria de utilizar o meu em vez de puxar do Yahoo. E sim, o item é Stock 1 é o indicador. Essa é toda a estratégia do sinal de cruzamento é obtida apenas a partir da segunda coluna de estoque 1 lista de preços. Com base neste sinal, o estoque 2, 3, 4 é comprado com o mesmo peso. Você poderia me avisar gentilmente sobre o código que eu preciso para inserir como um substituto.
Além disso, eu não quero trazer a posição curta.
Apenas a posição longa e segure-a "# 8211; Quando o avg curto muda acima da média móvel longa.
Posição de venda totalmente & # 8211; quando o avg de movimentação curta abaixo da média móvel longa; depois recomprar novamente após 5 dias de negociação.
Eu tenho lutado muito com o código como sou um novato em python. Seria muito gentil com você, se você me ajudar com o código. Obrigado mais uma vez pelo seu fantástico trabalho. Continue.
Desculpas pelo atraso na resposta & # 8211; no que diz respeito ao pedido acima de & # 8211; para ler em um arquivo cvs você pode usar pandas & # 8220; read_csv & # 8221 ;:
Com relação aos outros critérios especificados, posso perguntar o que você conheceu até agora? Se você postar, talvez eu possa ver e sugerir áreas para modificar etc.
Eu responderei por você também por e-mail para ver se posso ajudar.
Oi, há uma pequena mudança no meu problema. Abaixo está o código I & # 8217; m usando. Apenas preso na parte limiar. That is, rebalance portfolio only if it deviates beyong the threshold say 5%. I would like to put this condition before initiating the rebalance so that it doesn’t rebalance every month for even a small deviation. Could you pls guide me. Muito obrigado.
# fetch some data and also if out of these stocks, the recent listed date range is considered.
def __init__(self, weights):
def __call__(self, target):
target. temp[‘weights’] = dict(zip(target. temp[‘selected’], self. target_weights))
return abs(q) * 0.5.
# create the strategy & if you need it to run weekly the rebalancing use Weekly instead of Monthly.
s = bt. Strategy(‘Portfolio1’, [bt. algos. RunMonthly(),
# create a backtest and run it.
test = bt. Backtest(s, data, initial_capital=10000, commissions=my_comm)
# first let’s see an equity curve.
# ok and how does the return distribution look like.
# and just to make sure everything went along as planned, let’s plot the security weights over time.
US Search Mobile Web.
Bem-vindo ao fórum Yahoo Search! Nós adoramos ouvir suas idéias sobre como melhorar a Pesquisa do Yahoo.
O fórum de comentários do produto do Yahoo agora requer uma ID e senha de Yahoo válidas para participar.
Agora você precisa fazer o login usando sua conta de e-mail do Yahoo para nos fornecer feedback e enviar votos e comentários às ideias existentes. Se você não possui uma ID do Yahoo ou a senha para sua ID do Yahoo, inscreva-se para uma nova conta.
Se você tiver uma ID e senha de Yahoo válidas, siga estas etapas, se desejar remover suas postagens, comentários, votos e / ou perfil no fórum de comentários do produto do Yahoo.
Vote em uma ideia existente () ou publique uma nova ideia ...
Ideias quentes Principais ideias Novas ideias Categoria Estado Meus comentários.
Quando busco meu nome, você publica resultados estranhos. As duas imagens que são eu foram removidas de um site que eu encerrei. Remover.
Ao pesquisar meu nome, estranha propaganda de imagens de palhaço vem para o capitão o palhaço em outro estado, REMOVA-O.
e as imagens.
Todas as coisas tentando implicar coisas estranhas.
O Yahoo pode desenvolver a opção para imagens serem vistas como uma apresentação de slides? Isso ajudaria em vez de ter que percorrer cada imagem e tornar esta experiência do Yahoo mais agradável. Obrigado pela sua consideração.
Não vê a sua ideia? Publique uma nova ideia ...
US Search Mobile Web.
Feedback e Base de Conhecimento.
Dê retorno.
Deutschland Finanzen Mobile DF iOS 1 ideia España Finanzas Mobile DF iOS 7 ideias Contas Painel 33 ideias Opinião do anúncio 3 ideias Respostas TH 31 idéias Respostas TH 0 idéias Respostas Fórum UV (versão de teste) 6 ideias Austrália Celebridades 0 ideias Austrália Finanças Mobile Android 0 ideias Austrália Estilo 0 idéias Austrália Yahoo Tech 0 idéias Autos Impulso 2 idéias Aviate 1,505 idéias Canadá Finanças 1,099 ideias Canadá Finanças Mobile Android 0 ideias Canadá Finanças Mobile DF iOS 3 idéias Canadá Finanças Mobile iOS 465 ideias Canadá Página inicial 5,108 idéias Canadá Filmes 14 ideias Notícias do Canadá 872 ideias Canadá com segurança 10 idéias Canadá Tela 128 idéias Canadá Clima 94 ideias Canadá Yahoo Beleza 0 idéias Canadá Yahoo Celebrity 10 ideias Canadá Yahoo Finanças 0 ideias Canadá Yahoo Filmes 10 ideias Canadá Yahoo Notícias 0 idéias Canadá Yahoo Estilo 21 ideias Futebol universitário Pick & # 39; em 112 idéias TV conectada 361 idéias Corp Mail Test 1 1.313 idéias Corp Mail Testing 1.256 idéias Cricket 19 ideias Daily Fantasy 87 ideias Developer Networ k 1 ideia Double Down 86 ideias Fantasy Baseball 431 ideias Fantasy Basketball 395 ideias Fantasy Football 704 ideias Fantasy Hockey 339 ideias Fantasy Live Scoring no Matchup e Classificações 803 ideias Fantasy Sports Aplicações Android 1.366 ideias Fantasy Sports iOS Apps 2.112 ideias Finanças 1.165 ideias Finanças - CA 493 idéias Finanças - ideias US 9 Finanças ChartIQ 417 idéias Finanças Mobile Web 403 idéias Finanças Portfolios 810 idéias Finanças Triagem de ações 35 idéias Finanças Tablet 44 idéias Flickr - Perfil 290 ideias Flickr Android 60 idéias Flickr para Apple TV 24 idéias Flickr Grupos 12 ideias Flickr Interno 0 ideias Flickr iOS Dogfooding 0 idéias Flickr iPad 125 idéias Flickr iPhone 308 ideias Flickr Nova foto Página 8,030 idéias Flickr Pesquisa 0 ideias Food Revistas 0 idéias Jogos 3,147 ideias Mapas globais 1,021 ideias GS Mobile Web 42 idéias Health Pulse 3 ideias Home Page (Android) 1.689 ideias Home Page (iOS) 3.808 ideias Hong Kong Homepage 0 ideias Índia Celebridade 43 ideias Índia Finanças 493 ideias Índia Página inicial 1.866 i deas Índia Estilo de vida 173 idéias Índia Filmes 84 idéias Índia Notícias 327 ideias Índia Parceiro Portal Tata 0 idéias Índia Parceiro Portal Tikona 0 idéias Índia com segurança 15 idéias Índia Tela 165 idéias Índia Tempo 30 ideias Índia Yahoo Beleza 0 idéias Índia Yahoo Celebridade 4 idéias Índia Yahoo Finanças 0 ideias Índia Yahoo Movies 16 ideias Índia Yahoo Notícias 0 ideias Índia Yahoo Estilo 14 idéias Indonésia Celebridade 38 idéias Indonésia Página inicial 1.151 ideias Indonésia Notícias 170 ideias Indonésia com segurança 29 ideias Indonésia Ela 34 ideias Página inicial da Irlanda 90 idéias Jordânia Maktoob Homepage 418 idéias Comentários sobre o anúncio de correio electrónico 10 ideias Maktoob الطقس مكتوب 5 ideias Maktoob Celebridade 1 ideia Maktoob Entretenimento 10 ideias Maktoob Estilo de vida 0 ideias Maktoob Filmes 2 ideias Maktoob Notícias 182 idéias Maktoob Tela 15 ideias Maktoob Id. de estilo 1 Maktoob ألعاب مكتوب 0 ideias Maktoob شاشة مكتوب 28 ideias Malásia Homepage 17 ideias Malásia Notícias 58 ideias Malásia com segurança 6 ideias Malásia Video 0 ideias Malásia Tempo 1 i dea Merchant Solutions 1 ideia My Yahoo 31,876 ideias Meu Yahoo - back up 1 ideia My Yahoo - US 9,176 ideias Meu arquivo do Yahoo 314 ideias New Mail 9,206 ideias Novo email * 2,709 ideias Nova Zelândia Negócios & Finanças 132 idéias Nova Zelândia Página inicial 1.039 idéias Nova Zelândia com segurança 3 idéias Nova Zelândia Tela 0 idéias Notícias do PH ANC 21 ideias Filipinas Celebridade 214 ideias Filipinas Página inicial 8 ideias Filipinas Notícias 123 idéias Filipinas com segurança 12 idéias Filipinas Vídeo 0 idéias Filipinas Tempo 3 idéias Pick N Roll 19 ideias Postmaster 43 ideias Pro Football Pick & # 39; em 106 idéias Retail Pulse 0 idéias Rivals 11 idéias com segurança 165 idéias Tela para idéias iOS 0 Busca extensões 95 idéias Pesquisa Downloads de produtos 88 idéias Segurança 497 idéias Experiência de login 79 idéias Singapura Entretenimento 20 idéias Cingapura Finanças 230 idéias Cingapura Página inicial 1.048 idéias Cingapura Notícias 212 idéias Cingapura com segurança 11 idéias Cingapura Tela 19 idéias Cingapura Clima 4 idéias Cingapura Yahoo beleza 0 idéias Cingapura Yahoo Ideias da celebridade 4 Cingapura Yahoo Finanças 0 idéias Cingapura Yahoo Filmes 0 idéias Cingapura Yahoo Notícias 0 idéias Singapore Yahoo Style 4 ideas Idéias da celebridade da África do Sul Ideia da África do Sul 374 idéia s África do Sul Notícias 23 ideias Esportes Android 1,533 ideias Esportes CA 34 ideias Esportes iOS 1.025 ideias Esportes Redesign 3.181 idéias SportsReel 6 ideias StatTracker Beta 553 ideias Survival Futebol 81 ideias Taiwan Yahoo 名人 娛樂 0 ideias Taiwan Yahoo 運動 0 ideias Tailândia Safely 2 ideias Toolbar Mail App 216 ideas Toolbar Weather App 72 ideias Tourney Pick & # 39; em 41 ideias UK & amp; Irlanda Finanças 1.077 ideias UK & amp; Jogos da Irlanda 19 ideias UK & amp; Homepage da Irlanda 435 ideias UK & amp; Irlanda Notícias 0 ideias UK & amp; Ireland News Balde interno 0 ideias UK & amp; Irlanda Notícias Lego 375 ideas UK & amp; Irlanda com segurança 38 ideias UK & amp; Irlanda TV 21 ideias UK & amp; Irlanda Vídeo 187 ideias UK & amp; Irlanda Tempo 99 ideias Reino Unido Respostas 1 ideia UK Daily Fantasy 0 ideias UK Finanças Mobile Android 12 idéias UK Finanças Mobile DF iOS 2 idéias UK Finanças Mobile iOS 308 idéias Reino Unido Yahoo Movies 23 ideias US Respostas 8,946 ideias US Respostas Mobile Web 2,154 ideias US Autos GS 442 ideias US Celebrity GS 660 ideias EUA Comentários 350 ideias US Finance Mobile Android 40 idéias US Finance Mobile iOS 546 idéias US Flickr 237 ideias EUA 4,111 ideias EUA Homepage B1 68 ideias US Homepage B2 33 ideias US Homepage B3 50 ideias US Homepage B4 33 ideias US Homepage B5 0 ideias Página inicial dos EUA M 7,022 ideias Página inicial dos EUA YDC 43 idéias US Homes GS 203 idéias US Live Web Insights 24 ideias US Mail 193 ideias US Mail 12,211 ideias EUA Mapas 3,490 ideias US Membership Desktop 7,861 ideias US Membership Mobile 91 ideias US Filmes GS 424 ideias US Music GS 195 ideias US News 5,987 ideias US Search App Android 2 ideias US Search App iOS 9 ideias US Search Chrome Extensão 780 ideias US Chrome Chrome Extensão v2 2,197 ideias US Pesquisar Desktop 3 ideias US Search Desktop Bucket A 7 ideias US Search Desktop Bucket B 8 ideias US Pesquisar KG 2 ideias US Pesquisar Listagens locais 20,757 ideias EUA Busca Mobile Web 2 ideias EUA Busca Moçambique 1 ideia EUA Pesquisar estoque Quotes 11 ideias US Pesquisar Tablet Web 0 ideias US Shine GS 1 idéia US Toolbar 5,549 ideias US Travel GS 207 idéias EUA TV GS 367 ideias US Weather 2,313 ideias US Weather Bucket 0 ideias US Weather Mobile 13 idéias US Weather Mobile Android 2 ideias Guia de vídeos Android 149 idéias Guia de vídeo iOS 205 idéias Teste de guia de vídeo 15 ideias Web Hosting 4 ideias Yahoo Acessibilidade 358 ideias Yahoo Autos 71 ideias Yahoo Beauty 100 ideias Yahoo Ideias de celebridades 0 Yahoo Celebrity Canada 0 ideias Yahoo Decor 0 ideias Yahoo Entertainment 355 ideias Yahoo Esports 50 ideias Yahoo Feedback 0 ideias Yahoo Finance Feedback Forum 1 ideia Yahoo Finanças IN Mobile Android 0 ideias Yahoo Finance SG Mobile Android 1 idéia Yahoo FinanceReel 4 ideias Yahoo Comida 118 idéias Yahoo Gemini 2 ideias Yahoo Saúde 90 ideias Yahoo ajuda 166 idéias Yahoo Início 195 idéias Yahoo Home * 28 ideias Yahoo Lifestyle 168 idéias Ideias do Yahoo Yahoo 0 Yahoo Mail 2,124 ideias Aplicação do Yahoo Mail para Android 397 ideias Yahoo Mail Basic 627 ideias Yahoo Mail iOS App 47 idéias Yahoo Mail Mobile Web 1 idéia Yahoo Makers 51 idéias Yahoo Messenger 82 ideias Yahoo Mobile Developer Suite 60 idéias Yahoo Mobile para ideias do telefone 15 Yahoo Mobile para idéias do Tablet 0 Yahoo Music 76 idéias Yahoo News Digest Android 870 idéias Yahoo News Digest iPad 0 idéias Yahoo News Digest iPhone 1,531 idéias Yahoo Newsroom Aplicativo para Android 55 idéias Yahoo Newsroom iOS App 30 ideias Yahoo Parenting 63 ideias Yahoo Politics 118 idéias Yahoo Publishing 13 ideias Yahoo Real Estate 2 ideias Yahoo Tech 459 idéias Yahoo Travel 143 idéias Yahoo TV 102 ideias Yahoo View 204 ideias Yahoo Weather Android 2.138 ideias Yahoo Weather iOS 22.676 ideias Yahoo! 7 Food App (iOS) 0 ideias Yahoo! 7 Página inicial Archive 57 ideas Yahoo! 7 Notícias (iOS) 23 ideias Yahoo! 7 Tela 0 ideias Yahoo! 7 TV FANGO App (Android) 1 ideia Yahoo! 7 aplicação TV FANGO (iOS) 1 ideia Yahoo! 7 TV Guide App (Android) 0 ideias Yahoo! 7 TV Guide App (iOS) 1,245 ideias Yahoo! 7 Aplicação TV Plus7 (iOS) 0 ideias Yahoo! Centro de Feedback do Teste de Conceito 174 idéias Yahoo! Idéia de Contributor Network 1 Yahoo! Transliteração 29 ideias YAHOO! 7 Finanças 551 idéias Yahoo! 7 Jogos 9 ideias Yahoo! 7 Safely 19 ideias Yahoo7 Finanças Mobile DF iOS 12 ideias Yahoo7 Finanças Mobile iOS 217 ideias Yahoo7 Homepage 2.544 ideias.
Sua senha foi alterada.
Fizemos alterações para aumentar nossa segurança e restabelecer sua senha.
Acabamos de enviar-lhe um e-mail para. Clique no link para criar uma senha, depois volte aqui e faça o login.
Comments
Post a Comment