Sunday 21 May 2017

Php Gleit Durchschnitt Skript


Ich habe ein kleines Problem. Ich habe virtuelles Labor, ein Student wird eine Umfrage mit 5 Fragen, jeder kostet 2 Punkt. Schlechte Wahl -2 Punkt, gute Wahl 2 Punkt. Also, endlich, wenn ein Student drücken Sie mir die Ergebnisse, ich möchte, dass Skript Medien-Feld von Tabellenbenutzern zu aktualisieren und aktualisieren Nota Feld aus Tabelle Laborator. Dieser Schüler erhält mehr Ergebnisse, aber wenn er Ergebnis 4 hat, muss der Durchschnitt 4 sein, ohne andere Ergebnisse zu berücksichtigen. Ich habe ein PHP-Skript, es funktioniert nicht, es hat nicht berechnen Durchschnitt, dass ich will. PS: Medien Bedeutung Durchschnitt, nicht Bedeutung Ergebnis oder Notiz, Suma Bedeutung Summe, nrnote Bedeutung Anzahl Noten. Wenn ich ausführen wählen, wenn (notalt4,4, AVG (nota)) als Medie von Laborator, wo studentteodorescuyahoo es zeigt 4 das ist falsch. Ich habe keine 4 in meinen Notizen. Was ist hier falsch Wenn ich eine 4 habe, ist die durchschnittliche Rendite 4, ist gut hier Fragte am 3. Juli um 15:16 als unklar, was du von Tripleee fragst. Andrewsi HaveNoDisplayName. Himanshu Alex Dec 19 15 at 5:10 Bitte klären Sie Ihr spezifisches Problem oder fügen Sie zusätzliche Details hinzu, um genau zu markieren, was Sie brauchen. Wie es aktuell geschrieben hat, ist es schwer zu sagen genau das, was du fragst. Weitere Informationen finden Sie auf der Seite, um diese Frage zu klären. Wenn diese Frage umgestaltet werden kann, um die Regeln in der Hilfe zu passen. Bitte bearbeiten Sie die Frage. Noit doesn39t Arbeit, es didn39t berechnen Durchschnitt, dass ich will. quot Was berechnet es dann Was sind die Ergebnisse Gibt es irgendwelche Fehler ndash user456814 Jul 3 11 bei 15: 25AFL Scripting Host WICHTIGE HINWEISE. Seit der Einführung von nativen Looping - und Flow-Control-Anweisungen wie if-else und während in Version 4.40 die Bedeutung von Scripting stark reduziert wurde. Derzeit können die meisten Aufgaben, die Scripting in früheren Versionen erfordern, in native AFL behandelt werden. Was mehr AFL Loops sind 3-6 mal schneller als JScriptVBScript. AFL Scripting Host ist eine Schnittstelle zwischen AFL-Engine und JScriptVBScript-Engines (aka. Active Scripting-Technologien) als Teil der Internet Tools amp Technologies Plattform von Microsoft zur Verfügung gestellt. Es erlaubt Ihnen, die Formeln zu erstellen, die Teile in AFL-Code und Teile in JScriptVBScript haben. Anforderungen AmiBroker 3.59 oder höher Microsoft JScriptVBScript-Engines installiert Microsoft JScriptVBScript-Engines kommen mit Internet Explorer 4 oder höher (Windows 98, Millenium, 2000 haben es im Betriebssystem enthalten). Es wird jedoch empfohlen, die neueste Version von Internet Explorer (5.5) zu installieren oder die neueste Version von Windows Scripting Host (5.5) von Microsoft herunterzuladen und zu installieren: Die JScriptVBScript-Dokumentation finden Sie auf der offiziellen Scripting-Seite unter: msdn. microsoftscripting Aktivieren von AFL Scripting Host Wenn du Scripts in deinen Formeln verwenden willst, musst du EnableScript () - Funktion am Anfang deiner Formel aufrufen. Die Funktion nimmt einen Eingabeparameter - Motorname: Von da an kannst du Teile in Skriptsprachen in deinen Formeln verkörpern. Der Anfang und das Ende des Skripts müssen mit lt - und gt-Sequenzen markiert werden, wie im folgenden Beispiel gezeigt: quotnormalquot AFL-Anweisungen kaufen cross (macd (), 0) verkaufen cross (0, macd ()) lt. Dein script code hier Gt quotnormalquot AFL Aussagen kaufen ExRem (kaufen, verkaufen) Derzeit ist die einzige Möglichkeit, um die Informationen zwischen quotnormalquot AFL Teil und Skript Teil ist es, Variablen verwenden. AFL-Scripting-Host stellt ein Objekt (vordefiniert, keine creationinitialization benötigt) namens AFL. Das AFL-Objekt verfügt über eine (standardmäßige) parametrisierte Eigenschaft namens Var (varname), die zum Zugriff auf AFL-Variablen von der Skriptseite verwendet werden kann: Da Var die Standard-Eigenschaft ist, können Sie seinen Namen weglassen und einfach AFL (varname) schreiben, wie im Beispiel gezeigt Unten: In AFL gibt es drei Datentypen: Array (von Gleitkommazahlen), eine Zahl (Gleitkomma) und einen String. Die VBScript - und JScript-Engines verwenden einen variablen Datentyp, der jegliche Art von Variablen enthalten kann, darunter drei, die von AFL verwendet werden. Wie in AFL, deklarieren Sie nicht Variablen in Skriptsprachen, der Typ wird durch die erste Zuweisung bestimmt. Im Falle von VBScript kannst du AFL-Variablen eines beliebigen unterstützten Typs mit der oben gezeigten Syntax abrufen. Aber in JScript, aufgrund der grundlegenden Unterschied in der Handhabung von Arrays in JScript (Array-Elemente in JScript als dynamische Eigenschaften eines Array-Objekts implementiert sind) müssen Sie den folgenden Code verwenden, um den Wert des AFL-Arrays in das JScript-Array zu erhalten: Das GetArray ( ) Funktion, die oben gezeigt wird, macht es einfach, automatisiertes sicheres Array in JScript-Array umzuwandeln. Dieses Beispiel zeigt auch, wie Sie Funktionen in JScript definieren und verwenden. AFL-Variablen von Skriptseiten-Arrays zuordnen ist viel einfacher, AFL-Scripting-Host erkennt JScript-Arrays und kann direkt ihren Inhalt abrufen: Alle anderen Datentypen werden in JScript und VBScript gleich behandelt Iterating durch Arrays Eine der grundlegendsten Aufgaben, die jeder wahrscheinlich tun würde, ist, durch Array zu iterieren. In VBScript kann dies mit For..To..Next-Anweisung durchgeführt werden, in JScript mit for () - Anweisung. Beide Konstrukte müssen die Arraygröße oder die Anzahl der Elemente im Array kennen. In VBScript solltest du die UBound-Funktion verwenden, um die obere Grenze des Arrays zu erhalten. In JScript verwenden Sie einfach die Längeneigenschaft des Arrays. Die folgenden Beispiele zeigen dies. (Bitte beachten Sie, dass sowohl in VBScript - als auch in JScript-Arrays nullbasiert sind.) A) Indikatorbeispiel - Exponentieller gleitender Durchschnitt: b) Profit-Ziel-Stop-Beispiel Hier kommt das Beispiel der Formel, die den Gewinn-Ziel-Stop mit dem festen 10-prozentualen realisiert Vom Kaufpreis Beachten Sie, dass Kaufbedingung erfüllt ist, wenn der Preis ein neues Hoch erreicht, also passiert es mehrmals nach dem ersten Kauf. Deshalb kann ValueWhen (Buy, Close) keinen ersten Kaufpreis geben und diese Art von Handelsregel konnte nicht in AFL selbst implementiert werden. Aber mit Scripting gibt es kein Problem. Weitere Informationen Weitere Scripting-Beispiele finden Sie in der AFL Online-Bibliothek unter: amibrokerlibrarylist. php Bei weiteren Fragen, Kommentaren und Anregungen wenden Sie sich bitte an: supportamibroker. Bitte beachten Sie, dass das AFL-Scripting ein ziemlich fortgeschrittenes Thema ist und Sie sollten ein bisschen mit AFL spielen, bevor Sie zu tief in scripting. Im versuchen, 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 tat: Isoliere k also ist es nicht 10000 mal berechnet Halten Sie nur die neuesten Computer-EMA, und nicht alle von ihnen in einem Array verwenden für () anstelle von foreach () das Daten-Array hat keine Schlüssel Es ist ein Grund-Array Dies erlaubte mir, die Ausführungszeit von 2000ms auf etwa 500ms für 15000 Werte zu reduzieren Was funktionierte nicht: Verwenden Sie SplFixedArray (), diese rasierte nur 10ms, die 1.000.000 Werte ausführen Verwenden Sie PHPTrader-Erweiterung. Dies gibt ein Array mit allen EMAs anstatt nur die neuesten, und seine langsamer Schreiben und Ausführen der gleichen 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, anzurufen und ein solches riesiges Argument an das Drehbuch zu geben, fragte Jul 11 ​​14 um 19:21 Klar implementiert mit einer Erweiterung gibt dir ein Signifikanter Aufschwung Darüber hinaus kann das Kalkül als sich selbst verbessert werden und das Sie gewinnen können, können Sie in welcher Sprache Sie wählen. Es ist leicht zu sehen, dass lastEMA wie folgt berechnet werden kann: Dies kann wie folgt umgeschrieben werden, um so viel wie möglich aus der Schleife herauszunehmen: Um die Extraktion der k zu erklären, denken wir, dass in der vorherigen Formulierung wie bei allen ist Original-Rohdaten werden mit K so vervielfacht, dass man stattdessen das Endergebnis multiplizieren kann. Beachten Sie, dass Sie auf diese Weise umgeschrieben haben, haben Sie 2 Operationen innerhalb der Schleife anstelle von 3 (genau in der Schleife gibt es auch ich inkrementieren, ich Vergleich mit sizedata und lastEMA Wert Zuweisung) so können Sie erwarten, um eine zusätzliche zu erreichen Beschleunigung im Bereich zwischen 16 und 33. Weiterhin gibt es noch andere Verbesserungen, die zumindest in einigen Fällen berücksichtigt werden können: Betrachten Sie nur die letzten Werte Die ersten Werte werden mehrmals um k1m 1 - k multipliziert, so dass sie dazu beitragen können Unter der Fließkomma-Präzision (oder dem annehmbaren Fehler). Diese Idee ist besonders hilfreich, wenn man die Annahme ausführen kann, dass ältere Daten von der gleichen Größenordnung sind wie die neuere, denn wenn man nur die letzten n Werte betrachtet, ist der Fehler, den du machst, irregedeDiscardeddata (1-k) n. Wenn also die Größenordnung weitgehend gleich ist, können wir feststellen, dass der relative Fehler, der erledigt ist, reerr err ist, letzteren EMAofdiscardeddata (1-k) n lastEMA, der fast gleich einfach (1-k) n ist. Unter der Annahme, dass lastEMA fast gleich EMAofdiscardeddata ist: Lasst uns sagen, dass ihr einen relativen Fehler relerr akzeptieren könnt, könnt ihr nur die letzten n Werte betrachten, wo (1 - k) n lt relerr ist. Bedeutet, dass Sie vor der Schleife vorberechnen können (vor der Schleife) n log (relerr) log (1-k) und berechnen Sie alle nur unter Berücksichtigung der letzten n Werte. Wenn der Datensatz sehr groß ist, kann dies eine vernünftige Beschleunigung geben. Betrachten Sie, dass für 64-Bit-Gleitkommazahlen Sie eine relative Präzision (bezogen auf die Mantisse), die 2-53 (ca. 1.1e-16 und nur 2-24 5.96e-8 für 32-Bit-Gleitkommazahlen) ist, so dass Sie nicht erhalten können Besser als dieser relative Fehler also grundsätzlich sollten Sie nie 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-22001) 36746. Ich denke, das ist interessant zu wissen, dass zusätzliche Berechnungen in den Rundungen verloren gehen, ist es nutzlos ist besser nicht zu tun. Jetzt ein Beispiel für den Fall, wo man einen relativen Fehler akzeptieren kann, der größer ist als die Gleitkomma-Präzision relerr 1ppm 1e-6 0.00001 6 signifikante Dezimalstellen Sie haben n log (1.1e-16) log (1-22001) 13815 Ich denke, ist ganz ein Kleine Zahl im Vergleich zu Ihren letzten Stichproben Zahlen so in diesem Fall die Beschleunigung könnte offensichtlich sein (Ich vermute, dass Bereich 2000 ist sinnvoll oder hoch für Ihre Anwendung, aber ich kann nicht wissen). Nur noch wenige wenige, weil ich nicht weiß, was sind deine typischen Figuren: relerr 1e-3 range 2000 n 6907 relerr 1e-3 range 200 n 691 relerr 1e-3 reihe 20 n 69 relerr 1e-6 range 2000 n 13815 relerr 1e - 6 Bereich 200 n 1381 relerr 1e-6 Bereich 20 n 138 Wenn die Annahme lastEMA fast gleich EMAofdiscardeddata nicht genommen werden kann, sind die Dinge weniger einfach, aber da der Vorteil cam signifikant ist, kann es sinnvoll sein, weiterzumachen: Wir müssen das wieder betrachten Vollständige Formel: relerr EMAofdiscardeddata (1-k) n lastEMA so n log (relerr lastEMA EMAofdiscardeddata) log (1-k) (log (relerr) log (lastEMA EMAofdiscardeddata)) log (1-k) der zentrale Punkt ist, lastEMA zu berechnen EMAofdiscardeddata (ohne tatsächliche Berechnung von lastEMA noch EMAofdiscardeddata natürlich) Ein Fall ist, wenn wir a-priori wissen, dass zum Beispiel EMAofdiscardeddata lastEMA lt M (zB M 1000 oder M 1e6) in diesem Fall n lt (log (relerrM)) log (1 - k) Wenn du keine M-Nummer geben kannst, musst du eine gute Idee finden, die EMAofdiscardeddata zu überschätzen. LastEMA eine schnelle Möglichkeit könnte sein, M max (Daten) min zu nehmen (Daten) Parallelisierung Die Berechnung kann in einem Formular umgeschrieben werden Wo es eine einfache Hinzufügung von unabhängigen Begriffen ist: Wenn also die Implementierungssprache die Parallelisierung unterstützt, kann der Datensatz in 4 (oder 8 oder n. Grundsätzlich die Anzahl der CPU-Kerne zur Verfügung) Chunks und es kann berechnet werden, die Summe der Begriffe auf jedem Stück in parallel summieren die einzelnen Ergebnisse am Ende. Ich gehe nicht ins Detail, denn diese Antwort ist schon schrecklich lang und ich denke, das Konzept ist bereits ausgedrückt. Vielen Dank für diese I39m mit diesem auf Börsen-Daten, so dass die Tatsache, dass die älteren Daten in der gleichen Größenordnung wie die neueren Daten hängt von der Zeitrahmen verwendet. 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). Ich werde mit verschiedenen Szenarien auf realen und simulierten Daten experimentieren. Bei neuen Daten, mit einem Bereich lt 200, benutze ich einen 1000-Elemente-Datensatz. Aber ich mache auch einige Rückenversuche in den letzten Jahren, also muss ich noch den ganzen Datensatz laden. Sie haben für beide Situationen geholfen, danke ndash Lykegenes Jul 16 14 um 15:11 Aufbau Ihrer eigenen Erweiterung definitiv verbessert die Leistung. Heres ein gutes Tutorium von der Zend Website. Einige Leistungszahlen: Hardware: Ubuntu 14.04, PHP 5.5.9, 1-Core Intel CPU3.3Ghz, 128MB RAM (seine VPS). Vorher (nur PHP, 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 Aber Im Gedächtnis begrenzt an diesem Punkt, unter Verwendung von 70MB. Ich werde das beheben und die Nummern entsprechend aktualisieren.

No comments:

Post a Comment