Tuesday 21 November 2017

Moving Average Embedded


Wie andere schon erwähnt haben, sollten Sie einen IIR (Endlosimpulsantwort) - Filter anstelle des FIR (Finite Impulse Response) Filter, den Sie jetzt verwenden. Es gibt mehr dazu, aber auf den ersten Blick werden FIR-Filter als explizite Windungen und IIR-Filter mit Gleichungen implementiert. Das besondere IIR-Filter, das ich viel in Mikrocontrollern verwende, ist ein einpoliges Tiefpaßfilter. Dies ist das digitale Äquivalent eines einfachen R-C-Analogfilters. Für die meisten Anwendungen haben diese bessere Eigenschaften als der Kastenfilter, den Sie verwenden. Die meisten Verwendungen eines Box-Filter, die ich begegnet bin, sind ein Ergebnis von jemand nicht Aufmerksamkeit in der digitalen Signalverarbeitung Klasse, nicht als Ergebnis der Notwendigkeit ihrer besonderen Eigenschaften. Wenn Sie nur wollen, um hohe Frequenzen zu dämpfen, dass Sie wissen, Rauschen sind, ist ein einpoliges Tiefpassfilter besser. Der beste Weg, um ein digitales in einem Mikrocontroller zu implementieren, ist in der Regel: FILT lt - FILT FF (NEW - FILT) FILT ist ein Stück persistenten Zustand. Dies ist die einzige persistente Variable, die Sie benötigen, um diesen Filter zu berechnen. NEU ist der neue Wert, den der Filter mit dieser Iteration aktualisiert. FF ist die Filterfraktion. Die die Schwere des Filters einstellt. Betrachten Sie diesen Algorithmus und sehen Sie, dass für FF 0 der Filter unendlich schwer ist, da sich der Ausgang nie ändert. Für FF 1 ist das eigentlich gar kein Filter, da der Ausgang nur dem Eingang folgt. Nützliche Werte sind dazwischen. Bei kleinen Systemen wählen Sie FF auf 1/2 N, so dass die Multiplikation mit FF als Rechtsverschiebung um N Bits erreicht werden kann. Beispielsweise kann FF 1/16 betragen und das Multiplizieren mit FF daher eine Rechtsverschiebung von 4 Bits. Andernfalls benötigt dieses Filter nur eine Subtraktion und eine Addition, obwohl die Zahlen in der Regel größer als der Eingangswert sein müssen (mehr über die numerische Genauigkeit in einem separaten Abschnitt weiter unten). Ich normalerweise nehmen A / D-Messwerte deutlich schneller als sie benötigt werden und wenden Sie zwei dieser Filter kaskadiert. Dies ist das digitale Äquivalent von zwei R-C-Filtern in Serie und dämpft um 12 dB / Oktave über der Rolloff-Frequenz. Für A / D-Messungen ist es jedoch gewöhnlich relevanter, den Filter im Zeitbereich zu betrachten, indem er seine Sprungantwort betrachtet. Dies zeigt Ihnen, wie schnell Ihr System eine Änderung sehen wird, wenn die Sache, die Sie messen, ändert. Zur Erleichterung der Gestaltung dieser Filter (was nur bedeutet Kommissionierung FF und entscheiden, wie viele von ihnen zu kaskadieren), benutze ich mein Programm FILTBITS. Sie legen die Anzahl der Schaltbits für jede FF in der kaskadierten Filterreihe fest und berechnen die Schrittantwort und andere Werte. Eigentlich habe ich in der Regel laufen diese über mein Wrapper-Skript PLOTFILT. Dies führt FILTBITS, die eine CSV-Datei macht, dann die CSV-Datei. Beispielsweise ist hier das Ergebnis von PLOTFILT 4 4: Die beiden Parameter zu PLOTFILT bedeuten, dass es zwei Filter gibt, die von dem oben beschriebenen Typ kaskadiert sind. Die Werte von 4 geben die Anzahl der Schaltbits an, um die Multiplikation mit FF zu realisieren. Die beiden FF-Werte sind in diesem Fall 1/16. Die rote Spur ist die Einheit Schritt Antwort, und ist die Hauptsache zu betrachten. Dies bedeutet beispielsweise, dass sich der Ausgang des kombinierten Filters auf 90 des neuen Wertes in 60 Iterationen niederschlägt, falls sich der Eingang sofort ändert. Wenn Sie ca. 95 Einschwingzeit kümmern, dann müssen Sie ca. 73 Iterationen warten, und für 50 Einschwingzeit nur 26 Iterationen. Die grüne Kurve zeigt Ihnen den Ausgang einer einzelnen Amplitude. Dies gibt Ihnen eine Vorstellung von der zufälligen Rauschunterdrückung. Es sieht aus wie keine einzelne Probe wird mehr als eine 2,5 Änderung in der Ausgabe verursachen. Die blaue Spur soll ein subjektives Gefühl geben, was dieser Filter mit weißem Rauschen macht. Dies ist kein strenger Test, da es keine Garantie gibt, was genau der Inhalt der Zufallszahlen war, die als der weiße Rauscheneingang für diesen Durchlauf von PLOTFILT ausgewählt wurden. Seine nur, um Ihnen ein grobes Gefühl, wie viel es gequetscht werden und wie glatt es ist. PLOTFILT, vielleicht FILTBITS, und viele andere nützliche Dinge, vor allem für PIC-Firmware-Entwicklung ist verfügbar in der PIC Development Tools-Software-Release auf meiner Software-Downloads-Seite. Hinzugefügt über numerische Genauigkeit Ich sehe aus den Kommentaren und nun eine neue Antwort, dass es Interesse an der Diskussion der Anzahl der Bits benötigt, um diesen Filter zu implementieren. Beachten Sie, dass das Multiplizieren mit FF Log 2 (FF) neue Bits unterhalb des Binärpunkts erzeugt. Bei kleinen Systemen wird FF gewöhnlich mit 1/2 N gewählt, so daß diese Multiplikation tatsächlich durch eine Rechtsverschiebung von N Bits realisiert wird. FILT ist daher meist eine feste Ganzzahl. Beachten Sie, dass dies ändert keine der Mathematik aus der Prozessoren Sicht. Wenn Sie beispielsweise 10-Bit A / D-Messwerte und N 4 (FF 1/16) filtern, benötigen Sie 4 Fraktionsbits unter den 10-Bit-Integer-A / D-Messwerten. Einer der meisten Prozessoren, youd tun 16-Bit-Integer-Operationen aufgrund der 10-Bit-A / D-Lesungen. In diesem Fall können Sie immer noch genau die gleichen 16-Bit-Integer-Opertions, aber beginnen mit der A / D-Lesungen um 4 Bits verschoben verschoben. Der Prozessor kennt den Unterschied nicht und muss nicht. Das Durchführen der Mathematik auf ganzen 16-Bit-Ganzzahlen funktioniert, ob Sie sie als 12,4 feste oder wahre 16-Bit-Ganzzahlen (16,0 Fixpunkt) betrachten. Im Allgemeinen müssen Sie jedem Filterpole N Bits hinzufügen, wenn Sie aufgrund der numerischen Darstellung kein Rauschen hinzufügen möchten. Im obigen Beispiel müsste das zweite Filter von zwei 1044 18 Bits haben, um keine Informationen zu verlieren. In der Praxis auf einer 8-Bit-Maschine bedeutet, dass youd 24-Bit-Werte verwenden. Technisch nur den zweiten Pol von zwei würde den größeren Wert benötigen, aber für Firmware Einfachheit ich in der Regel die gleiche Darstellung, und damit der gleiche Code, für alle Pole eines Filters. Normalerweise schreibe ich eine Unterroutine oder Makro, um eine Filterpol-Operation durchzuführen, dann gelten, dass für jeden Pol. Ob eine Unterroutine oder ein Makro davon abhängt, ob Zyklen oder Programmspeicher in diesem Projekt wichtiger sind. So oder so, ich benutze einige Scratch-Zustand, um NEU in die Subroutine / Makro, die FILT Updates, sondern auch lädt, dass in den gleichen Kratzer NEU war in. Dies macht es einfach, mehrere Pole anzuwenden, da die aktualisierte FILT von einem Pol ist Die NEUE der nächsten. Wenn ein Unterprogramm, ist es sinnvoll, einen Zeiger auf FILT auf dem Weg in, die auf nur nach FILT auf dem Weg nach draußen aktualisiert wird. Auf diese Weise arbeitet das Unterprogramm automatisch auf aufeinanderfolgenden Filtern im Speicher, wenn es mehrmals aufgerufen wird. Mit einem Makro benötigen Sie nicht einen Zeiger, da Sie in der Adresse passieren, um auf jeder Iteration zu arbeiten. Code-Beispiele Hier ist ein Beispiel für ein Makro wie oben für eine PIC 18 beschrieben: Und hier ist ein ähnliches Makro für eine PIC 24 oder dsPIC 30 oder 33: Beide Beispiele sind als Makros mit meinem PIC-Assembler-Präprozessor implementiert. Die mehr fähig ist als eine der eingebauten Makroanlagen. Clabacchio: Ein weiteres Thema, das ich erwähnen sollte, ist die Firmware-Implementierung. Sie können eine einpolige Tiefpassfilter-Subroutine einmal schreiben und dann mehrmals anwenden. Tatsächlich schreibe ich normalerweise solch ein Unterprogramm, um einen Zeiger im Gedächtnis in den Filterzustand zu nehmen, dann ihn voranbringen den Zeiger, so daß er nacheinander leicht aufgerufen werden kann, um mehrpolige Filter zu verwirklichen. Ndash Olin Lathrop Apr 20 12 at 15:03 1. Dank sehr viel für Ihre Antworten - alle von ihnen. Ich beschloss, dieses IIR-Filter zu verwenden, aber dieser Filter wird nicht als Standard-Tiefpaßfilter verwendet, da ich die Zählerwerte berechnen und sie vergleichen muss, um Änderungen in einem bestimmten Bereich zu erkennen. Da diese Werte von sehr unterschiedlichen Dimensionen abhängig von Hardware Ich wollte einen Durchschnitt nehmen, um in der Lage sein, auf diese Hardware spezifischen Änderungen automatisch reagieren. Wenn Sie mit der Beschränkung einer Macht von zwei Anzahl von Elementen zu durchschnittlich leben können (dh 2,4,8,16,32 etc), dann kann die Teilung einfach und effizient auf einem getan werden Low-Performance-Mikro ohne dedizierte Division, weil es als Bit-Shift durchgeführt werden kann. Jede Schicht rechts ist eine Macht von zwei zB: Der OP dachte, er hatte zwei Probleme, die Teilung in einem PIC16 und Speicher für seinen Ringpuffer. Diese Antwort zeigt, dass die Teilung nicht schwierig ist. Zwar adressiert es nicht das Gedächtnisproblem, aber das SE-System erlaubt Teilantworten, und Benutzer können etwas von jeder Antwort für selbst nehmen, oder sogar redigieren und kombinieren andere39s Antworten. Da einige der anderen Antworten eine Divisionsoperation erfordern, sind sie ähnlich unvollständig, da sie nicht zeigen, wie dies auf einem PIC16 effizient erreicht werden kann. Ndash Martin Apr 20 12 at 13:01 Es gibt eine Antwort für einen echten gleitenden Durchschnitt Filter (auch bekannt als Boxcar-Filter) mit weniger Speicher Anforderungen, wenn Sie dont mind Downsampling. Es heißt ein kaskadiertes Integrator-Kamm-Filter (CIC). Die Idee ist, dass Sie einen Integrator, die Sie nehmen Differenzen über einen Zeitraum, und die wichtigsten Speicher-sparende Gerät ist, dass durch Downsampling, müssen Sie nicht jeden Wert des Integrators zu speichern. Es kann mit dem folgenden Pseudocode implementiert werden: Ihre effektive gleitende durchschnittliche Länge ist decimationFactorstatesize, aber Sie müssen nur um Stateize Proben zu halten. Offensichtlich können Sie bessere Leistung erzielen, wenn Ihr stateize und decimationFactor Potenzen von 2 sind, so dass die Divisions - und Restoperatoren durch Shifts und Masken ersetzt werden. Postscript: Ich stimme mit Olin, dass Sie sollten immer erwägen, einfache IIR-Filter vor einem gleitenden durchschnittlichen Filter. Wenn Sie die Frequenz-Nullen eines Boxcar-Filters nicht benötigen, wird ein 1-poliger oder 2-poliger Tiefpassfilter wahrscheinlich gut funktionieren. Auf der anderen Seite, wenn Sie für die Zwecke der Dezimierung filtern (mit einer hohen Sample-Rate-Eingang und Mittelung es für die Verwendung durch einen Low-Rate-Prozess), dann kann ein CIC-Filter genau das, was Sie suchen. (Vor allem, wenn Sie stateize1 verwenden und den Ringbuffer insgesamt mit nur einem einzigen vorherigen Integrator-Wert zu vermeiden) Theres einige eingehende Analyse der Mathematik hinter der Verwendung der ersten Ordnung IIR-Filter, Olin Lathrop bereits beschrieben hat auf der Digital Signal Processing Stack-Austausch (Enthält viele schöne Bilder.) Die Gleichung für diese IIR-Filter ist: Dies kann mit nur Ganzzahlen und keine Division mit dem folgenden Code implementiert werden (möglicherweise benötigen einige Debugging, wie ich aus dem Speicher wurde.) Dieser Filter approximiert einen gleitenden Durchschnitt von Die letzten K Proben durch Einstellen des Wertes von alpha auf 1 / K. Führen Sie dies im vorherigen Code durch die Definition von BITS auf LOG2 (K), dh für K 16 gesetzt BITS auf 4, für K 4 gesetzt BITS auf 2, etc. (Ill Überprüfung der Code hier aufgelistet, sobald ich eine Änderung und Bearbeiten Sie diese Antwort, wenn nötig.) Antwort # 1 am: Juni 23, 2010, um 4:04 Uhr Heres ein einpoliges Tiefpassfilter (gleitender Durchschnitt, mit Cutoff-Frequenz CutoffFrequency). Sehr einfach, sehr schnell, funktioniert super, und fast kein Speicher Overhead. Hinweis: Alle Variablen haben einen Bereich über die Filterfunktion hinaus, mit Ausnahme des übergebenen newInput Hinweis: Dies ist ein einstufiger Filter. Mehrere Stufen können zusammen kaskadiert werden, um die Schärfe des Filters zu erhöhen. Wenn Sie mehr als eine Stufe verwenden, müssen Sie DecayFactor anpassen (was die Cutoff-Frequenz betrifft), um sie zu kompensieren. Und natürlich alles, was Sie brauchen, ist die beiden Zeilen überall platziert, brauchen sie nicht ihre eigene Funktion. Dieser Filter hat eine Rampenzeit, bevor der gleitende Durchschnitt diejenige des Eingangssignals darstellt. Wenn Sie diese Rampenzeit umgehen müssen, können Sie MovingAverage einfach auf den ersten Wert von newInput anstelle von 0 initialisieren und hoffen, dass der erste newInput kein Ausreißer ist. (CutoffFrequency / SampleRate) einen Bereich zwischen 0 und 0,5 aufweist. DecayFactor ist ein Wert zwischen 0 und 1, in der Regel in der Nähe von 1. Single-precision Schwimmer sind gut genug für die meisten Dinge, ich bevorzuge nur Doppel. Wenn Sie mit ganzen Zahlen bleiben müssen, können Sie DecayFactor und Amplitude Factor in Fractional Integers umwandeln, in denen der Zähler als Integer gespeichert wird und der Nenner eine Ganzzahl von 2 ist (so können Sie Bit-Shift nach rechts als die Nenner, anstatt sich während der Filterschleife teilen zu müssen). Zum Beispiel, wenn DecayFactor 0.99, und Sie Ganzzahlen verwenden möchten, können Sie DecayFactor 0.99 65536 64881. Und dann immer wenn Sie multiplizieren mit DecayFactor in Ihrer Filterschleife, nur verschieben Sie das Ergebnis 16. Für weitere Informationen über dieses, ein ausgezeichnetes Buch thats Online, Kapitel 19 auf rekursive Filter: dspguide / ch19.htm PS Für das Moving Average-Paradigma, einen anderen Ansatz für die Einstellung DecayFactor und AmplitudeFactor, die möglicherweise mehr relevant für Ihre Bedürfnisse, können Sie sagen, dass Sie wollen, dass die vorherigen, etwa 6 Artikeln gemittelt, es diskret tun, fügen Sie 6 Elemente und teilen durch 6, so Können Sie den AmplitudeFactor auf 1/6 und DecayFactor auf (1.0 - AmplitudeFactor) einstellen. Antwortete May 14 12 at 22:55 Jeder andere hat kommentiert gründlich über den Nutzen der IIR vs FIR, und auf Power-of-two-Division. Id nur, um einige Implementierungsdetails zu geben. Das untenstehende funktioniert gut auf kleinen Mikrocontrollern ohne FPU. Es gibt keine Multiplikation, und wenn Sie N eine Potenz von zwei halten, ist die gesamte Division ein-Zyklus-Bit-Verschiebung. Basic FIR-Ringpuffer: Halten Sie einen laufenden Puffer der letzten N-Werte und einen laufenden SUM aller Werte im Puffer. Jedes Mal, wenn eine neue Probe kommt, subtrahieren Sie den ältesten Wert im Puffer von SUM, ersetzen Sie ihn durch das neue Sample, fügen Sie das neue SUM zu SUM hinzu und geben Sie SUM / N aus. Modifizierter IIR-Ringpuffer: Halten Sie einen laufenden SUM der letzten N-Werte. Jedes Mal, wenn ein neues Sample eingeht, SUM - SUM / N, fügen Sie das neue Sample hinzu und geben SUM / N aus. Antwort # 1 am: August 28, 2008, um 13:45 Uhr Wenn Sie 399m lesen Sie Recht, you39re beschreiben ein erster Ordnung IIR-Filter der Wert you39re subtrahieren isn39t der älteste Wert, der herausfällt, sondern ist stattdessen der Durchschnitt der vorherigen Werte. Erstklassige IIR-Filter können sicherlich nützlich sein, aber I39m nicht sicher, was du meinst, wenn Sie vorschlagen, dass der Ausgang ist der gleiche für alle periodischen Signale. Bei einer Abtastrate von 10 kHz liefert das Einspeisen einer 100 Hz-Rechteckwelle in ein 20-stufiges Kastenfilter ein Signal, das für 20 Abtastungen gleichmäßig ansteigt, für 30 sitzt, für 20 Abtastungen gleichmäßig sinkt und für 30 sitzt. Ein erster Ordnung IIR-Filter. Ndash Supercat Aug 28 13 am 15:31 wird eine Welle, die scharf anfängt zu steigen und allmählich Niveaus in der Nähe (aber nicht auf) das Eingabe-Maximum, dann scharf beginnt zu fallen und allmählich in der Nähe (aber nicht auf) der Eingabe Minimum. Sehr unterschiedliches Verhalten. Ndash Supercat Ein Problem ist, dass ein einfacher gleitender Durchschnitt kann oder auch nicht nützlich sein. Mit einem IIR-Filter können Sie einen schönen Filter mit relativ wenigen Calcs erhalten. Die FIR Sie beschreiben kann Ihnen nur ein Rechteck in der Zeit - ein sinc in freq - und Sie können nicht die Seitenkeulen zu verwalten. Es kann lohnt sich, in ein paar ganzzahlige Multiplikatoren zu werfen, um es eine schöne symmetrische abstimmbare FIR, wenn Sie die Zeitschaltuhren ersparen können. Ndash ScottSeidman: Keine Notwendigkeit für Multiplikatoren, wenn man einfach jede Stufe der FIR entweder den Durchschnitt der Eingabe auf diese Stufe und ihre vorherigen gespeicherten Wert, und dann speichern Sie die Eingabe (wenn man hat Der numerische Bereich, man könnte die Summe anstatt den Durchschnitt verwenden). Ob das besser ist als ein Box-Filter, hängt von der Anwendung ab (die Sprungantwort eines Boxfilters mit einer Gesamtverzögerung von 1ms wird zum Beispiel eine böse d2 / dt-Spitze aufweisen, wenn der Eingang geändert wird, und wieder 1ms später, wird aber haben Die minimal mögliche d / dt für einen Filter mit einer Gesamtverzögerung von 1ms). Ndash supercat Wie mikeselectricstuff sagte, wenn Sie wirklich brauchen, um Ihren Speicherbedarf zu reduzieren, und Sie dont dagegen Ihre Impulsantwort ist eine exponentielle (anstelle eines rechteckigen Puls), würde ich für einen exponentiellen gleitenden durchschnittlichen Filter gehen . Ich nutze sie ausgiebig. Mit dieser Art von Filter, brauchen Sie nicht jeden Puffer. Sie brauchen nicht zu speichern N Vergangenheit Proben. Nur einer. So werden Ihre Speicheranforderungen um einen Faktor von N reduziert. Auch brauchen Sie keine Division für das. Nur Multiplikationen. Wenn Sie Zugriff auf Gleitpunktarithmetik haben, verwenden Sie Fließkomma-Multiplikationen. Andernfalls können ganzzahlige Multiplikationen und Verschiebungen nach rechts erfolgen. Allerdings sind wir im Jahr 2012, und ich würde Ihnen empfehlen, Compiler (und MCUs), mit denen Sie mit Gleitkommazahlen arbeiten können. Abgesehen davon, dass mehr Speicher effizienter und schneller (Sie dont haben, um Elemente in jedem kreisförmigen Puffer zu aktualisieren), würde ich sagen, es ist auch natürlich. Weil eine exponentielle Impulsantwort besser auf die Art und Weise reagiert, wie sich die Natur verhält, in den meisten Fällen. Ein Problem mit dem IIR-Filter fast berührt von Olin und Supercat, aber anscheinend von anderen ignoriert ist, dass die Rundung nach unten führt einige Ungenauigkeiten (und möglicherweise Bias / Trunkierung). Unter der Annahme, dass N eine Potenz von zwei ist und nur ganzzahlige Arithmetik verwendet wird, beseitigt das Shift-Recht systematisch die LSBs des neuen Samples. Das bedeutet, dass, wie lange die Serie jemals sein könnte, wird der Durchschnitt nie berücksichtigen. Nehmen wir z. B. eine langsam abnehmende Reihe (8,8,8,8,7,7,7,7,6,6) an und nehmen an, daß der Durchschnitt tatsächlich 8 ist. Die Faust 7 Probe bringt den Durchschnitt auf 7, unabhängig von der Filterstärke. Nur für eine Probe. Gleiche Geschichte für 6, usw. Jetzt denke an das Gegenteil. Die serie geht auf. Der Durchschnitt bleibt auf 7 für immer, bis die Probe groß genug ist, um es zu ändern. Natürlich können Sie für die Bias korrigieren, indem Sie 1 / 2N / 2, aber das nicht wirklich lösen, die Präzision Problem. In diesem Fall wird die abnehmende Reihe für immer bei 8 bleiben, bis die Probe 8-1 / 2 (N / 2) ist. Für N4 zum Beispiel, wird jede Probe über Null halten den Durchschnitt unverändert. Ich glaube, eine Lösung für das implizieren würde, um einen Akkumulator der verlorenen LSBs halten. Aber ich habe es nicht weit genug, um Code bereit, und Im nicht sicher, es würde nicht schaden, die IIR Macht in einigen anderen Fällen der Serie (zum Beispiel, ob 7,9,7,9 würde durchschnittlich 8 dann). Olin, Ihre zweistufige Kaskade würde auch eine Erklärung brauchen. Halten Sie zwei durchschnittliche Werte mit dem Ergebnis der ersten in die zweite in jeder Iteration eingezogen halten. Was ist der Nutzen dieses MetaTrader 4 - Beispiele Die Geheimnisse des MetaTrader 4 Client Terminal: Indikatoren Die Analyse der Finanzmärkte ohne technische Indikatoren kann man sich derzeit nicht vorstellen. Sie können eigene Indikatoren erstellen oder die eingebetteten verwenden. Die eingebetteten Indikatoren arbeiten schneller als die benutzerdefinierten und verfügen über eine Reihe von Funktionen, die nicht in benutzerdefinierten Indikatoren implementiert werden können. Zum Beispiel gibt es Indikatoren, die sowohl im Hauptfenster als auch in einem Unterfenster an ein Diagramm angehängt werden können. Außerdem kann der Indikator nicht auf den Preis - und / oder Volumenwerten berechnet werden, sondern auf den Werten eines anderen Indikators. Clever Einsatz der eingebetteten Indikatoren wird dazu beitragen, weit zu gehen, ohne Tauchen in die Programmierung der eigenen. Es gibt dreißig eingebettete Indikatoren im MetaTrader 4 Client Terminal. Bedingt können alle Indikatoren in vier Gruppen aufgeteilt werden: Oszillatoren Trendindikatoren Bill Williams Indikatoren Volumen. Trendindikatoren helfen, Preisbewegungen in einer Richtung zuzuordnen und erkennen, synchron oder verzögert, die Momente, wenn Trends drehen. Oszillatoren können solche Windungen synchron oder im voraus erkennen. Bill Williams Indikatoren haben Eigenschaften von Oszillatoren und Trendindikatoren. Volumes analysieren nicht die Preisbewegungen, wie sie sind, aber die Menge der Zecken, die Einkommen während der Bar haben. Übersichtstabelle für eingebettete Indikatoren Merkmale Über die Verknüpfungen in der Tabelle können Sie die Codequelle eines benutzerdefinierten Indikators anzeigen, der mit dem eingebetteten übereinstimmt. Tabellenfeldbeschreibungen o Oszillator t Trendanzeiger b Bill Williams-Anzeige v Lautstärke. S-Indikator in einem Unterfenster angefügt ist, wird standardmäßig der m-Indikator im Hauptfenster standardmäßig angehängt. Vereinigung mit s / m. Unabhängig davon, ob die Anzeige mit dem in einem Unterfenster oder in dem Hauptfenster (m) bereits vorhandenen Indikator assoziiert ist oder nicht. Zusätzliche Zeilen. Zusätzliche Zeilen, vorherige Indikatoren Daten und erste Indikatoren Daten erscheinen im Feld Übernehmen auf im Fenster Eigenschaften der Indikatoren, wenn der Indikator gezogen wird. Bisherige Indikatoren Daten - Daten der letzten Anzeige am Hauptfenster oder an einem Unterfenster. Wenn keine angeschlossenen Indikatoren vorhanden sind, sind die vorherigen Indikatoren Daten die Diagrammdaten. Und der anzuzeigende Indikator basiert auf dem Schliessen-Preis des Diagramms. Erste Indikatoren Daten - Daten des Indikators, der als erster an das Hauptfenster oder an ein Unterfenster angehängt wurde. Wenn es keine angehängten Indikatoren gibt, sind die ersten Indikatoren Daten die Diagrammdaten. Und der anzuzeigende Indikator wird basierend auf dem Close-Kurs der Tabelle erstellt. Zeitraum / Schicht. Verfügbarkeit von Feldern mit entsprechenden Namen auf der Registerkarte Parameter des Eigenschaftenfensters der Indikatoren. Bewerben. Verfügbarkeit des Felds "Übernehmen" auf der Registerkarte "Parameter" des Eigenschaftenfensters "Indikatoren". Methode . Verfügbarkeit des gleichnamigen Feldes auf der Registerkarte Parameter (Auswahl der gleitenden durchschnittlichen Bauart). Ebenen. Verfügbarkeit der Registerkarte "Ebenen". So fügen Sie Indikatoren zu einem Diagramm hinzu Anhand eines Hauptmenübefehls kann ein Indikator auf ein Diagramm angehängt werden: Doppelklicken Sie auf den Indikatornamen im Navigatorfenster, indem Sie den Navigatorfenster-Kontextmenübefehl wählen: Mit den voreingestellten Hotkeys ziehen Die Anzeige mit der Maus in das Hauptfenster oder in die anderen Indikatoren Unterfenster (Drag & Drop). Die ersten fünf Möglichkeiten unterscheiden sich nicht grundlegend von einander. Lassen Sie uns nennen sie Standard-Modi der Indikatorbefestigung. Daraufhin wird der Indikator entweder in der Tabelle oder in einem separaten Unterfenster, wie standardmäßig gezogen werden. Die fünfte Methode, das Ziehen, ist interessanter. Einige Indikatoren können, wenn sie in das Diagramm gezogen werden, aus Werten eines anderen Indikators berechnet werden, die bereits im Diagramm enthalten sind. Es gibt sieben spezielle Indikatoren: Bollinger Bands Commodity Channel Index Umschläge Momentum Moving Average Relative Strength Index Standardabweichung. Eingebettete Indikatoren können mit anderen Indikatoren kombiniert oder auf Werten anderer Indikatoren berechnet werden. Beim Kombinieren wird die anzuzeigende Anzeige nur über die bereits angehängte Anzeige angezeigt, hat aber eine eigene Skala und Rahmen. In diesem Fall werden die Werte des anzuhängenden Indikators aus den Diagrammpreiswerten berechnet. Ein eingebettetes Indikator, das standardmäßig in einem Unterfenster angezeigt wird, kann mit dem bereits im Unterfenster angezeigten Indikator kombiniert werden. Ein eingebettetes Indikator, das standardmäßig im Hauptfenster angezeigt wird, kann mit dem bereits im Hauptfenster angezeigten Indikator kombiniert werden. Die meisten eingebetteten Indikatoren können nur wie im Standardmodus angeschlossen werden. Diese sieben Sonderanzeigen können sowohl am Hauptfenster als auch an einem Unterfenster angebracht werden. Anschließen an das Hauptfenster Indikatoren, die in einem Unterfenster mit Standardwerten geöffnet werden, werden standardmäßig in einem Unterfenster geöffnet: Commodity Channel Index Momentum Relative Strength Index Standardabweichung Lassen Sie uns die Eigenschaften dieser Indikatoren am Beispiel des Commodity Channel Index untersuchen. Wie bereits oben erwähnt, wird dieses Kennzeichen standardmäßig in einem eigenen Fenster geöffnet: Um CCI dem Hauptfenster zuzuordnen, muss es in das Diagramm gezogen werden. Die Indikatoren Eigenschaften werden wie folgt aussehen: Tatsächlich ist das Diagramm gleichzeitig die Anzeige. Wenn also keine anderen Indikatoren verfügbar sind, sind erste Indikatoren und vorherige Indikatoren Daten Daten des Diagramms selbst, und die Zeichenmethode für die vorherigen Indikatorwerte unterscheidet sich nicht von den Werten der ersten Indikatoren in irgendeiner Weise. Um den Indikator im Chartfenster anzuhängen, muss man ihn per Drag-and-Drop in das Diagramm legen und erste Indikatoren Daten oder vorherige Indikatoren auswählen. Das erhaltene Ergebnis: Indikatoren Momentum, Relative Strength Index und Standardabweichung werden dem Diagrammfenster auf die gleiche Weise zugeordnet. So fügen Sie ein Unterfenster hinzu Indikatoren, die im Hauptfenster nach Standardwerten geöffnet werden Die Indikatoren dieser Gruppe sind im Folgenden aufgelistet: Nehmen wir als Beispiel den Moving Average in Betracht. Standardmäßig sieht dieser Indikator wie folgt aus: Anhängen der MA an einem separaten Unterfenster, ist es notwendig, einige weitere Aktionen als für das vorhergehende Beispiel vorzunehmen. Zuerst muss ein eigenes Fenster erstellt werden. Hierzu legen wir dem Indikator an, der in einem Unterfenster geöffnet werden kann. Zum Beispiel MACD. Nun können wir den Moving Average in das MACD-Fenster ziehen und die vorherigen Indicators Data oder First Indicators Data im Eigenschaftenfenster auswählen (da es im Unterfenster nur einen Indikator gibt, wird der MACD sowohl der erste als auch der letzte Indikator sein) . Wenn eine Anzahl von Indikatoren an einem Unterfenster befestigt ist, ist es immer möglich, zu erkennen, welche davon auf dem Unterfenster aufgebaut ist. Auswahl der vorhergehenden Indikatoren Die Daten werden als - gt angezeigt, die der ersten Indikatoren Daten - als gt. Wir haben MACD mit Moving Average überlagert. Wir können an diesem stoppen, aber wir können auch tun, damit nur beweglicher Durchschnitt im Fenster bleiben. Dazu muss MACD entfernt werden. Aber, wenn wir nur entfernen, wird der Moving Average, als Indikator auf die MACD-Werte gebaut, auch entfernt werden. Also, lassen Sie uns ziehen Moving Average von MACD zuerst. Berechnen wir z. B. Werte schliessen. Nun kann der MACD entfernt werden, der Moving Average bleibt im separaten Fenster. So kombiniert die Eigenschaften der verschiedenen Indikatoren, kann man ein ziemlich kompliziertes System zu bauen. Einige gemeinsame Eigenschaften von Indikatoren Anfügen Wenn das anzuzeigende Kennzeichen auf Werten des Indikators berechnet wird, die mehrere Zeilen (mehr als eins) aufweisen, wird er auf Werten der Nulllinie oder der Hauptlinie berechnet. Im Code wird diese Zeile mit Werten des ersten Parameters der Funktion SetIndexStyle erkannt. Wenn zum Beispiel der anzuzeigende Anzeiger auf dem MACD berechnet wird, werden die Histogrammwerte als Berechnungswerte verwendet, da er im MACD-Code bestimmt wird: SetIndexStyle (0, DRAWHISTOGRAM). Viele Indikatoren haben standardmäßig feste Höchst - und Mindestwerte, wie zB RSI. In diesem Fall können ihre Grenzen, nachdem sie an einen anderen Indikator, z. B. MACD, angehängt wurden, fehlausgerichtet sein, d. h. RSI stimmt einfach nicht mit dem MACD-Fenster überein. Um dies zu korrigieren, ist es notwendig, die Felder von Maximum und Minimum zu deaktivieren, und die Skalen der Indikatoren sind unabhängig voneinander. Wenn eine Anzahl von Indikatoren an einem Unterfenster befestigt ist, ist es immer möglich, zu erkennen, welche davon auf dem Unterfenster aufgebaut ist. Auswahl der vorherigen Indikatoren Die Daten werden als - gt, die der ersten Indikatoren Daten - wie gt angezeigt. Im obigen Beispiel werden die Indikatoren wie folgt aufgebaut: angehängte MACD-berechnete MA auf den ersten Indikatoren Daten, dh auf Werte des MACD Berechnete RSI auf den ersten Indikatoren Daten, also wieder auf Werte der MACD kombiniert CCI mit MACD berechnet Momentum auf den vorherigen Indikatoren Daten, dh auf Werte des CCI. Eingebettete Indikatoren können nicht nur auf andere eingebettete Indikatoren, sondern auch auf benutzerdefinierte Indikatoren überlagert werden. Die Befestigungsprinzipien sind die gleichen. Zum Beispiel: Wie man Levels baut Einige Indikatoren erlauben den Aufbau von Levels. Für MA, kann man einen Kanal mit Ebenen zu bauen. Dazu müssen Sie auf die Registerkarte "Ebenen" wechseln und mit der Schaltfläche Hinzufügen einige Werte festlegen. Nun, wenn wir die MA Linie gefärbt die gleiche wie der Hintergrund, erhalten wir Kanal auf dem gleitenden Durchschnitt gebaut. Registerkarte "Visualisierung" Im Endeffekt betrachten wir eine weitere Eigenschaft von Indikatoren im MetaTrader 4 Client Terminal. Alle Indikatoren, sowohl eingebettet als auch benutzerdefinierte, haben diese Eigenschaft. Darüber hinaus kann sie auch auf Objekte angewendet werden, d. h. auf graphische und technische Analysewerkzeuge. Es gibt kein Geheimnis, dass Daten, die auf verschiedene Zeitrahmen desselben Symbols analysiert werden, sich unterscheiden können. Verschiedene technische Werkzeuge können verwendet werden, einschließlich verschiedener Indikatoren mit unterschiedlichen Einstellungen. Folgende Schritte können durchgeführt werden, um die Indikatoren bei der Umschaltung zwischen den Zeitfenstern nicht immer wieder neu einzustellen: Legen Sie im Fenster der Anzeigeeigenschaften den Zeitrahmen fest, an dem das ausgewählte Kennzeichen verankert werden soll. Und so weiter für alle Indikatoren und auf allen Zeitrahmen. In Zukunft können wir, wenn wir zwischen ihnen wechseln, verschiedene Indikatoren zu verschiedenen Zeitrahmen sehen. Es bleibt nur, um die Vorlage zu speichern, die in Zukunft für andere Symbole verwendet werden soll. Beispiel. Auf Zeitrahmen von H1 und M15 sind die gleichen Indikatoren, MACD und MA, angeschlossen, jedoch mit unterschiedlichen Perioden. Auf H1: MACD mit Werten von 12, 26, 9 MA mit der Periode von 7 wird auf der MACD MA berechnet, wobei die Periode 5 auf dem MA (7) berechnet wird. Auf M15 wird MACD mit Werten von 24, 52, 18 MA mit der Periode von 28 auf der MACD MA berechnet, wobei die Periode von 20 auf dem MA (28) berechnet wird. Diese Funktionalität ist experimentell und kann vollständig geändert oder entfernt werden Eine zukünftige Version. Bei einer geordneten Datenreihe gleitet die Aggregation Moving Average ein Fenster über die Daten und gibt den Mittelwert dieses Fensters ab. Zum Beispiel können wir bei den Daten 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 einen einfachen gleitenden Durchschnitt mit einer Fenstergröße von 5 wie folgt berechnen: Bewegungsdurchschnitte sind eine einfache Methode, um sequentiell zu glätten Daten. Bewegungsdurchschnitte werden typischerweise auf zeitbasierte Daten, wie beispielsweise Aktienkurse oder Server-Metriken, angewendet. Die Glättung kann verwendet werden, um hochfrequente Fluktuationen oder zufälliges Rauschen zu eliminieren, was es ermöglicht, die Trends niedrigerer Frequenz leichter visualisierbar zu machen, wie z. B. Saisonalität. Syntaxedit Linearedit Das lineare Modell weist den Punkten in der Reihe eine lineare Gewichtung zu, so dass ältere Datenpunkte (z. B. die am Anfang des Fensters) einen linear geringeren Betrag zum Gesamtdurchschnitt beitragen. Die lineare Gewichtung hilft, die Verzögerung hinter den Daten zu verringern, da ältere Punkte weniger Einfluss haben. Ein lineares Modell hat keine speziellen Einstellungen zu konfigurieren Wie das einfache Modell, Fenstergröße kann das Verhalten des gleitenden Durchschnitt ändern. Beispielsweise wird ein kleines Fenster (Fenster: 10) die Daten genau verfolgen und nur kleine Schwankungen verkleinern: Abbildung 3. Linearer gleitender Durchschnitt mit Fenster der Größe 10 Im Gegensatz dazu ist ein linear bewegender Durchschnitt mit größerem Fenster (Fenster 100) Wird alle Hochfrequenz-Schwankungen glätten, so dass nur niederfrequente, langfristige Trends. Es neigt auch dazu, sich hinter den tatsächlichen Daten um einen beträchtlichen Betrag zu verkürzen, obwohl typischerweise weniger als das einfache Modell: Abbildung 4. Linearer gleitender Durchschnitt mit Fenster der Größe 100 Multiplikativ Holt-Wintersedit Multiplicative wird durch die Einstellung type angegeben: mult. Diese Sorte wird bevorzugt, wenn der saisonale Einfluss mit Ihren Daten multipliziert wird. Z. B. Wenn die saisonale Affekt ist x5 die Daten, anstatt einfach zu ergänzen. Die Standardwerte für alpha und gamma sind 0,3, während beta 0,1 ist. Die Einstellungen akzeptieren alle Float von 0-1 inklusive. Der Standardwert für die Periode ist 1. Das multiplikative Holt-Winters-Modell kann durch multiplikative Holt-Winters-Arbeiten minimiert werden, indem jeder Datenpunkt durch den saisonalen Wert geteilt wird. Dies ist problematisch, wenn irgendeine Ihrer Daten Null ist, oder wenn es Lücken in den Daten gibt (da dies zu einer Division durch Null führt). Um dies zu bekämpfen, pads die Mult Holt-Winters alle Werte um eine sehr kleine Menge (110 -10), so dass alle Werte ungleich Null sind. Dies beeinflusst das Ergebnis, aber nur minimal. Wenn Ihre Daten ungleich Null sind oder Sie es vorziehen, NaN zu sehen, wenn Nullen auftreten, können Sie dieses Verhalten mit pad deaktivieren: false Predictionedit Alle gleitenden Durchschnittsmodelle unterstützen einen Vorhersagemodus, der versucht, in die Zukunft zu extrapolieren angesichts der aktuellen Geglättet, gleitender Durchschnitt. Je nach Modell und Parameter können diese Vorhersagen zutreffend sein oder auch nicht. Vorhersagen werden durch Hinzufügen eines Vorhersageparameters zu einer gleitenden durchschnittlichen Aggregation aktiviert, wobei die Anzahl der Vorhersagen angegeben wird, die an das Ende der Reihe angehängt werden sollen. Diese Prognosen werden im gleichen Intervall wie Ihre Eimer beabstandet: Die einfache. Lineare und ewma-Modelle produzieren flache Vorhersagen: Sie konvergieren im Wesentlichen auf dem Mittelwert des letzten Wertes der Serie und erzeugen eine Ebene: Abbildung 11. Einfacher gleitender Durchschnitt mit Fenster der Größe 10, prognostizieren 50 Im Gegensatz dazu kann das Holt-Modell basiert basieren Auf lokale oder globale konstante Trends. Wenn wir einen hohen Beta-Wert setzen, können wir basierend auf lokalen Konstanten Trends (in diesem Fall die Prognosen Kopf nach unten, da die Daten am Ende der Serie wurde in Richtung nach unten Richtung) zu extrapolieren: Abbildung 12. Holt-Linear gleitenden Durchschnitt Mit Fenster der Größe 100, vorherzusagen 20, alpha 0.5, beta 0.8 Im Gegensatz dazu, wenn wir eine kleine Beta wählen. Die Prognosen basieren auf dem globalen konstanten Trend. In dieser Reihe ist die globale Tendenz leicht positiv, so dass die Vorhersage einen scharfen U-Turn und beginnt eine positive Steigung: Abbildung 13: Double Exponential gleitenden Durchschnitt mit Fenster der Größe 100, vorherzusagen 20, alpha 0,5, beta 0,1 Das Holtwinders Modell Hat das Potenzial, die besten Prognosen zu liefern, da es auch saisonale Schwankungen in das Modell einbezieht: Abbildung 14. Holt-Winters gleitender Durchschnitt mit Fenster der Größe 120, vorherzusagen 25, alpha 0,8, beta 0,2, gamma 0,7, Zeitraum 30

No comments:

Post a Comment