Php code exponential moving average no Brasil


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 ele doesn t parece dar 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 um array contendo todos os EMAs em vez de apenas o mais recente, e é mais lenta. Escrevendo e executando 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, há 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 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 é 2 -53 cerca de 1 1e-16 e apenas 2 -24 5 96e-8 para números de ponto flutuante de 32 bits, portanto, você não pode obter melhor do que este erro 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 actualizar os números em conformidade. Média móvel exponencial. Médias móveis exponenciais são recomendados como o mais confiável dos tipos de média móvel básica Eles fornecem um elemento de ponderação, com cada dia anterior dada progressivamente menos ponderação Suavização exponencial evita o problema encontrado com médias móveis simples Onde a média tende a descascar duas vezes uma vez no início do período de média móvel e novamente na direção oposta, no final do período inclinação média móvel exponencial é também e Asier para determinar a inclinação é sempre para baixo quando o preço fecha abaixo da média móvel e sempre para cima quando o preço está acima. Colin Twiggs revisão semanal da economia global irá ajudá-lo a identificar o risco de mercado e melhorar o seu timing.

Comments