Ich möchte die EMA Exponential Moving Average Wert in PHP. I ve versucht mit folgendem Code, aber es s gibt mir 500 error. PHP EMA Berechnung Funktion Trader-ema. Tried mit lange Zeit Googeln, aber nicht immer eine Hilfe auf diese in PHP So , Ich habe keine Ahnung, was getan werden muss, um den EMA-Wert zu berechnen. Edit-1 Installierte Erweiterungen. Ich habe alle notwendigen Erweiterungen installiert, jetzt bekomme ich die Ausgabe Aber es doesn t scheint geben richtige Ausgabe. Ich denke PHP-Funktion für Berechnen von EMA funktioniert nicht richtig Jede Hilfe in diesem wäre sehr dankbar. Ich versuche, die letzte EMA eines großen Datensatzes 15000 Werte abzurufen Es ist ein sehr ressourcenhungriger Algorithmus, da jeder Wert vom vorherigen abhängt Hier ist mein Code. Was ich schon gemacht habe. Isolate k so ist es nicht 10000 mal berechnet. Halten Sie nur die neuesten Computer-EMA, und nicht alle von ihnen in einem Array. use für statt foreach. the Daten-Array doesn t haben Schlüssel es sa Basis-Array. Dies erlaubte mir, die Ausführungszeit von 2000ms auf abo zu reduzieren Ut 500ms für 15000 Werte. Was didn t work. Use SplFixedArray, diese rasierte nur.10ms Ausführung 1.000.000 Werte. Use PHPTrader Erweiterung dies gibt ein Array mit allen EMAs anstatt nur die neuesten, und es ist langsamer. Writing und läuft das gleiche Algorithmus in C und läuft es über 2.000.000 Werte dauert nur 13ms So offensichtlich, mit einer kompilierten, untergeordneten Sprache scheint zu helfen P. Wo sollte ich von hier aus gehen Der Code wird letztlich auf Ubuntu laufen, also welche Sprache sollte ich wählen Will PHP In der Lage sein, solch ein riesiges Argument an das Skript zu rufen und zu übergeben. 11. Juli 14 um 19 21.Clearly Implementierung mit einer Erweiterung gibt Ihnen einen signifikanten Schub Zusätzlich kann das Kalkül als sich selbst verbessert werden und das gewinnt, können Sie in welcher Sprache Sie hinzufügen Wählen Sie. Es ist leicht zu sehen, dass lastEMA wie folgt berechnet werden kann. Dies kann wie folgt umgeschrieben werden, um aus der Schleife so weit wie möglich herauszuholen. Um die Extraktion der k zu erklären, dass in der vorherigen Formulierung ist, als ob alle Die ursprünglichen Rohdaten werden mit k so vervielfacht, dass man stattdessen das Endergebnis multiplizieren kann. Hinweis, dass auf diese Weise umgeschrieben wurde, hast du 2 Operationen innerhalb der Schleife anstelle von 3, um genau in der Schleife zu sein, gibt es auch ich inkrementiere, ich vergleiche Mit sizedata und lastEMA Wertzuweisung so können Sie erwarten, dass eine zusätzliche Beschleunigung im Bereich zwischen den 16 und 33 zu erreichen. Darüber hinaus gibt es andere Verbesserungen, die zumindest in einigen Fällen berücksichtigt werden können. Beachten Sie nur die letzten Werte. Die ersten Werte sind Multipliziert mehrmals mit k1m 1 - k, so dass ihr Beitrag kleiner oder sogar unter die Gleitkomma-Präzision oder den akzeptablen Fehler gehen kann. Diese Idee ist besonders hilfreich, wenn Sie die Annahme machen können, dass ältere Daten in der gleichen Größenordnung sind wie die Neuer, denn wenn man nur die letzten n Werte betrachtet, ist der Fehler, den du machst. Err EMAofdiscardeddata 1- k n. So wenn Größenordnung ist weitgehend das gleiche können wir sagen, dass der relative Fehler getan ist. Relerr err lastEMA EMAofdiscardeddata 1- kn lastEMA. that ist fast gleich einfach 1- k n. Under die Annahme, dass lastEMA fast gleich EMAofdiscardeddata. Let s sagen, dass Sie einen relativen Fehler relerr. you können Sie sicher nur die letzten n zu akzeptieren Werte, die 1 - kn relerr. Means, die Sie vor der Schleife vorberechnen können, log relerr log 1- k und berechnen Sie alle nur unter Berücksichtigung der letzten n values. If der Dataset ist sehr groß, kann dies eine vernünftige speedup. Consider, dass für 64-Bit-Gleitkommazahlen haben Sie eine relative Präzision im Zusammenhang mit der Mantisse, die 2 -53 etwa 1 1e-16 und nur 2 -24 5 96e-8 für 32-Bit-Gleitkommazahlen ist, so dass Sie nicht besser als diese relative error. so erhalten können Grundsätzlich sollten Sie niemals einen Vorteil bei der Berechnung von mehr als n log 1 1e-16 log 1- k-Werte haben. Um ein Beispiel zu geben, wenn Bereich 2000 dann n log 1 1e-16 log 1-2 2001 36 746. Ich denke das ist interessant Zu wissen, dass zusätzliche Berechnungen in den Rundungen verloren gehen, ist es nutzlos ist besser nein T to do. now ein Beispiel für den Fall, wo man einen relativen Fehler akzeptieren kann größer als Gleitpunkt Präzision relerr 1ppm 1e-6 0 00001 6 signifikante Dezimalstellen Sie haben n log 1 1e-16 log 1-2 2001 13 815.I Denke, ist eine ziemlich kleine Zahl im Vergleich zu Ihren letzten Samples Zahlen so in diesen Fällen die Beschleunigung könnte offensichtlich sein Ich vermute, dass Bereich 2000 ist sinnvoll oder hoch für Ihre Anwendung, aber thi ich kann nicht wissen. nicht andere wenige Zahlen, weil ich nicht weiß, was Sind deine typischen Figuren. Reerr 1e-3 reicht 2000 n 6 907. reerr 1e-3 reicht 200 n 691. relerr 1e-3 reihe 20 n 69. relerr 1e-6 reihe 2000 n 13 815. relerr 1e-6 reihe 200 n 1 381. relerr 1e -6 Bereich 20 n 138.Wenn die Annahme lastEMA fast gleich EMAofdiscardeddata kann nicht genommen werden Dinge sind weniger einfach, aber da der Vorteil cam erheblich ist, kann es sinnvoll sein, weiter zu gehen. Wir müssen die volle Formel reerr EMAofdiscardeddata 1- Kn lastEMA. so n log relerr lastEMA EMAofdiscardeddata log 1 - k log relerr log lastEMA EMAofdiscardeddata log 1 - k. die zentrale Punkt ist es, lastEMA EMAofdiscardeddata zu berechnen, ohne dass letzteres noch keine EMAofdiscardeddata berechnet wird. Ein Fall ist, wenn wir a-priori wissen Zum Beispiel EMAofdiscardeddata lastEMA M zum Beispiel M 1000 oder M 1e6.in in diesem Fall n log relerr M log 1- k. if kannst du keine M-Nummer geben. Du musst eine gute Idee finden, die EMAofdiscardeddata lastEMA. one schnell zu überschätzen Könnte sein, um M max Daten min Daten zu nehmen. Die Berechnung kann umgeschrieben werden In einer Form, wo es eine einfache Hinzufügung von unabhängigen terms. So, wenn die implementierende Sprache unterstützt Parallelisierung der Dataset kann in 4 oder 8 oder n im Grunde die Anzahl der CPU-Kerne verfügbaren Chunks aufgeteilt werden und es kann die Summe der Begriffe auf jedem berechnet werden Chunk in paralleler Fassung der einzelnen Ergebnisse am Ende. Ich gehe nicht ins Detail mit diesem seit dieser Antwort ist schon schrecklich lang und ich denke, das Konzept ist bereits ausgedrückt. Vielen Dank dafür, dass ich m mit diesem auf Börsen-Daten, so Die Tatsache, dass die älteren Daten in der gleichen Größenordnung wie die neueren Daten sind, hängt von dem verwendeten Zeitrahmen ab Angenommen, ein Bereich von 200, wird es eine viel größere Variation der Preise auf einem täglichen Zeitrahmen 200 Tage als 5 Minuten Zeitrahmen 16 Stunden werde ich mit verschiedenen Szenarien auf realen und simulierten Daten experimentieren Auf neue Daten, mit einer Reichweite 200, benutze ich einen 1000-Elemente-Datensatz Aber ich mache auch einige Back-Tests in den letzten Jahren, also muss ich noch den ganzen Datensatz laden Sie haben für beide geholfen Situationen, danke Lykegenes 16. Juli 14 um 15 11.Beauung Ihrer eigenen Erweiterung definitiv verbessert die Leistung Hier ist ein gutes Tutorial von der Zend Website. Some Performance Zahlen Hardware Ubuntu 14 04, PHP 5 5 9, 1-Core Intel CPU 3 3Ghz, 128MB RAM es sa VPS. Before PHP nur, 16.000 Werte 500ms. C Erweiterung, 16.000 Werte 0 3ms. C Erweiterung 100.000 Werte 3 7ms. C Erweiterung 500.000 Werte 28 0ms. But I m Speicher begrenzt an diesem Punkt, mit 70MB Ich werde das beheben Und aktualisieren Sie die Zahlen entsprechend. Exponential Moving Average. Exponential gleitende Durchschnitte werden als die zuverlässigsten der grundlegenden gleitenden durchschnittlichen Arten empfohlen Sie bieten ein Element der Gewichtung, mit jedem vorigen Tag gegeben progressiv weniger Gewichtung Exponentielle Glättung vermeidet das Problem mit einfachen gleitenden Durchschnitten angetroffen Wo der Durchschnitt eine Tendenz hat, zweimal einmal zu Beginn der gleitenden Mittelperiode und wieder in die entgegengesetzte Richtung zu bellen, am Ende der Periode exponentielle gleitende durchschnittliche Steigung ist auch e Asier, um die Steigung zu bestimmen ist immer unten, wenn der Preis schließt unter dem gleitenden Durchschnitt und immer auf, wenn der Preis über ist. Colin Twiggs wöchentliche Überprüfung der globalen Wirtschaft wird Ihnen helfen, Marktrisiko zu identifizieren und verbessern Sie Ihr Timing.
Comments
Post a Comment