Ich habe das mit dem Visual C-Profiler profiliert und es macht etwa 35 der Laufzeit aus. Dieser exponentielle gleitende Durchschnitt wird mehr als eine Milliarde Mal genannt, da er wiederholt bei der Verarbeitung von mehr als 400 Gigabyte Daten verwendet wird. Die Daten kommen ab Ein Raid Level 0 Solid State Disk Array, so das Lesen der Daten Konten für weniger als 5 der Zeit Die Größe des Preises ist um 100 Ich ursprünglich beschleunigt es um einen Faktor von 4 durch Vorberechnung so viel von den Daten wie möglich Dann war ich In der Lage, es wieder zu erhöhen, um einen Faktor von PaeneInsula 30.10. 11 bei 20 41. Ich war in der Lage, die Geschwindigkeit wieder um einen Faktor von 12 durch Multithreading es die Art der Daten ist so, dass es multithreaded so, dass die Last ist perfekt ausbalanciert Und ich habe es läuft auf einem i7 990x, die 6 Kerne hat, hyperthreaded von insgesamt 12, übertaktet PaeneInsula Okt 30 11 bei 20 51.Sure, Multithreading kann helfen Aber Sie können fast sicher die Leistung auf einem einzigen verbessern Threaded machine. First, Sie berechnen es in die falsche Richtung Nur die modernsten Maschinen können negativ schreiten Prefetching Fast alle Machihnes sind schneller für Unit-Fortschritte Ich ändere die Richtung des Arrays, so dass Sie von niedrig nach hoch und nicht hoch scannen Zu niedrig ist fast immer besser. Next, umschreiben ein bisschen - bitte erlauben Sie mir, die Variablennamen zu verkürzen, um es einfacher zu geben. Bei der Weg, werde ich mit der Verwendung von Shorthands p für Preis und s für Glättung, um zu schreiben Tippen I m Lazy. but ist es wahrscheinlich schneller zu tun. Die Latenz zwischen avg i und avg i-2 ist dann 1 multiplizieren und ein add, anstatt ein subtrahieren und ein Multiplizieren zwischen avg i und avg i-1 I e mehr als doppelt so schnell . Im Allgemeinen möchten Sie das Rezidiv umschreiben, damit avg i in Bezug auf avg j für j so weit zurück berechnet wird, wie Sie möglicherweise gehen können, ohne die Maschine zu füllen, entweder Ausführungseinheiten oder Register Sie sind grundsätzlich mehr Multiplikatoren insgesamt , Um weniger Ketten von Multiples zu bekommen und subtrahiert auf dem kritischen Pfad Skipping von avg i-2 zu avg i ist einfach, können Sie wahrscheinlich drei und vier Genau das, wie weit hängt davon ab, was Ihre Maschine ist, und wie viele Register Sie haben. Und die Latenz der Gleitkomma-Addierer und Multiplikator Oder besser noch, der Geschmack der kombinierten Multiplikations-Hinzufügung Sie haben - alle modernen Maschinen haben sie E g Wenn die MADD oder MSUB 7 Zyklen lang ist, können Sie bis zu 6 tun Andere Berechnungen in seinem Schatten, auch wenn Sie nur eine einzige Gleitkomma-Einheit haben Vollständig Pipeline und so weiter Weniger, wenn Pipeline alle anderen Zyklus, wie es für doppelte Präzision bei älteren Chips und GPUs üblich ist. Der Assembler-Code sollte Software pipelined, so dass verschiedene Schleife Iterationen überlappen Ein guter Compiler sollte das für dich tun, aber du musst den C-Code umschreiben, um die beste Leistung zu bekommen. Mit der Art, wie ich es nicht vorschlage, dass du ein Array von avg erstellen sollst, dann würdest du zwei brauchen Im Durchschnitt, wenn avg i in Bezug auf avg i-2 berechnet wird, und so weiter Du kannst ein Array von avg verwenden, wenn du willst, aber ich denke, dass du nur noch 2 oder 4 avgs haben musst, kreativ, avg0 und avg1 2, 3, und drehen sie. Diese Art von Trick, Splitting ein Akkumulator oder Durchschnitt in zwei oder mehr, kombiniert mehrere Stufen der Wiederholung, ist in Hochleistungs-Code. Oh, ja vorberechnungsfähig ss, etc. Wenn ich es getan habe Richtig, in unendlicher Präzision wäre das identisch Double check me, please. Jedoch, in endlicher Präzision FP deine Ergebnisse können sich hoffentlich nur wenig unterscheiden, wegen der verschiedenen Rundungen Wenn das Abrollen korrekt ist und die Antworten deutlich anders sind, haben Sie wahrscheinlich ein Numerisch instabiler Algorithmus Du bist derjenige, der es wusste. Note Gleitkomma-Rundungsfehler werden die niedrigen Bits deiner Antwort ändern Beide wegen der Umstellung des Codes und mit MADD denke ich, das ist wohl okay, aber du musst entscheiden. Hinzufügen Sie die Berechnungen Für avg i und avg i-1 sind jetzt unabhängig Also kannst du einen SIMD-Befehlssatz wie Intel SSE2 verwenden, der den Betrieb auf zwei 64-Bit-Werten in einem 128 Bit breiten Register zu einer Zeit erlaubt, die für fast 2X gut sein wird Eine Maschine, die genügend ALU hat. Wenn du genug Register hast, um avg i in Bezug auf avg i-4 umzuschreiben und ich bin sicher, dass du auf iA64 machst, dann kannst du 4x breit gehen, wenn du Zugriff auf eine Maschine wie 256 bit AVX hast. On einer GPU können Sie für tiefer Wiederholungen gehen, umschreiben avg i in Bezug auf avg i-8, und so on. Some GPUs haben Anweisungen, die AX B oder sogar AX BY als eine einzige Anweisung zu berechnen Obwohl das ist häufiger für 32 Bit Als für 64-Bit-Präzision. Irgendwann würde ich wahrscheinlich anfangen zu fragen, dass du das bei mehrfachen Preisen machen willst. Nicht nur das hilft dir bei Multithreading, es wird auch dazu passen, dass es auf einer GPU läuft und breite SIMD benutzt. Minor Late Addition. Ich bin ein bisschen verlegen, nicht auf Horner s Rule auf Ausdrücke wie. slightly effizienter etwas andere Ergebnisse mit Rundung angewendet haben. In meiner Verteidigung sollte jeder anständige Compiler dies für Sie tun. But Hrner s Regel macht die Abhängigkeit Kette Tiefer in Bezug auf Multiplikatoren Sie müssen vielleicht abrollen und Pipeline die Schleife ein paar Mal oder Sie können tun, woher Sie vorberechnung. DEFINITION von Mass Index. A Form der technischen Analyse, die die Reichweite zwischen hohen und niedrigen Aktienkurse über einen Zeitraum untersucht Der Zeit Der von Donald Dorsey in den frühen 1990er Jahren entwickelte Massenindex deutet darauf hin, dass eine Umkehrung des aktuellen Tendenzes wahrscheinlich stattfinden wird, wenn der Bereich über einen bestimmten Punkt hinausragt und sich dann zusammenzieht. Zuerst berechnen Sie die neun-Tage-exponentiell gleitenden Durchschnitt EMA der Bereich zwischen den hohen und niedrigen Preisen für einen Zeitraum von typischerweise 25 Tage Dann teilen Sie diese Figur durch die neun-Tage-exponentiellen gleitenden Durchschnitt der gleitenden Durchschnitt im Zähler Die Gleichung sieht aus wie Diese. Dorsey vermutete, dass, wenn die Figur über 27 springt eine Ausbuchtung und dann fällt unter 26 5, ist die Aktie bereit, Kurs ändern Ein Index von 27 stellt eine ziemlich volatile Lager, so dass einige Händler eine niedrigere Grundlinie bei der Bestimmung der Anwesenheit gesetzt Von einem Preis bulge. Exponential Moving Average - EMA. BREAKING DOWN Exponential Moving Average - EMA. Die 12-und 26-Tage-EMAs sind die beliebtesten kurzfristigen Mittelwerte, und sie werden verwendet, um Indikatoren wie die gleitende durchschnittliche Konvergenz Divergenz MACD zu schaffen Und der prozentuale Preis-Oszillator PPO Im Allgemeinen werden die 50- und 200-Tage-EMAs als Signale von langfristigen Trends verwendet. Trader, die technische Analyse verwenden, finden sich im Durchschnitt sehr nützlich und aufschlussreich, wenn sie ordnungsgemäß angewendet werden, aber schaffen Verwüstung, wenn sie unsachgemäß verwendet werden oder sind Falsch interpretiert Alle gleitenden Durchschnitte, die üblicherweise in der technischen Analyse verwendet werden, sind ihrer Natur nach hintere Indikatoren. Folglich sollten die Schlussfolgerungen, die aus der Anwendung eines gleitenden Durchschnitts auf ein bestimmtes Marktdiagramm gezogen werden, darin bestehen, eine Marktbewegung zu bestätigen oder ihre Stärke anzugeben Die Zeit, in der eine gleitende durchschnittliche Indikatorlinie eine Veränderung vorgenommen hat, um einen bedeutenden Marktzugang zu reflektieren, ist der optimale Punkt des Markteintritts bereits vergangen. Eine EMA dient dazu, dieses Dilemma zu einem gewissen Grad zu lindern. Weil die EMA-Berechnung mehr Gewicht auf das letzte Mal setzt Daten, es umarmt die Preis-Aktion ein bisschen fester und reagiert daher schneller Dies ist wünschenswert, wenn eine EMA verwendet wird, um ein Trading-Eingangssignal ableiten. Die Auslegung der EMA. Like alle gleitenden durchschnittlichen Indikatoren sind sie viel besser geeignet für Trending-Märkte Wenn der Markt Ist in einem starken und anhaltenden Aufwärtstrend die EMA-Indikatorlinie zeigt auch einen Aufwärtstrend und umgekehrt für einen Down-Trend Ein wachsamer Trader wird nicht nur auf die Richtung der EMA-Linie achten, sondern auch die Beziehung der Änderungsrate von einem Bar zum nächsten Zum Beispiel, da die Preiswirkung eines starken Aufwärtstrends beginnt zu glätten und umzukehren, beginnt die Änderungsrate des EMA von einem Bar zum nächsten zu vermindern, bis zu diesem Zeitpunkt die Indikatorlinie flach und die Änderungsrate Ist null. Wegen der nacheilenden Wirkung, bis zu diesem Punkt oder sogar ein paar Takte vorher, sollte sich die Preisaktion bereits umkehren. Daraus folgt, dass die Beobachtung einer konsequenten Abnahme der Änderungsrate der EMA selbst als Indikator verwendet werden könnte Das könnte weiter gegen das Dilemma, das durch die nacheilende Wirkung der bewegten Durchschnitte verursacht wird. Die Verwendung der EMA. EMAs wird häufig in Verbindung mit anderen Indikatoren verwendet, um signifikante Marktbewegungen zu bestätigen und ihre Gültigkeit zu beurteilen. Für Händler, die intraday und schnell bewegte Märkte handeln, EMA ist mehr anwendbar Sehr häufig Händler verwenden EMAs, um eine Handels-Bias zu bestimmen Wenn zum Beispiel eine EMA auf einer Tages-Chart einen starken Aufwärtstrend zeigt, kann eine Intraday-Trader-Strategie nur von der langen Seite auf einem Intraday-Chart handeln.
No comments:
Post a Comment