Eu quero calcular o valor EMA Exponential Moving Average em PHP. I ve tentei com o código a seguir, mas ele está me dando 500 error. PHP EMA função de cálculo trader-ema. Tried com muito tempo Googling, mas não recebendo qualquer ajuda sobre isso em PHP Então , Eu ve nenhuma pista o que precisa ser feito para calcular o EMA value. Edit-1 extensions. I instalado instalado todas as extensões necessárias, agora estou recebendo a saída Mas não parece dando output. I adequada função PHP para Calculando EMA não está funcionando corretamente Qualquer ajuda neste seria muito apreciada. Eu estou tentando recuperar o último EMA de um grande conjunto de dados 15000 valores É um algoritmo muito fome de recursos já que cada valor depende do anterior Aqui está o meu código. O que eu já fiz. Isolate k por isso não é computado 10000 times. Keep apenas o mais recente EMA calculado, e não manter todos eles em um array. use para em vez de foreach. the matriz de dados não tem chaves é uma matriz básica. Isso me permitiu reduzir o tempo de execução de 2000ms para abo Ut 500ms para 15000 values. What didn t work. Use SplFixedArray, este raspou only.10ms executando 1,000,000 values. Use extensão PHPTrader isso retorna uma matriz contendo todos os EMAs em vez de apenas o mais recente, e é mais lenta. Escrever e executar o mesmo Algoritmo em C e executá-lo mais de 2.000.000 valores leva apenas 13ms Então, obviamente, usando um compilado, linguagem de nível inferior parece ajudar P. Onde devo ir a partir daqui O código será executado em última instância no Ubuntu, de modo que a linguagem devo escolher Will PHP Ser capaz de chamar e passar um argumento tão grande para o script. Como implementar com uma extensão dá-lhe um impulso significativo Além disso, o cálculo pode ser melhorado como ele próprio e que o ganho você pode adicionar em qualquer língua que você Choose. It é fácil ver que lastEMA pode ser calculado como follows. This pode ser reescrito da seguinte forma, a fim de tirar o máximo de loop. To explicar a extração do k acho que na formulação anterior é como se todos Os dados brutos originais são multiplicados por k praticamente você pode multiplicar o resultado final. Note que, reescrito desta forma, você tem 2 operações dentro do loop em vez de 3 para ser preciso dentro do loop também há i incremento, i comparação Com atribuição de valor sizeata e lastEMA para que desta forma você pode esperar para alcançar uma aceleração adicional na faixa entre os 16 e 33. Além disso, existem outras melhorias que podem ser consideradas, pelo menos, em algumas circunstâncias. Considere apenas os últimos valores. Multiplicado várias vezes por k1m 1 - k para que o seu contributo pode ser pequeno ou mesmo ir sob a precisão de ponto flutuante ou o erro aceitável. Esta idéia é particularmente útil se você pode fazer a suposição de que os dados mais antigos são da mesma ordem de grandeza que o Mais recente porque se você considerar apenas os últimos n valores o erro que você faz é. Err EMAofdiscardeddata 1- k n. So se ordem de grandeza é amplamente o mesmo, podemos dizer que o erro relativo feito é. Relerr err lastEMA EMAofdiscardeddata 1-kn lastEMA. that é quase igual a simplesmente 1- k. No pressuposto de que lastEMA quase igual a EMAofdiscardeddata. Let s dizer que você pode aceitar um relativo erro relerr. you pode considerar com segurança apenas o último n Valores onde 1-kn relerr. Means que você pode pré-calcular antes do laço n log log relerr 1- k e calcular tudo só considerando os últimos n valores. Se o conjunto de dados é muito grande isso pode dar uma sensata speedup. Consider que para Números de ponto flutuante de 64 bits você tem uma precisão relativa relacionada à mantissa que é de 2 -53 cerca de 1 1e-16 e apenas 2 -24 5 96e-8 para números de ponto flutuante de 32 bits para que você não possa obter melhor do que este error. so relativo Basicamente você nunca deve ter uma vantagem em calcular mais do que n log 1 1e-16 log 1- k values. to dar um exemplo se intervalo 2000, em seguida, n log 1 1e-16 log 1-2 2001 36 746.I pensar que é interessante Saber que cálculos extras iriam perder dentro dos arredondamentos é inútil é melhor não T para do. now um exemplo para o caso onde você pode aceitar um erro relativo maior do que precisão de ponto flutuante relerr 1ppm 1e-6 0 00001 6 dígitos decimais significativos que você tem n log 1 1e-16 log 1-2 2001 13 815.I Acho que é um pouco número em comparação com o seu último número de amostras para que em casos que a aceleração poderia ser evidente Eu estou supondo que a faixa 2000 é significativo ou alto para a sua aplicação, mas thi eu não posso know. just outros poucos números, porque eu não sei o que São suas figuras típicas. Relerr 1e-3 intervalo 2000 n 6 907. relerr 1e-3 intervalo 200 n 691. relerr 1e-3 intervalo 20 n 69. relerr 1e-6 intervalo 2000 n 13 815. relerr 1e-6 intervalo 200 n 1 381. relerr 1e -6 intervalo 20 n 138.Se a suposição lastEMA quase igual a EMAofdiscardeddata não pode ser tomada as coisas são menos fáceis, mas desde que a vantagem cam ser significativo pode ser significativo para ir on. we necessidade de re-considerar a fórmula completa relerr EMAofdiscardeddata 1- Kn lastEMA. so n log de relerr lastEMA EMAofdiscardeddata log 1- k registro log relerr lastEMA EMAofdiscardeddata log 1- k. o ponto central é calcular lastEMA EMAofdiscardeddata sem realmente cálculo lastEMA nem EMAofdiscardeddata de curso. um caso é quando sabemos a priori que Por exemplo EMAofdiscardeddata lastEMA M, por exemplo, M 1000 ou M 1e6.Nesse caso n log relerr M log 1- k. if você não pode dar qualquer M number. you tem que encontrar uma boa idéia para sobre-estimativa EMAofdiscardeddata lastEMA. one rápida Poderia ser a de tomar M dados max dados min. O cálculo pode ser re-escrito Em uma forma onde é uma simples adição de termos independentes. Então, se o linguagem de implementação suporta paralelização o conjunto de dados pode ser dividido em 4 ou 8 ou n, basicamente, o número de núcleos de CPU disponíveis pedaços e pode ser calculada a soma de termos em cada Pedaço em paralelo resumindo os resultados individuais no final. Eu não entrar em detalhes com isso desde esta resposta já é muito longo e acho que o conceito já está expressado. Graças a você por isso estou usando isso em dados do mercado de ações, então O fato de que os dados mais antigos estão na mesma ordem de magnitude que os dados mais recentes depende do período de tempo usado Suponha que um intervalo de 200, haverá uma variação muito maior nos preços em um frame de tempo diário 200 dias de 5 minutos 16 horas Eu vou experimentar com diferentes cenários em dados reais e simulados Em novos dados, com um intervalo de 200, eu uso um conjunto de dados de 1000 elementos Mas eu também fazer alguns testes de volta ao longo dos últimos anos, então eu ainda preciso carregar todo o conjunto de dados Você ajudou para ambos Situações, obrigado Lykegenes Jul 16 14 às 15 11. Construir sua própria extensão definitivamente melhora o desempenho Aqui está um bom tutorial do Zend website. Some figuras de desempenho Hardware Ubuntu 14 04, PHP 5 5 9, 1-core Intel CPU 3 3Ghz, 128MB RAM é um VPS. Antes do PHP apenas, 16.000 valores 500ms. C Extensão, 16.000 valores 0 3ms. C Extensão 100.000 valores 3 7ms. C Extensão 500.000 valores 28 0ms. But Eu m memória limitada neste momento, usando 70MB Vou corrigir isso E atualizar os números em conformidade. Média móvel exponencial. O indicador de média móvel exponencial EMA é usado para reduzir o atraso na média móvel simples Isso é conseguido através da aplicação de mais peso aos preços recentes em relação aos preços mais antigos Com ponderação aplicada a média móvel exponencial vai reagir Mais rápido para mudanças de preços recentes em comparação com um simples Moving Average. A aplicação muito útil de indicadores de média móvel está em estratégias de reversão média, onde o objetivo é identificar um evento outlier e comércio pr O preço que atravessa a Média Móvel também pode ser muito útil para identificar o fim de uma mudança de preço direcional longo. No entanto, deve-se notar que, dada a natureza retardada do indicador, ela não é muito efetiva durante os períodos de . O cálculo da Média Móvel Exponencial é baseado numa percentagem do valor do intervalo actual mais a Média Móvel anterior multiplicada pelo valor ponderado que depende do número de períodos n que são utilizados para calcular o valor. É usada para calcular a ponderação. Por exemplo, se o número de períodos n que estão sendo usados para calcular a Média Móvel Exponencial for 9, então a ponderação de 20 seria aplicada ao preço de Fechamento atual e ponderação 80 aplicada ao valor da Média Móvel Exponencial anterior. O indicador de média móvel exponencial. O indicador de média móvel exponencial pode ser exibido nos gráficos timetotrade Para adicionar o movimento exponencial A Clique no botão Adicionar Indicador Clique na caixa de pesquisa e digite o nome do indicador que você está procurando ou, por exemplo, digite a Média Móvel Exponencial e percorra os resultados. Adicionando o indicador Exponential Moving Average, dentro das configurações de gráfico, clique nele para definir os parâmetros e alterar colours. Exponential Moving Alerts. Alerts médio pode ser configurado para fornecer uma notificação de mensagem de texto por e-mail ou SMS de quando o gráfico indicador de média móvel exponencial As condições foram cumpridas, estratégias de negociação backtest ou executar negócios de demonstração Para saber more. It nunca foi mais fácil de executar a sua estratégia de negociação Nossa Tecnologia de Negociação Trigger significa que você pode agora executar automaticamente seus negócios diretamente nos mercados globais do mundo. Você nunca precisa perder Uma oportunidade de negociação again. buy quando suas condições de gráfico de análise técnica são cumpridas Realmente comprar, e não apenas obter um e-mail ou sms alert. or vender Quando uma linha de tendência de suporte é broken. or back-test sua estratégia vai para trás até 30 anos. Timetotrade s Trigger Trading Technology é verdadeiramente jogo mudar Ele lhe dá uma vantagem comercial O poder de tomar a sua negociação para um novo level. Trade Reino Unido , EU e ações européias - aplique agora. Execute comércios quando seu preço Candlestick Trend linha volume e análise técnica condições do gráfico são satisfeitas usando o Trigger Trading Technology - aprender mais - help video. Email e SMS Trigger Alertas comerciais - saiba more. Trade Off The Gráfico - saiba mais. Estratégias de negociação de teste com até 30 anos de dados históricos - saiba mais. Crie contas de negociação simuladas para testar suas estratégias de negociação de gatilho - saiba mais. Forex em tempo real, dados do mercado de ações no Reino Unido, Europa e EUA .170 Análise Técnica e Indicadores de Padrões de Candlestick - saiba mais. Todas as ferramentas que você precisa para criar e administrar um clube de investimento bem-sucedido - saiba mais. Gerencie sua Carteira e calcule as responsabilidades de Ganhos de Capital no Reino Unido HMRC e SA 108 Declarações de imposto de CGT - aprenda mais. Crie competições de troca para você e seus amigos - aprenda mais. Aplique para uma conta de troca hoje e comece o pacote de pro para LIVRE - aplique agora. Aplique agora para tentar nossa plataforma superb e começar sua vantagem negociando. As informações e dados fornecidos destinam-se apenas a fins educativos e informativos. A interpretação e utilização das informações e dados fornecidos são de inteira responsabilidade do utilizador. Todas as informações e dados contidos neste website são obtidos de fontes consideradas exactas e fiáveis. Omissões são possíveis devido a erro humano e / ou mecânico Todas as informações e dados são fornecidos como é sem garantia de qualquer tipo Nós não fazemos nenhuma declaração sobre a exatidão, integridade ou oportunidade das informações e dados neste site e nos reservamos o direito, A seu exclusivo critério e sem qualquer obrigação, alterar, fazer melhorias ou corrigir quaisquer erros ou omissões em qualquer parte dos serviços em qualquer momento O desempenho passado é n Ot uma garantia de resultados futuros Negociação traz um elevado nível de risco para o seu capital e pode resultar em perdas que excedem os seus depósitos Pode não ser adequado para todos, por isso certifique-se de compreender plenamente os riscos envolvidos. Todos os serviços são prestados pela Mercor Index Ltd TimeToTrade é uma designação comercial da Mercor Index Ltd uma empresa registada em Inglaterra e País de Gales sob o número 9479466 O nosso endereço registado é 34-36 St Georges Road, Brighton, BN2 1ED Mercor Index Ltd é autorizado e regulado pela Autoridade de Conduta Financeira número 679941.The Os serviços de negociação oferecidos pela Mercor Index Ltd não estão disponíveis para os residentes dos Estados Unidos e não se destinam ao uso de qualquer pessoa em qualquer país onde tais serviços sejam contrários às leis ou regulamentos locais As assinaturas dos produtos TimeToTrade estão disponíveis se você não for Elegíveis para serviços de negociação.2005-2017 Mercor Index Ltd.
Comments
Post a Comment