Friday 10 November 2017

Exponential Moving Average Cuda


Ich habe im Wesentlichen ein Array von Werten wie folgt: Das obige Array ist oversimplified, Im sammeln 1 Wert pro Millisekunde in meinem realen Code und ich muss die Ausgabe auf einem Algorithmus, den ich schrieb, um die nächste Peak vor einem Zeitpunkt zu finden verarbeiten. Meine Logik schlägt fehl, weil in meinem Beispiel oben 0.36 die wahre Spitze ist, aber mein Algorithmus würde rückwärts schauen und sehen die sehr letzte Zahl 0.25 als die Spitze, als theres eine Abnahme zu 0.24 vor ihm. Das Ziel ist, diese Werte zu nehmen und einen Algorithmus auf sie, die glätten sie ein wenig, so dass ich mehr lineare Werte. (Dh: Id wie meine Ergebnisse curvy, nicht jaggedy) Ive wurde gesagt, um einen exponentiellen gleitenden durchschnittlichen Filter auf meine Werte anzuwenden. Wie kann ich dies tun Es ist wirklich schwer für mich, mathematische Gleichungen zu lesen, gehe ich viel besser mit Code. Wie verarbeite ich Werte in meinem Array, die Anwendung einer exponentiellen gleitenden Durchschnittsberechnung, um sie herauszufordern, um einen exponentiellen gleitenden Durchschnitt zu berechnen. Müssen Sie einige Zustand zu halten und Sie benötigen einen Tuning-Parameter. Dies erfordert eine kleine Klasse (vorausgesetzt, Sie verwenden Java 5 oder höher): Instantiate mit dem Decay-Parameter, die Sie wollen (kann Abstimmung sollte zwischen 0 und 1) und dann mit Average () zu filtern. Beim Lesen einer Seite auf einige mathematische Rekursion, alles, was Sie wirklich wissen müssen, wenn Sie es in Code ist, dass Mathematiker gerne Indizes in Arrays und Sequenzen mit Indizes schreiben. (Theyve einige andere Anmerkungen außerdem, die nicht helfen.) Jedoch ist die EMA ziemlich einfach, da Sie nur an einen alten Wert erinnern müssen, der keine komplizierten Zustandarrays erfordert. Beantwortet Feb 8 12 at 20:42 TKKocheran: Ziemlich viel. Isn39t es schön, wenn die Dinge einfach sein können (Wenn Sie mit einer neuen Sequenz beginnen, erhalten Sie einen neuen Mittelwert.) Beachten Sie, dass die ersten paar Begriffe in der durchschnittlichen Sequenz wird ein bisschen durch Randeffekte springen, aber Sie erhalten die mit anderen gleitenden Durchschnitten auch. Allerdings ist ein guter Vorteil, dass Sie die gleitende durchschnittliche Logik in die Mittelung einwickeln und experimentieren können, ohne den Rest des Programms zu viel zu stören. Ndash Donal Fellows Ich habe eine harte Zeit, Ihre Fragen zu verstehen, aber ich werde versuchen, trotzdem zu beantworten. 1) Wenn Ihr Algorithmus 0,25 statt 0,36 gefunden hat, dann ist es falsch. Es ist falsch, weil es eine monotone Zunahme oder Abnahme (das ist immer nach oben oder immer nach unten). Wenn Sie ALLE Ihre Daten nicht klassifizieren, sind Ihre Datenpunkte - wie Sie sie darstellen - nichtlinear. Wenn Sie wirklich den maximalen Wert zwischen zwei Zeitpunkten finden wollen, dann schneiden Sie Ihr Array von tmin zu tmax und finden Sie das Maximum dieses Unterarrays. 2) Nun ist das Konzept der gleitenden Durchschnitte sehr einfach: vorstellen, dass ich die folgende Liste haben: 1.4, 1.5, 1.4, 1.5, 1.5. Ich kann es glätten, indem ich den Durchschnitt von zwei Zahlen: 1.45, 1.45, 1.45, 1.5. Beachten Sie, dass die erste Zahl ist der Durchschnitt von 1,5 und 1,4 (zweite und erste Zahlen) die zweite (neue Liste) ist der Durchschnitt von 1,4 und 1,5 (dritte und zweite alte Liste) die dritte (neue Liste) der Durchschnitt von 1,5 und 1,4 (Vierte und dritte), und so weiter. Ich könnte es Zeitraum drei oder vier gemacht haben, oder n. Beachten Sie, wie die Daten viel glatter sind. Ein guter Weg, um zu sehen, gleitende Durchschnitte bei der Arbeit ist, gehen Sie zu Google Finance, wählen Sie eine Aktie (versuchen Tesla Motors ziemlich volatil (TSLA)) und klicken Sie auf Technische Daten am unteren Rand des Diagramms. Wählen Sie Moving Average mit einer bestimmten Periode und Exponential gleitenden Durchschnitt, um ihre Differenzen zu vergleichen. Exponentielle gleitende Durchschnitt ist nur eine weitere Ausarbeitung dieser, aber Gewichte die älteren Daten weniger als die neuen Daten ist dies ein Weg, um die Glättung nach hinten auszugleichen. Bitte lesen Sie den Wikipedia-Eintrag. Also, dies ist eher ein Kommentar als eine Antwort, aber die kleine Kommentar-Box war nur zu klein. Viel Glück. Wenn Sie Probleme mit der Mathematik haben, könnten Sie mit einem einfachen gleitenden Durchschnitt statt exponentiell gehen. Also die Ausgabe erhalten Sie die letzten x-Terme durch x geteilt werden. Ungetestetes Pseudocode: Beachten Sie, dass Sie die Anfangs - und Endteile der Daten behandeln müssen, da deutlich, dass Sie die letzten 5 Ausdrücke nicht durchschnittlich sind, wenn Sie auf Ihrem 2. Datenpunkt sind. Außerdem gibt es effizientere Methoden, diesen gleitenden Durchschnitt (sum sum - älteste neueste) zu berechnen, aber dies ist, um das Konzept von dem, was passiert, zu bekommen. Antwort # 2 am: Mai 19, 2010, 07:03:13 pm »Für einen anderen Ansatz können Sie trunkieren die exponentielle gleitende durchschnittliche Fenster und dann berechnen Sie Ihre gefilterten Signal, indem Sie eine Faltung zwischen Ihrem Signal und der Fenster-Exponential. Die Faltung kann mit Hilfe der freien CUDA-FFT-Bibliothek (cuFFT) berechnet werden, da, wie Sie vielleicht wissen, die Faltung als punktweise Multiplikation der beiden Signale in der Fourier-Domäne ausgedrückt werden kann (Dies ist der treffende Name Faltungstheorem, Die mit einer Komplexität von O (n log (n)) verläuft). Diese Art von Ansatz wird Ihre CUDA-Kernel-Code zu minimieren und laufen sehr sehr schnell, auch auf einer GeForce 570 Besonders, wenn Sie alle Ihre Berechnungen in Single (float) Präzision zu tun. Ich würde vorschlagen, die oben genannten Differenz-Gleichung zu manipulieren, wie unten angegeben und dann mit CUDA Thrust primitives. DIFFERENCE GLEICHSTELLUNG MANIPULATION - EXPLIZIT FORM DER DIFFERENZGLEICHUNG Durch einfache Algebra können Sie folgendes finden: Dementsprechend ist die explizite Form die folgende: CUDA THRUST IMPLEMENTATION Sie können das obige explizite Formular durch die folgenden Schritte implementieren: Initialisieren einer Eingabesequenz dinput to Alpha mit Ausnahme von dinput0 1. Definiere einen Vektor d1overbetatothen gleich 1, 1 / beta, 1 / beta2, 1 / beta3. Multiplizieren Sie elementweise dinput durch d1overbetatothen Führen Sie eine inclusivescan, um die Sequenz des yn / betan zu erhalten Teilen Sie die obige Sequenz durch 1, 1 / beta, 1 / beta2, 1 / beta3. Der obige Ansatz kann für Linear Time-Varying (LTV) - Systeme empfohlen werden. Für lineare zeitinvariante (LTI) Systeme kann der von Paul erwähnte FFT-Ansatz empfohlen werden. Ich biete ein Beispiel für diesen Ansatz durch die Verwendung von CUDA Thrust und cuFFT in meiner Antwort auf FIR - Filter in CUDA. Stock Überblick: Moving Average Check auf Barracuda Networks Inc (CUDA) 14. Dezember 2016 Herald Mitarbeiter Verengung auf die gleitenden Durchschnitte für Barracuda Networks Inc (CUDA), die 200-Tage ist bei 19,52, die 50-Tage sind 23,63 und die 7-Tage ruhen bei 22,96. Gleitende Durchschnittsindikatoren sind beliebte Werkzeuge für die Aktienanalyse. Viele Händler werden eine Kombination von gleitenden Durchschnitten mit verschiedenen Zeitrahmen verwenden, um zu überprüfen, Aktien Trendrichtung. Eine der populäreren Kombinationen ist, den 50-Tage - und 200-Tage-gleitenden Durchschnitt zu verwenden. Investoren können die 200-Tage-MA verwenden, um zu helfen, glätten Sie die Daten und erhalten Sie ein klareres langfristiges Bild. Sie können auf die 50-Tage oder 20-Tage, um ein besseres Verständnis von dem, was los ist mit dem Bestand in der kurzfristigen Blick. Einige Händler können die Williams Percent Range oder Williams R als eine nützliche technische Indikator zu finden. Derzeit ist Barracuda Networks Inc (CUDA) 8217s Williams Percent Range oder 14 Tage Williams R ruht bei -33,43. Die Werte können zwischen 0 und -100 liegen. Eine Lesung zwischen -80 bis -100 kann typischerweise als starkes überverkauftes Gebiet angesehen werden. Ein Wert zwischen 0 und -20 würde einen starken überkauften Zustand darstellen. Als Impulsindikator kann der Williams R mit anderen Techniken verwendet werden, um einen bestimmten Trend zu definieren. Bei Abschluss der Aktienanalyse können sich Investoren und Händler entscheiden, andere technische Ebenen zu überprüfen. Barracuda Networks Inc (CUDA) verfügt derzeit über einen 14-tägigen Commodity Channel Index (CCI) von 3,73. Anleger und Händler können diesen Indikator verwenden, um zu helfen, Preisumkehrungen, Preis-Extreme und die Stärke eines Trends zu erkennen. Viele Investoren werden die CCI in Verbindung mit anderen Indikatoren bei der Bewertung eines Handels nutzen. Die CCI kann verwendet werden, um zu erkennen, ob ein Bestand in überkauften (100) und überverkauften (-100) Gebieten eintritt. Der Average Directional Index oder ADX wird oft als ein wichtiges Instrument für den technischen Handel oder die Investition betrachtet. Der ADX ist ein technischer Indikator, der von J. Welles Wilder entwickelt wurde, um die Stärke eines Trends zu bestimmen. Der ADX wird häufig zusammen mit dem Plus Directional Indicator (DI) und Minus Directional Indicator (-DI) verwendet, um die Richtung des Trends zu identifizieren. Derzeit ruht der 14-tägige ADX für Barracuda Networks Inc (CUDA) bei 29,44. Allgemein gesprochen würde ein ADX-Wert von 0-25 einen fehlenden oder schwachen Trend anzeigen. Ein Wert von 25-50 würde einen starken Trend angeben. Ein Wert von 50-75 würde einen sehr starken Trend signalisieren, und ein Wert von 75-100 würde einen extrem starken Trend anzeigen. Händler können auch auf die RSI-Werte auf Aktien von Barracuda Networks Inc (CUDA) genau achten. Der aktuelle 14-Tage-RSI liegt derzeit bei 48,24, der 7-Tage-Kurs liegt bei 50,71 und der 3-Tage-Kurs bei56,96. Der RSI oder Relative Strength Index ist ein populärer oszillierender Indikator unter den Händlern und Investoren. Der RSI arbeitet in einem bereichsgebundenen Bereich mit Werten zwischen 0 und 100. Wenn sich die RSI-Leitung nach oben bewegt, kann es zu einer Festigkeit kommen. Das Gegenteil ist der Fall, wenn die RSI-Leitung niedriger liegt. Bei Verwendung der RSI-Anzeige können unterschiedliche Zeiträume verwendet werden. Der RSI kann mit einer kürzeren Zeitspanne volatiler sein. Viele Händler halten ein Auge auf die 30 und 70 Markierungen auf der RSI Skala. Eine Bewegung über 70 wird allgemein betrachtet, um den Vorrat als überkauft zu zeigen, und eine Bewegung unter 30 würde anzeigen, daß der Vorrat überverkauft werden kann. Händler können diese Ebenen verwenden, um zu identifizieren Aktienkurs Umkehrungen. Hinterlasse einen Kommentar Antworten abbrechen

No comments:

Post a Comment