Tuesday 31 October 2017

Handelssystem Domänenmodell


W el c o m e Willkommen im Heim des offenen Java-Handelssystems Das Open Java Trading System (OJTS) ist eine gemeinsame Infrastruktur zur Entwicklung von Aktienhandels - systemen. Es besteht aus vier Teilen: das Sammeln von Rohdaten über das Internet die Erkennung von Handelssignalen ein Visualisierungsmodul und Module für die Verbindung zu den programmatischen Schnittstellen von Handelsplattformen wie Banken. Ziel der Projekte ist die Bereitstellung einer eigenständigen, reinen Java (plattformunabhängigen) gemeinsamen Infrastruktur für Entwickler von Handelssystemen. Einige der Aspekte, die behandelt werden sollten, sind die Bereitstellung eines gemeinsamen SQL92-konformen Datenbankschemas für die Speicherung von Finanzdaten, gemeinsamen Java-Schnittstellen für den Austausch von Daten zwischen verschiedenen Modulen, die Visualisierung von Rohdaten und Handelssignalen sowie einige andere gemeinsame Aspekte, die benötigt werden, um zu schaffen Ein abschließendes Handelssystem. Wegen meines Jobs und meiner Familie finde ich nicht die Zeit, OJTS länger zu verbessern. Ich fahre fort, den Verbindungen Abschnitt unten zu aktualisieren, der Sie zu den aktiveren Java-Quellprojekten in diesem Bereich, aber führt. In der Tat als Folge meines Interesses an der Dynamik der Aktienmärkte begann ich eine Reise in die tieferen Einzelheiten der Volkswirtschaft, um die Wechselkurse zu verstehen. Dieses Thema führt mich schließlich zu einem tieferen Studium des Geldes an sich als der metrischen Einheit, die wir in der Ökonomie verwenden, um Wert, Erfolg oder Nutzen zu messen. Dieses Thema erwies sich als äußerst interessant, aber zugleich war es sehr schwer, Informationen darüber zu finden, wie unser Geldsystem funktioniert. Gehen Sie herum und fragen Sie, woher das Geld kommt, wer es schafft und was seinen Wert bestimmt. Sie werden feststellen, dass auch die Menschen, die einen Master-Abschluss oder PhD. In der Ökonomie nicht wissen, diese Details. Oh, ja, sie werden in einigen kryptischen Fachbegriffe beantworten, aber sie werden nicht in der Lage sein, ein einfaches Diagramm zu zeichnen, das den Prozess umreißt. H. G. Wells wird berichtet, zu haben gesagt haben: Von Währung zu schreiben ist allgemein als eine anstößige, ja fast eine unanständige Praxis anerkannt. Die Redakteure werden den Schriftsteller fast weinerlich bitten, nicht über Geld zu schreiben, nicht weil es ein uninteressantes Thema ist, sondern weil es immer ein zutiefst beunruhigend war. Ich schlage vor, jede Person, die in einer demokratischen Gesellschaft zu lesen, über dieses Thema. Es beeinflusst unser Leben jeden Tag in einem Ausmaß, das nicht übertrieben werden kann Meiner Meinung nach sollte jeder Bürger eines demokratischen Landes auf dieser Welt wissen, wo unser Geld herkommt. Höchstwahrscheinlich kamen Sie zu dieser Web site, um nach Werkzeugen zu suchen, die Ihnen helfen, Ihre Geldmenge zu erhöhen. Um zu verstehen, die metrische Einheit Geld (egal ob Dollar oder Euro) wird ein wichtiger Bestandteil in Ihrem Toolkit für Geld zu verdienen. Wenn Sie wenig Zeit haben und nur sich leisten können, ein einzelnes Buch über dieses Thema zu lesen, dann schlage ich vor, dass Sie Reichtum, virtuellen Reichtum und Schuld durch Frederick Soddy lesen. Ich konnte eine gebrauchte Kopie über Amazon für 23.48 kaufen, aber es gibt auch eine Online-Version. Sie benötigen das DjVu-Plugin, um es zu lesen. Dieses Buch wurde ursprünglich im Jahr 1929 veröffentlicht, aber beschreibt noch die tatsächlichen Fakten sehr gut. Auch wenn ich nicht mit allen Schlußfolgerungen von Frederick Soddy einverstanden bin, ist seine Arbeit erfreulich erregend und führt Sie dazu, die richtigen Fragen zu stellen. N e w s Releases, Bugfixes und aktualisierte Dokumentation Kündigte die Aussetzung der aktiven Entwicklung und zusätzliche Hinweise auf Informationen über unsere Währungssysteme (DollarEuro). Hinzugefügt einen Links Abschnitt zu anderen interessanten Java-Trading-System-Projekte. Ich untersuche, wie OJTS kompatibler zu anderen Java-Trading-System-Bemühungen zu machen. Investition und Handelssystem Dokumentation Projekt auf ITSdoc. org gefunden werden. Auf der ITSdoc. org steht ein neues Wiki zur Verfügung, das sich auf die Verteilung von Wissen im Bereich der Investitions - und Handelssysteme konzentriert. Die Idee hinter ITSdoc. org ist, eine Kooperationsplattform ähnlich wikipedia zu haben, die der Gemeinschaft hilft, Wissen zu teilen. OpenJavaTradingSystem v0.13 veröffentlicht. Gestern habe ich die Version 0.13 der OpenJavaTradingSystem-Bibliothek veröffentlicht. Zu den neuen Features gehören: Datenabruf für Aktien, Fonds und Währungen von OnVista. Umsetzung der Währungsumrechnung und - umwandlungen. Portfolios werden implementiert und Sie können mit Portfolios genauso arbeiten wie mit einzelnen Sicherheitspapieren. Ein allgemeiner Rahmen für die Anwendung von Algorithmen auf Börsen-Zeitreihen wurde hinzugefügt. Wechseln von der interaktiven Shell SISCScheme zu ABCLCommonLisp und seinem Editor namens J. Hinzufügen eines allgemeinen Daten-Caching-Mechanismus zum Zwischenspeichern von Daten, die bereits über das Web im Dateisystem abgerufen wurden. Plus viele weitere kleinere Verbesserungen Wenn Sie an dieser neuen Version interessiert sind, sollten Sie an der quickstartscreenshot Abschnitt beginnen. Das Handbuch ist noch nicht aktualisiert, aber es kann Ihnen dennoch einige wertvolle Hintergrundinformationen geben, wenn Sie die Bibliothek in Ihrem Projekt verwenden möchten. Die Dokumentation sollte bald aktualisiert werden. Zurzeit gibt es nicht viel Entwicklung getan, weil ich meine Kenntnisse über bayesische Netzwerke zu aktualisieren. Siehe zum Beispiel die Liste der Bücher auf meiner Website. Zwei interessante Projekte sind WEKA und BNJ. Bald werde ich die Entwicklung fortsetzen und ich werde damit beginnen, die erste Intelligenz in das System zu integrieren. Heute habe ich die erste Version in den Dateien Abschnitt des Sourceforge Download-Bereich. Außerdem habe ich das Handbuch aktualisiert, um die interaktive Nutzung des Projekts über die SISC-Schema-Ebene zu dokumentieren. Für die ungeduldigen hier ist ein Quickstartscreenshot Abschnitt, um Sie zu gehen. D o c u m e n t a t i o n Dokumente, die die Einbauten des Projekts beschreiben. Java Data Objects and Interface Dokumentation gtgtHTML gtgtPDF Verwendungsdokumentation gtgtHTML gtgtPDF Investitions - und Handelssystem Dokumentation Projekt gtgtITSdoc. org T echnologie Third Party Building Blocks in diesem Projekt verwendet HSQL Database Engine (Lizenz: hsqldblic. txt) Die HSQLDB ist das Datenbankmodul, das mit der So dass Sie sofort mit dem OJTS arbeiten können, ohne eine Datenbank von Drittanbietern installieren zu müssen. Aber wenn Sie planen, eine andere SQL92-kompatible Datenbank zu verwenden, dann ist dies eine Konfigurationsoption. Castor (Lizenz: Die Exolab-Lizenz) Castor ist ein Open-Source-Datenbindungsrahmen für Javatm. Sein kürzester Pfad zwischen Java-Objekten, XML-Dokumenten und relationalen Tabellen. Castor bietet Java-to-XML-Bindung, Java-to-SQL-Persistenz und vieles mehr. Castor Doclet (Lizenz: GNU LGPL v2.1) Java Doclet, um sowohl Mapping-und DDL-Dateien für Castor JDO und Castor XML zu generieren. TestMaker (Lizenz: TestMaker Open-Source-Lizenz) Aus dem TestMaker-Projekt wird nur die Implementierung der Protokolle wie HTTP oder HTTPS verwendet, um Daten aus dem Web zu sammeln. JCookie (Lizenz: GNU LGPL v2.1) Die jCookie-Bibliothek ist erforderlich, damit die TestMaker-Bibliotheken funktionieren. Htmlparser (Lizenz: GNU LGPL v2.1) Die htmlparser-Bibliothek wird verwendet, um die Daten aus den Web-Ressourcen zu extrahieren. ABCLCommonLisp (Lizenz: GNU GPL v2) Mit ABCL (Armed Bear Common Lisp) wird das algorithmische Herz des Projekts in der Programmiersprache ANSI Common Lisp implementiert. JFreeChart (Lizenz: GNU LGPL v2.1) JFreeChart dient der Visualisierung von Finanzdaten als Charts. JSci (Lizenz: GNU LGPL v2.1) JSci - Eine wissenschaftliche API für Java. Joda Time (Lizenz: Eigene OpenSource-Lizenz) Joda Time ersetzt die ursprünglichen JDK-Datums - und Zeitklassen. L i n k s Links zu anderen Projekten Die JavaTraders Google-Gruppe kann der beste Eintrag für Sie sein, um sich über andere Java-basierte Handelssysteme und Tools zu informieren. L izenz Nutzungsbestimmungen Der Code des Projekts wird unter den Bedingungen der LGPL lizenziert, und alle Unterlagen, die Sie in diesem Projekt finden, werden unter den Bedingungen der FDL lizenziert. Eine vollständige Liste aller Entitäten des Systems wird in der gesamten Nächsten Abschnitten. Entitäten des Systems können in die folgenden drei Bereiche eingeteilt werden: Strategie. Sicherheit. Sicherheitsfamilie. Sicherheitsreferenz. Konto. Zuweisung. BrokerParameter. Eigentum. OrderPreference und damit verbundene Entities Diese Entities sind typischerweise unveränderlich und bilden die Grundlage für jede Handelsstrategie. Der Abschnitt 13.5, Referenzdatenmanager stellt eine GUI bereit, um Referenzdaten zu verwalten. MarketDataEvent und seine Unterklassen Tick und Bar sowie jede Art von GenericEvent Diese Entities stellen externe Ereignisse (Tick und Bar) dar, die von Marktdatenanbietern oder internen Ereignissen (Generic Events) stammen, die aus einer anderen Handelsstrategie stammen und die Basis für die Signallogik bilden Handelsstrategien. Marktdaten sind in der Regel unveränderlich und von nur momentanem Interesse für die Handelsstrategien. Auftrag. Transaktion. Position. Barguthaben. Messung. PortfolioValue und damit zusammenhängende Gesellschaften Diese Einheiten repräsentieren oder beeinflussen den Finanzstatus der Handelsstrategien. Einige von ihnen (z. B. Transaktionen und Messungen) sind unveränderlich, während andere (z. B. Positionen und Balancen) veränderlich sind und ihre Werte ändern, während Aufträge ausgeführt werden. Neben der Bereitstellung von Gettern und Setzern bieten alle Entitäten die folgenden gemeinsamen Merkmale: Die statische innere Konverterklasse kann verwendet werden, um die Entität automatisch in das entsprechende Wertobjekt zu konvertieren, siehe Abschnitt 8.4, Wertobjekt Die statische innere Factory-Klasse kann zum Erstellen neuer Instanzen verwendet werden Eines Entity Um Securities und SecurityFamilies zu aktualisieren, kann man entweder den Abschnitt 13.5, Reference Data Manager verwenden oder notwendige Informationen direkt in die Datenbank einfügen. Die Definition der Attribute der Klassen Security und SecurityFamily ist im AlgoTrader JavaDoc dokumentiert Die Klasse EasyToBorrow Enthält Informationen darüber, wie viele Verträge eines bestimmten Bestandes durch einen bestimmten Broker kurzgeschlossen werden können. SecurityReference Ist eine generische Verbindung zwischen einem Sicherheitseigentümer und einem anderen Ziel. Mit dieser Klasse ist es möglich, dass ein Wertpapier Links zu mehreren anderen Wertpapieren hat. 8.1.2.1. Security Visitors Das Visitor Pattern ist eine Möglichkeit, einen Algorithmus von einer Objektstruktur zu trennen, auf der er arbeitet. Mit diesem Muster ist es möglich, benutzerdefinierte Logik pro Entity zu implementieren, ohne den Entity-Code selbst zu verschmutzen. AlgoTrader stellt die Schnittstelle ch. algotrader. visitor. SecurityVisitor zur Verfügung, die von allen Security-Besuchern implementiert werden muss. Jeder Security-Besucher hat zwei generische Typparameter R und P. R ist der Rückkehrtyp (oder java. lang. Void), der von allen Besuchsmethoden zurückgegeben wird, und P ist ein beliebiges Parameterobjekt, das zu den Besuchsmethoden hinzugefügt werden kann. Darüber hinaus gibt es den ch. algotrader. visitor. PolymorphicSecurityVisitor, der den gesamten Vererbungsbaum aller Wertpapiere widerspiegelt. Wenn es zum Beispiel keine visitFuture-Methode gibt, ruft der PolymorphicEntityVisitor automatisch die Methode visitSecurity auf. Die Akzeptierungsmethode für jede Entität kann verwendet werden, um einen beliebigen Besucher wie folgt zu verarbeiten: In AlgoTrader stehen zwei Besucher zur Verfügung, die vom AlgoTrader-Server verwendet werden. Wird verwendet, um sicherzustellen, dass bestimmte Hibernate-Entitätsverweise initialisiert werden. Dient zur Validierung eines Tick nach Regeln, die pro Security definiert sind Abbildung 8.7. Konto Ein Konto stellt entweder ein tatsächliches Konto, eine Kontogruppe (IB-spezifisch) oder ein Zuteilungsprofil (IB-spezifisch) dar. Ein Konto ist einem bestimmten OrderServiceType (z. B. IBNATIVE oder FXCMFIX) zugewiesen. Zusätzlich das Feld sessionQualifier, das benötigt wird, um die eigentliche Sitzung zu definieren (in erster Linie für FIX Connections). Mit diesem Setup ist es möglich, mehrere Sessions (SessionQualifiers) pro OrderServiceType zu haben und mehrere Konten pro Sitzung zu haben. Aufträge, die an den Markt gesendet werden, enthalten stets Kontobezogene Informationen in adäquater Weise (z. B. als FIX-Tag 1). Auch Transaktionen, die auf einer tatsächlichen Bestellung basieren, haben eine Assoziation mit einem bestimmten Konto. Allerdings halten Positionen keine Informationen über Konten. Es ist also möglich, dass eine Position aggregierte Mengen aus mehreren externen Konten hält. Es ist auch möglich, eine Position durch auf Konto zu öffnen, aber dann durch ein anderes zu schließen. Mit diesem Setup müssen sich die Strategien nicht um die tatsächlichen Konten kümmern, in denen sich die Fonds befinden. Auf diese Weise wird eine Strategie immer nur eine Position pro Sicherheit sehen. 8.1.6. Abbildung 8.9. Position Für jede Strategie, die eine bestimmte Sicherheit besitzt, wird eine Position in der Datenbank erstellt. Selbst wenn diese Position später geschlossen wird (d. h. Menge 0), bleibt die Position in der Datenbank, da die zugehörigen Transaktionen immer noch auf sie verweisen. Grundsätzlich werden Positionswerte (zB MarketPreis MarketValue, DurchschnittPreiskosten, unrealizedPL amp realizedPL) pro tatsächlichen strategischen Position berechnet und zeigen den Preis, der gezahlt werden müsste, wenn die Position zu diesem Zeitpunkt geschlossen wurde Da einige Werte (zB marketValue) Abhängig davon, ob die Position lang oder kurz ist, können aggregierte Positionswerte für die gleiche Sicherheit (von verschiedenen Strategien) nicht nur durch Hinzufügen von Positionswerten aus den entsprechenden Strategien abgerufen werden. Beispiel: Sicherheit: VIX Dez 2012 Aktuelle Gebot: 16,50 Aktuelle Fragen: 16,60 Strategie A: Anzahl 10 - gt marketValue: 10 1000 16,50 165000 Strategie B: Menge -10 - gt marketValue: 10 1000 16,60 -166000 Die Summe der oben genannten Marktwerte wäre -1000, was offensichtlich falsch ist. Folglich bietet das PortfolioDAO Suchmethoden, die Positionen aus der gleichen Sicherheit (von verschiedenen Strategien) in der richtigen Weise aggregieren (z. B. findOpenPositionsAggregated). 8.1.8. Abonnement Das AlgoTrader DAO-Framework besteht aus mehreren Hauptkomponenten BaseEntityI repräsentiert eine abstrakte serialisierbare persistente Entität mit einem synthetischen Bezeichner vom Typ long. ReadOnlyDao repräsentiert eine Schnittstelle für allgemeine Abrufoperationen für Entitätsklassen. ReadWriteDao erweitert ReadOnlyDao und stellt eine Schnittstelle für allgemeine Abruf - und Mutationsoperationen dar. AbstractDao abstrakte Klasse dient als allgemeine Basisklasse für Datenzugriffsklassen. Es bietet die häufigsten Operationen zum Abrufen, Aktualisieren und Löschen von Entitäten sowie zum Erstellen von HQL - und nativen SQL-Abfragen. Es ist möglich, benutzerdefinierte DAOs die Plattform hinzuzufügen. Um dies zu erreichen benötigt man eine DAO-Schnittstelle, die entweder ReadOnlyDao oder ReadWriteDao erweitert. Fügen Sie benutzerdefinierte Operationen wie Entity-spezifische Sucher hinzu und erstellen Sie dann eine benutzerdefinierte DAO-Klasse, die AbstractDao erweitert und die benutzerdefinierte DAO-Schnittstelle implementiert. HL - und SQL-Abfragen, die von Alogtrader DAO-Komponenten verwendet werden, werden externalisiert und in der Datei Hibernate. hbm. xml gespeichert. Dies ermöglicht eine bessere Verwaltung und erleichtert die Wiederverwendung von Abfragen. Abfragen können von DAO-Klassen oder benutzerdefinierten Komponenten mit ihrem Namen aufgerufen werden 8.3. Services Das System basiert auf einer Service Oriented Architecture (SOA). Alle Operationen des Systems werden als Spring Services Beans bereitgestellt. Es gibt folgende Dienstleistungsgruppen: Private Services, die nur von den AlgoTrader Server Client Services genutzt werden, die von jeder Strategie (und dem AlgoTrader Server selbst) instanziiert werden. Die LMAX-Architektur In den letzten Jahren hören wir das freie Mittagessen Ist über - wir können nicht erwarten, dass Erhöhungen der individuellen CPU-Geschwindigkeit. So, um schnellen Code zu schreiben, müssen wir explizit mehrere Prozessoren mit gleichzeitiger Software verwenden. Dies ist keine gute Nachricht - schreiben gleichzeitigen Code ist sehr schwer. Schlösser und Semaphoren sind schwer zu überlegen und schwer zu testen - das heißt, wir verbringen mehr Zeit Sorgen um die Befriedigung des Computers als wir das Problem lösen Problem. Verschiedene Parallelität Modelle, wie Akteure und Software Transactional Memory, zielen darauf ab, dies zu erleichtern - aber es gibt noch eine Belastung, die Bugs und Komplexität führt. So war ich fasziniert, von einem Gespräch im QCon London im März letzten Jahres von LMAX zu hören. LMAX ist eine neue Retail-Handelsplattform. Seine Geschäftsinnovation ist, dass es eine Einzelhandelsplattform ist, die jedermann erlaubt, in einer Strecke der Finanzderivateprodukte zu handeln2. Eine Handelsplattform wie diese braucht sehr geringe Latenzzeiten - Trades müssen schnell verarbeitet werden, weil sich der Markt schnell bewegt. Eine Retail-Plattform fügt Komplexität hinzu, weil sie dies für viele Menschen tun muss. Das Ergebnis sind mehr Anwender mit vielen Trades, die alle schnell verarbeitet werden müssen.3 Angesichts des Wandels zum Multi-Core-Denken würde diese Art von anspruchsvoller Performance natürlich ein explizit gleichzeitiges Programmiermodell nahelegen - und das war auch ihre Aufgabe Startpunkt. Aber die Sache, die Völkeraufmerksamkeit bei QCon erhielt, war, daß dieses nicht war, wo sie oben lagen. In der Tat, sie am Ende, indem sie alle Business-Logik für ihre Plattform: alle Trades, von allen Kunden, in allen Märkten - auf einem einzigen Thread. Ein Thread, der verarbeitet 6 Millionen Bestellungen pro Sekunde mit Rohstoff-Hardware.4 Verarbeitung von vielen Transaktionen mit geringer Latenz und keine der Komplexität der gleichzeitigen Code - wie kann ich widerstehen, graben in die Glücklicherweise ein anderer Unterschied LMAX hat, um andere Finanzgesellschaften ist, dass Sie sind froh, über ihre technologischen Entscheidungen zu sprechen. So ist nun LMAX in Produktion für eine Weile seine Zeit, um ihre faszinierenden Design zu erkunden. Gesamtstruktur Abbildung 1: LMAXs-Architektur in drei Blobs Auf einer obersten Ebene hat die Architektur drei Teile Business Logic Processor5 Eingang Disruptor-Ausgang Disruptoren Wie der Name schon sagt, verarbeitet der Business-Logik-Prozessor alle Business-Logik in der Anwendung. Wie ich oben angeführt, es tut dies als Single-threaded Java-Programm, das reagiert auf Methodenaufrufe und produziert Ausgabeereignisse. Folglich ist es ein einfaches Java-Programm, das keine Plattform-Frameworks benötigt, um andere als die JVM selbst laufen, die es leicht in Testumgebungen ausgeführt werden kann. Obwohl der Business Logic Processor in einer einfachen Umgebung zum Testen laufen kann, gibt es eher eine Choreografie, um es in einer Produktionsumgebung laufen zu lassen. Input-Nachrichten müssen von einem Netzwerk-Gateway genommen werden und unmarshaled, repliziert und journaliert. Ausgabemeldungen müssen für das Netzwerk marshaled werden. Diese Aufgaben werden durch die Ein - und Ausgabe-Disruptoren gehandhabt. Im Gegensatz zum Business Logic Processor handelt es sich um gleichzeitige Komponenten, da es sich dabei um langsame und unabhängige IO-Operationen handelt. Sie wurden speziell für LMAX entworfen und gebaut, aber sie (wie die gesamte Architektur) sind an anderer Stelle anwendbar. Business Logic Processor Halten Sie alles im Speicher Der Business Logic Processor nimmt Eingabemails sequentiell (in Form eines Methodenaufrufs) auf, führt eine Geschäftslogik aus und gibt Ausgabeereignisse aus. Es arbeitet vollständig im Arbeitsspeicher, es gibt keine Datenbank oder einen anderen persistenten Speicher. Die Speicherung aller Daten hat zwei wichtige Vorteile. Erstens ist es schnell - es gibt keine Datenbank für langsame IO zugreifen, und es gibt auch keine transaktionalen Verhalten auszuführen, da alle die Verarbeitung erfolgt sequentiell. Der zweite Vorteil ist, dass es die Programmierung vereinfacht - theres keine objectrelational Mapping zu tun. Der gesamte Code kann mit dem Javas-Objektmodell geschrieben werden, ohne Kompromisse für die Zuordnung zu einer Datenbank zu machen. Die Verwendung einer In-Memory-Struktur hat eine wichtige Konsequenz - was passiert, wenn alles abstürzt Selbst die widerstandsfähigsten Systeme sind anfällig für jemanden, der die Energie zieht. Das Herz des Umgangs mit diesem ist Event Sourcing - was bedeutet, dass der aktuelle Zustand des Business Logic Processors vollständig durch die Verarbeitung der Eingangsereignisse ableitbar ist. Solange der Eingangsereignisstrom in einem dauerhaften Speicher (der einer der Aufträge des Eingangsdatenträgers ist) beibehalten wird, können Sie den aktuellen Zustand der Geschäftslogik durch Wiedergeben der Ereignisse jederzeit wiederherstellen. Eine gute Möglichkeit, dies zu verstehen, ist ein Versionskontrollsystem zu denken. Versionskontrollsysteme sind eine Folge von Commits, zu jeder Zeit können Sie eine Arbeitskopie erstellen, indem Sie diese Commits. VCSs sind komplizierter als der Business Logic Processor, da sie eine Verzweigung unterstützen müssen, während der Business Logic Processor eine einfache Sequenz ist. So können Sie in der Theorie immer wieder den Zustand des Business Logic Processors wiederherstellen, indem Sie alle Ereignisse aufbereiten. In der Praxis, aber das würde zu lange dauern, wenn Sie brauchen, um eine Spinne. So wie bei Versionskontrollsystemen kann LMAX Snapshots des Business Logic Processor-Status erstellen und aus den Snapshots wiederherstellen. Sie nehmen eine Momentaufnahme jede Nacht während Perioden der niedrigen Tätigkeit. Der Neustart des Business Logic Processors ist schnell, ein vollständiger Neustart - einschließlich Neustart der JVM, Laden eines aktuellen Snapshots und Wiederholen von Tagen im Wert von Zeitschriften - dauert weniger als eine Minute. Schnappschüsse machen den Start eines neuen Business Logic Processors schneller, aber nicht schnell genug, wenn ein Business Logic Processor um 14 Uhr abstürzen sollte. Als Ergebnis LMAX hält mehrere Business Logic Processors läuft die ganze Zeit6. Jedes Eingabeereignis wird von mehreren Prozessoren verarbeitet, aber alle außer einem Prozessor werden ignoriert. Sollte der Live-Prozessor ausfallen, wechselt das System zu einem anderen. Diese Fähigkeit, Failover zu behandeln, ist ein weiterer Vorteil der Verwendung von Event Sourcing. Durch das Sourcing in Repliken können sie zwischen den Prozessoren in einer Angelegenheit von Mikrosekunden wechseln. Neben Snapshots jede Nacht, starten sie auch die Business Logic Processors jede Nacht. Die Replikation ermöglicht es ihnen, dies ohne Ausfallzeiten zu tun, so dass sie weiter zu handeln 247. Für mehr Hintergrund auf Event Sourcing, sehen Sie die Entwurfsmuster auf meiner Website von ein paar Jahren. Der Artikel konzentriert sich mehr auf die Behandlung von zeitlichen Beziehungen als die Vorteile, die LMAX verwenden, aber es erklärt die Kernidee. Das Sourcing von Ereignissen ist wertvoll, weil es dem Prozessor erlaubt, vollständig im Arbeitsspeicher zu laufen, hat aber einen weiteren beträchtlichen Vorteil für die Diagnose. Wenn ein unerwartetes Verhalten auftritt, kopiert das Team die Sequenz der Ereignisse in ihre Entwicklungsumgebung und gibt sie dort erneut ab. Dies ermöglicht es ihnen, zu untersuchen, was passiert viel leichter als in den meisten Umgebungen möglich ist. Diese Diagnosefähigkeit erstreckt sich auch auf die Geschäftsdiagnose. Es gibt einige Business-Aufgaben, wie im Risikomanagement, die erhebliche Berechnungen erfordern, die nicht für die Verarbeitung von Aufträgen benötigt wird. Ein Beispiel ist eine Liste der Top-20-Kunden nach Risikoprofil basierend auf ihren aktuellen Handelspositionen. Das Team behandelt dies, indem es ein repliziertes Domänenmodell spinnt und dort die Berechnung durchführt, wo es nicht die Kernauftragsbearbeitung stört. Diese Analysedomänenmodelle können variierende Datenmodelle aufweisen, unterschiedliche Datensätze im Speicher behalten und auf verschiedenen Maschinen laufen. Tuning Leistung Bisher Ive erklärt, dass der Schlüssel für die Geschwindigkeit des Business Logic Processor alles nacheinander, im Gedächtnis zu tun. Nur dies zu tun (und nichts wirklich dumm) ermöglicht es Entwicklern, Code zu schreiben, die 10K TPS7 verarbeiten kann. Sie fanden dann, dass die Konzentration auf die einfachen Elemente der guten Code könnte dies in die 100K TPS-Bereich. Dies braucht nur gut-factored Code und kleine Methoden - im Wesentlichen dies ermöglicht Hotspot, um einen besseren Job der Optimierung zu tun und für CPUs effizienter beim Caching des Codes als seine Ausführung. Es brauchte ein bisschen mehr Klugheit, um eine andere Größenordnung hinaufzugehen. Es gibt mehrere Dinge, die das LMAX-Team hilfreich fand, um dorthin zu gelangen. Man sollte benutzerdefinierte Implementierungen der Java-Sammlungen, die entworfen wurden, um Cache-freundlich und vorsichtig mit Garbage8 zu schreiben. Ein Beispiel hierfür ist die Verwendung primitiver Java-Sequenzen als HashMap-Schlüssel mit einer speziell geschriebenen Array-gesicherten Map-Implementierung (LongToObjectHashMap). Im Allgemeinen haben sie festgestellt, dass die Wahl der Datenstrukturen oft einen großen Unterschied macht. Die meisten Programmierer greifen nur eine Liste, die sie letztes Mal verwendet haben, anstatt darüber nachzudenken, welche Implementierung die richtige für diesen Kontext ist.9 Eine andere Technik, um diese Spitzenleistung zu erreichen, ist Putting Aufmerksamkeit in Leistungstests. Ive lang beachtet, daß Leute viel über Techniken sprechen, um Leistung zu verbessern, aber die eine Sache, die wirklich unterscheidet, ist, es zu prüfen. Auch gute Programmierer sind sehr gut im Aufbau von Performance-Argumenten, die am Ende falsch liegen, so dass die besten Programmierer lieber Profiler und Testfälle zu spekulieren.10 Das LMAX-Team hat auch festgestellt, dass Schreiben Tests erste ist eine sehr effektive Disziplin für Performance-Tests. Programming-Modell Diese Art der Verarbeitung führt einige Einschränkungen in die Art und Weise Sie schreiben und organisieren die Geschäftslogik. Die erste davon ist, dass Sie jede Interaktion mit externen Diensten herausfinden müssen. Ein externer Dienstaufruf wird langsam sein, und mit einem einzigen Thread wird die gesamte Auftragsbearbeitungsmaschine stoppen. Dadurch können Sie keine Anrufe zu externen Diensten innerhalb der Geschäftslogik tätigen. Stattdessen müssen Sie diese Interaktion mit einem Ausgabeereignis beenden und auf ein anderes Eingabeereignis warten, um es wieder abholen zu können. Ill verwenden ein einfaches nicht-LMAX-Beispiel zu illustrieren. Stellen Sie sich vor, Sie machen eine Bestellung für Jelly Beans mit Kreditkarte. Ein einfaches Einzelhandels-System würde Ihre Bestellinformationen nehmen, einen Kreditkarten-Validierungsdienst verwenden, um Ihre Kreditkartennummer zu überprüfen und dann Ihre Bestellung zu bestätigen - alles in einem einzigen Vorgang. Die Thread-Verarbeitung Ihrer Bestellung würde blockieren, während das Warten auf die Kreditkarte überprüft werden, aber dieser Block wäre nicht sehr lange für den Benutzer, und der Server kann immer einen anderen Thread auf dem Prozessor laufen, während sein Warten. In der LMAX-Architektur würden Sie diese Operation in zwei Teile aufteilen. Die erste Operation würde die Auftragsinformationen erfassen und durch Ausgeben eines Ereignisses (Kreditkartenvalidierung angefordert) an das Kreditkartenunternehmen beenden. Der Geschäftslogikprozessor würde dann die Verarbeitung von Ereignissen für andere Kunden weiterverarbeiten, bis er in seinem Eingangsereignisstrom ein kreditkartengültiges Ereignis empfangen hat. Bei der Verarbeitung dieses Ereignisses würde es die Bestätigungsaufgaben für diesen Auftrag ausführen. Arbeiten in dieser Art von ereignisgesteuerten, asynchronen Stil, ist etwas ungewöhnlich - obwohl mit asynchrony, um die Reaktionsfähigkeit einer Anwendung zu verbessern, ist eine vertraute Technik. Es hilft auch die Geschäftsprozesse widerstandsfähiger, da müssen Sie expliziter im Denken über die verschiedenen Dinge, die mit der Remote-Anwendung passieren können. Ein zweites Merkmal des Programmiermodells liegt in der Fehlerbehandlung. Das traditionelle Modell von Sitzungen und Datenbank-Transaktionen bietet eine hilfreiche Fehlerbehandlung Fähigkeit. Sollte etwas schief gehen, ist es einfach, alles wegzuwerfen, was bisher in der Interaktion passiert ist. Session-Daten sind transient und können verworfen werden, auf Kosten einer Irritation für den Benutzer, wenn in der Mitte etwas kompliziert. Wenn ein Fehler auf der Datenbankseite auftritt, können Sie die Transaktion zurücksetzen. LMAXs in-Memory-Strukturen sind persistent über Eingabeereignisse, so dass, wenn es einen Fehler ist es wichtig, nicht verlassen, dass Speicher in einem inkonsistenten Zustand. Allerdings theres keine automatisierte Rollback-Anlage. Folglich legt das LMAX-Team große Aufmerksamkeit darauf, dass die Eingangsereignisse vollständig gültig sind, bevor irgendeine Mutation des persistenten Status im Speicher durchgeführt wird. Sie haben herausgefunden, dass das Testen ein Schlüsselinstrument ist, um diese Probleme vor der Produktion zu beseitigen. Ein - und Ausgabe-Disruptoren Obwohl die Geschäftslogik in einem einzigen Thread vorkommt, gibt es eine Anzahl von Aufgaben, bevor wir eine Business-Objekt-Methode aufrufen können. Die ursprüngliche Eingabe für die Verarbeitung kommt aus dem Draht in Form einer Nachricht, muss diese Nachricht in ein Formular, das für Business Logic Processor zu verwenden unmarshaled werden. Event Sourcing beruht darauf, ein dauerhaftes Journal aller Eingangsereignisse aufzubewahren, so dass jede Eingangsnachricht auf einem dauerhaften Speicher gelagert werden muss. Schließlich beruht die Architektur auf einem Cluster von Business Logic Processors, so dass wir die Eingabemeldungen in diesem Cluster replizieren müssen. Ebenso müssen ausgangsseitig die Ausgabeereignisse zur Übertragung über das Netzwerk marshaled werden. Abbildung 2: Die durch den Input Disruptor durchgeführten Aktivitäten (unter Verwendung der UML-Aktivitätsdiagramm-Notation) Der Replikator und der Journaler umfassen IO und sind daher relativ langsam. Nach allem ist die zentrale Idee von Business Logic Processor, dass es keine IO vermeidet. Auch diese drei Aufgaben sind relativ unabhängig, alle von ihnen müssen getan werden, bevor der Business Logic Processor auf eine Nachricht arbeitet, aber sie können in beliebiger Reihenfolge durchgeführt werden. So im Gegensatz zu den Business Logic Processor, wo jeder Handel den Markt für nachfolgende Trades ändert, gibt es eine natürliche Passform für Parallelität. Um diese Gleichzeitigkeit zu bewältigen, entwickelte das LMAX-Team eine spezielle Parallelitätskomponente, die sie Disruptor 11 nennen. Das LMAX-Team hat den Quellcode für den Disruptor mit einer Open-Source-Lizenz freigegeben. Auf einer groben Ebene kann man sich einen Disruptor als Multicast-Graphen von Warteschlangen vorstellen, bei denen die Produzenten Objekte darauf legen, die an alle Konsumenten zum parallelen Verbrauch durch separate Downstream-Warteschlangen gesendet werden. Wenn Sie nach innen schauen sehen Sie, dass dieses Netz von Warteschlangen wirklich eine einzelne Datenstruktur ist - ein Ringpuffer. Jeder Produzent und jeder Konsument hat einen Sequenzzähler, der angibt, welcher Slot im Puffer aktuell gerade arbeitet. Jeder Producerconsumer schreibt seinen eigenen Sequenzzähler, kann aber die anderen Sequenzzähler lesen. Auf diese Weise kann der Hersteller die Verbraucherzähler lesen, um sicherzustellen, dass der Steckplatz, den er schreiben möchte, ohne Sperren für die Zähler verfügbar ist. Ähnlich kann ein Verbraucher sicherstellen, dass er nur Nachrichten verarbeitet, sobald ein anderer Verbraucher damit fertig ist, indem er die Zähler beobachtet. Abbildung 3: Der Input Disruptor koordiniert einen Producer und vier Consumer Output-Disruptoren sind ähnlich, aber sie haben nur zwei sequentielle Consumer für Marshalling und Output.12 Output-Events sind in mehrere Themen organisiert, so dass nur an Empfänger, die interessiert sind, Nachrichten gesendet werden können in ihnen. Jedes Thema hat seinen eigenen Disruptor. Die Disruptoren Ive beschrieben werden in einem Stil mit einem Hersteller und mehrere Verbraucher verwendet, aber dies ist keine Einschränkung des Designs des Disruptors. Der Disruptor kann auch mit mehreren Herstellern arbeiten, in diesem Fall braucht er immer noch keine Schlösser.13 Ein Vorteil des Disruptor-Designs ist, dass es es den Verbrauchern erleichtert, schnell aufzuholen, wenn sie in ein Problem geraten und zurückfallen. Wenn der Unmarshaller ein Problem hat, wenn er auf Schlitz 15 arbeitet und zurückkehrt, wenn der Empfänger auf Schlitz 31 ist, kann er Daten von Schlitzen 16-30 in einer Charge lesen, um aufzuholen. Dieses Batch-Lesen der Daten von dem Disruptor macht es einfacher für rückständige Verbraucher, um schnell aufzuholen, wodurch die Gesamt-Latenz verringert wird. Ive beschrieb die Dinge hier, mit jeweils einem der Journaler, Replikator und Unmarshaler - das ist tatsächlich das, was LMAX macht. Aber das Design würde es ermöglichen, dass mehrere dieser Komponenten laufen. Wenn Sie zwei Journalisten liefen, dann würde man die geraden Schlitze nehmen und der andere Journaler würde die ungeraden Schlitze nehmen. Dies ermöglicht eine weitere Parallelität dieser IO-Operationen, falls dies erforderlich wird. Die Ringpuffer sind groß: 20 Millionen Steckplätze für Eingangspuffer und 4 Millionen Steckplätze für jeden der Ausgangspuffer. Die Sequenzzähler sind 64bit lange ganze Zahlen, die monoton zu erhöhen, auch als die Ringschlitze wrap.14 Der Puffer ist auf eine Größe, die eine Potenz von zwei, so dass der Compiler kann eine effiziente Modul-Operation zu tun, um von der Sequenz Zähler Zahl auf die Steckplatz-Nummer zu tun . Wie der Rest des Systems werden die Disruptoren über Nacht aufgeprallt. Diese Bounce ist vor allem getan, um Speicher zu wischen, so dass es weniger Chance auf eine teure Garbage Collection Event während des Handels. (Ich denke auch, dass es eine gute Angewohnheit ist, regelmäßig neu zu starten, so dass Sie proben, wie es für Notfälle zu tun.) Der Journalist Job ist es, alle Ereignisse in einer dauerhaften Form zu speichern, so dass sie wiedergegeben werden können, wenn etwas schief gehen. LMAX verwendet dafür keine Datenbank, sondern nur das Dateisystem. Sie streamen die Ereignisse auf die Festplatte. In modernen Worten, mechanische Festplatten sind schrecklich langsam für den zufälligen Zugriff, aber sehr schnell für das Streaming - daher ist die Tag-Line-Datenträger das neue Tape.15 Früher habe ich erwähnt, dass LMAX mehrere Kopien seines Systems in einem Cluster, um schnelles Failover zu unterstützen . Der Replikator hält diese Knoten synchron. Alle Kommunikation in LMAX nutzt IP Multicasting, so dass Clients nicht wissen müssen, welche IP-Adresse der Master-Knoten ist. Nur der Masterknoten hört direkt auf Eingabeereignisse zu und führt einen Replikator aus. Der Replikator sendet die Eingangsereignisse an die Slave-Knoten. Wenn der Masterknoten nach unten geht, wird sein Mangel an Herzschlag bemerkt, ein anderer Knoten wird Master, startet die Verarbeitung von Eingabeereignissen und startet den Replikator. Jeder Knoten hat seinen eigenen Eingang Disruptor und hat somit seine eigene Zeitschrift und tut seine eigene Unmarshaling. Selbst bei IP-Multicasting wird die Replikation dennoch benötigt, da IP-Nachrichten auf verschiedenen Knoten in einer anderen Reihenfolge ankommen können. Der Master-Knoten liefert eine deterministische Sequenz für den Rest der Verarbeitung. Der Unmarshaler schaltet die Ereignisdaten aus dem Draht in ein Java-Objekt, das verwendet werden kann, um Verhalten auf dem Business Logic Processor aufzurufen. Daher muss es im Gegensatz zu den anderen Konsumenten die Daten im Ringpuffer ändern, damit es dieses unmarshaled Objekt speichern kann. Die Regel hier ist, dass die Verbraucher erlaubt, in den Ringpuffer zu schreiben, aber jedes beschreibbare Feld kann nur einen parallelen Verbraucher, der erlaubt, es zu schreiben. Dies bewahrt das Prinzip, nur einen einzigen Schriftsteller zu haben. 16 Abbildung 4: Die LMAX-Architektur mit erweiterten Disruptoren Der Disruptor ist eine Allzweckkomponente, die außerhalb des LMAX-Systems verwendet werden kann. Normalerweise Finanzgesellschaften sind sehr geheimnisvoll über ihre Systeme, halten Ruhe sogar über Gegenstände, die arent germane zu ihrem Geschäft. Nicht nur hat LMAX offen über seine gesamte Architektur, sie haben Open-Sourced der Disruptor-Code - eine Handlung, die mich sehr glücklich macht. Nicht nur wird dies ermöglichen anderen Organisationen zu nutzen, die Disruptor, wird es auch für mehr Prüfung seiner Parallelität Eigenschaften zu ermöglichen. Warteschlangen und ihr Mangel an mechanischer Sympathie Die LMAX-Architektur fing Völker Aufmerksamkeit, weil seine eine ganz andere Art und Weise der Annäherung an ein Hochleistungs-System, was die meisten Menschen denken. Bisher habe ich darüber gesprochen, wie es funktioniert, aber havent tauchte zu viel in, warum es so entwickelt wurde. Diese Geschichte ist für sich interessant, weil diese Architektur nicht nur erscheinen. Es dauerte eine lange Zeit der Versuch, mehr konventionelle Alternativen, und erkennen, wo sie waren fehlerhaft, bevor das Team auf diesem ein. Die meisten Business-Systeme in diesen Tagen haben eine Kernarchitektur, die auf mehrere aktive Sitzungen über eine Transaktions-Datenbank koordiniert beruht. Das LMAX-Team war mit diesem Ansatz vertraut und zuversichtlich, dass es nicht für LMAX funktionieren würde. Diese Einschätzung wurde in den Erfahrungen von Betfair - der Muttergesellschaft, die LMAX gegründet hat - gegründet. Betfair ist eine Wett-Website, die es den Leuten erlaubt, auf Sportveranstaltungen zu wetten. Es behandelt sehr hohe Verkehrsvolumen mit einer Menge von Konkurrenz - Sportwetten neigen dazu, um bestimmte Ereignisse platzen. Um diese Arbeit haben sie eine der heißesten Datenbank-Installationen um und mussten viele unnatürliche Handlungen zu tun, damit es funktioniert. Basierend auf dieser Erfahrung wussten sie, wie schwierig es war, die Leistung von Betfairs aufrechtzuerhalten und war sicher, dass diese Art von Architektur nicht für die sehr geringe Latenz funktionieren würde, die eine Handelsstelle erfordern würde. Daher mussten sie einen anderen Ansatz finden. Ihr erster Ansatz war, zu folgen, was so viele heute sagen, dass, um hohe Leistung zu erhalten, müssen Sie explizite Parallelität zu verwenden. Für dieses Szenario bedeutet dies, dass Aufträge von mehreren Threads parallel verarbeitet werden können. Allerdings, wie es oft der Fall mit Parallelität, die Schwierigkeit kommt, weil diese Threads miteinander kommunizieren müssen. Die Bearbeitung einer Bestellung ändert die Marktbedingungen und diese Bedingungen müssen mitgeteilt werden. Der Ansatz, den sie früh erforschten, war das Schauspieler-Modell und seine Cousine SEDA. Das Actor-Modell setzt auf unabhängige, aktive Objekte mit eigenem Thread, die über Warteschlangen miteinander kommunizieren. Viele Menschen finden diese Art von Parallelität Modell viel einfacher zu behandeln, als zu versuchen, etwas auf der Grundlage von Sperren primitives tun. Das Team baute einen Prototyp-Austausch mit dem Schauspieler-Modell und führte Performance-Tests auf sie. Was sie gefunden, war, dass die Prozessoren mehr Zeit für die Verwaltung von Warteschlangen verbrachten als die reale Logik der Anwendung zu tun. Warteschlangenzugriff war ein Engpass. Wenn sie Leistung wie diese drückt, beginnt sie, wichtig zu werden, um zu berücksichtigen, wie moderne Hardware aufgebaut wird. Der Ausdruck, den Martin Thompson gern verwendet, ist mechanische Sympathie. Der Begriff kommt aus Rennwagen fahren und es spiegelt den Fahrer mit einem angeborenen Gefühl für das Auto, so können sie fühlen, wie man das Beste aus ihm zu bekommen. Viele Programmierer, und ich gestehe, ich falle in dieses Lager, haben nicht viel mechanische Sympathie für die Programmierung interagiert mit Hardware. Was ist schlimmer ist, dass viele Programmierer denken, sie haben mechanische Sympathie, aber seine auf Vorstellungen, wie Hardware verwendet, um zu arbeiten, die jetzt viele Jahre veraltet sind gebaut. Einer der dominierenden Faktoren mit modernen CPUs, die Latenz beeinflusst, ist, wie die CPU mit Speicher interagiert. Diese Tage gehen in den Hauptspeicher ist eine sehr langsame Operation in CPU-Begriffe. CPUs haben mehrere Cache-Ebenen, von denen jeder wesentlich schneller ist. So erhöhen Geschwindigkeit, die Sie Ihren Code und Daten in diesen Caches erhalten möchten. Auf einer Ebene hilft das Schauspielermodell hier. Sie können sich einen Akteur als sein eigenes Objekt, dass Cluster Code und Daten, die eine natürliche Einheit für Caching ist denken. Aber Akteure müssen kommunizieren, was sie durch Warteschlangen tun - und das LMAX-Team beobachtete, dass seine Warteschlangen, die das Caching stören. Die Erklärung läuft wie folgt: Um einige Daten auf eine Warteschlange zu stellen, müssen Sie in diese Warteschlange schreiben. Ebenso, um Daten aus der Warteschlange zu nehmen, müssen Sie in die Warteschlange schreiben, um das Entfernen durchzuführen. Dies ist Schreibkonkurrenz - mehr als ein Client muss möglicherweise auf die gleiche Datenstruktur schreiben. Um mit dem Schreibkonflikt umzugehen, verwendet eine Warteschlange oft Sperren. Wenn jedoch eine Sperre verwendet wird, kann dies einen Kontextwechsel zum Kernel verursachen. Wenn dies geschieht, wird der betreffende Prozessor wahrscheinlich die Daten in seinen Caches verlieren. Die Schlussfolgerung kam, dass, um das beste Caching-Verhalten zu erhalten, benötigen Sie ein Design, das nur ein Kern-Schreiben an jedem Speicher location17 hat. Mehrere Leser sind fein, verarbeiten Prozessoren häufig spezielle Hochgeschwindigkeitsverbindungen zwischen ihren Caches. Aber Warteschlangen scheitern das Ein-Schriftsteller-Prinzip. Diese Analyse führte das LMAX-Team zu einigen Schlussfolgerungen. Erstens führte sie zur Konstruktion des Disruptors, der entschieden dem Single-Writer-Constraint folgt. Zweitens führte es zu der Idee, die Single-Thread-Business-Logik-Ansatz zu erforschen, die Frage, wie schnell ein einziges Thread gehen kann, wenn es von Concurrency-Management befreit. The essence of working on a single thread, is to ensure that you have one thread running on one core, the caches warm up, and as much memory access as possible goes to the caches rather than to main memory. This means that both the code and the working set of data needs to be as consistently accessed as possible. Also keeping small objects with code and data together allows them to be swapped between the caches as a unit, simplifying the cache management and again improving performance. An essential part of the path to the LMAX architecture was the use of performance testing. The consideration and abandonment of an actor-based approach came from building and performance testing a prototype. Similarly much of the steps in improving the performance of the various components were enabled by performance tests. Mechanical sympathy is very valuable - it helps to form hypotheses about what improvements you can make, and guides you to forward steps rather than backward ones - but in the end its the testing gives you the convincing evidence. Performance testing in this style, however, is not a well-understood topic. Regularly the LMAX team stresses that coming up with meaningful performance tests is often harder than developing the production code. Again mechanical sympathy is important to developing the right tests. Testing a low level concurrency component is meaningless unless you take into account the caching behavior of the CPU. One particular lesson is the importance of writing tests against null components to ensure the performance test is fast enough to really measure what real components are doing. Writing fast test code is no easier than writing fast production code and its too easy to get false results because the test isnt as fast as the component its trying to measure. Should you use this architecture At first glance, this architecture appears to be for a very small niche. After all the driver that led to it was to be able to run lots of complex transactions with very low latency - most applications dont need to run at 6 million TPS. But the thing that fascinates me about this application, is that they have ended up with a design which removes much of the programming complexity that plagues many software projects. The traditional model of concurrent sessions surrounding a transactional database isnt free of hassles. Theres usually a non-trivial effort that goes into the relationship with the database. Objectrelational mapping tools can help much of the pain of dealing with a database, but it doesnt deal with it all. Most performance tuning of enterprise applications involves futzing around with SQL. These days, you can get more main memory into your servers than us old guys could get as disk space. More and more applications are quite capable of putting all their working set in main memory - thus eliminating a source of both complexity and sluggishness. Event Sourcing provides a way to solve the durability problem for an in-memory system, running everything in a single thread solves the concurrency issue. The LMAX experience suggests that as long as you need less than a few million TPS, youll have enough performance headroom. There is a considerable overlap here with the growing interest in CQRS. An event sourced, in-memory processor is a natural choice for the command-side of a CQRS system. (Although the LMAX team does not currently use CQRS.) So what indicates you shouldnt go down this path This is always a tricky questions for little-known techniques like this, since the profession needs more time to explore its boundaries. A starting point, however, is to think of the characteristics that encourage the architecture. One characteristic is that this is a connected domain where processing one transaction always has the potential to change how following ones are processed. With transactions that are more independent of each other, theres less need to coordinate, so using separate processors running in parallel becomes more attractive. LMAX concentrates on figuring the consequences of how events change the world. Many sites are more about taking an existing store of information and rendering various combinations of that information to as many eyeballs as they can find - eg think of any media site. Here the architectural challenge often centers on getting your caches right. Another characteristic of LMAX is that this is a backend system, so its reasonable to consider how applicable it would be for something acting in an interactive mode. Increasingly web application are helping us get used to server systems that react to requests, an aspect that does fit in well with this architecture. Where this architecture goes further than most such systems is its absolute use of asynchronous communications, resulting in the changes to the programming model that I outlined earlier. These changes will take some getting used to for most teams. Most people tend to think of programming in synchronous terms and are not used to dealing with asynchrony. Yet its long been true that asynchronous communication is an essential tool for responsiveness. It will be interesting to see if the wider use of asynchronous communication in the javascript world, with AJAX and node. js, will encourage more people to investigate this style. The LMAX team found that while it took a bit of time to adjust to asynchronous style, it soon became natural and often easier. In particular error handling was much easier to deal with under this approach. The LMAX team certainly feels that the days of the coordinating transactional database are numbered. The fact that you can write software more easily using this kind of architecture and that it runs more quickly removes much of the justification for the traditional central database. For my part, I find this a very exciting story. Much of my goal is to concentrate on software that models complex domains. An architecture like this provides good separation of concerns, allowing people to focus on Domain-Driven Design and keeping much of the platform complexity well separated. The close coupling between domain objects and databases has always been an irritation - approaches like this suggest a way out. if you found this article useful, please share it. I appreciate the feedback and encouragement

Usd Jpy Devisenhandel Diagramm


Home raquo USDJPY Währungs-Chart USDJPY Währungs-Diagramm Das USDJPY-Paar war früher einer der populärsten Carry-Trades, aber seine Bedeutung hat sich aufgrund der sinkenden Zinsen in den USA verringert. Heute ist der Yen signifikant wertvoller als der historische Durchschnitt der Vergangenheit 10 Jahre. Das untenstehende USDJPY-Diagramm zeigt die aktuelle Marktaktion im Paar. In den folgenden Abschnitten diskutiert wersquoll eine kurze Zusammenfassung der japanischen Währungsgeschichte, gefolgt von einigen Empfehlungen zum Handel des Paares. USD steht für den amerikanischen Dollar, JPY für den japanischen Yen. Forex-Chart von CMS Forex kopieren In die Zwischenablage. Bitte beachten Sie: Die Wertentwicklung in der Vergangenheit ist kein Hinweis auf zukünftige Ergebnisse. Der US-Dollar Der US-Dollar ist die globale Reservewährung, der Dollar-Markt ist das internationale Handelsmedium, und das Worldrsquos-Finanzsystem wird auf Dollar-Basis geschaffen. Der US-Dollar, der im Jahre 1792 gegründet wurde, ist seit 1857 das einzige gesetzliche Zahlungsmittel in Amerika. Obwohl es die größte Volkswirtschaft mit der liberalsten und freien Struktur der großen Nationen der Welt ist, leiden die USA unter einem hohen Niveau an Staatsschulden, Laufende Kriege in verschiedenen Ländern, ein signifikantes, wenn auch abnehmendes Leistungsbilanzdefizit, ein angeschlagener Finanzsektor und ein nervöser Markt unsicher über die Dauer seiner künftigen Dominanz. Der Dollar bleibt im Moment jedoch die mit Abstand wichtigste Währung der Welt. Der japanische Yen Der japanische Yen (ausgesprochen en auf Japanisch) hat seine Wurzeln in der chinesischen Kaisermünze. Das chinesische System wurde von Japan während der frühen Interaktionen zwischen den beiden Nationen eingeführt. Das moderne Dezimalwährungssystem wurde zuerst während des Meiji-Modernisierungsprozesses formuliert, jedoch in einem Gesetz, das im Jahre 1871 herausgegeben wurde. Der Yen war eine unterbewertete Währung während eines Großteils seiner Geschichte in der Zeit nach dem Zweiten Weltkrieg. Als Japan rasch industrialisierte, um mit dem Westen aufzuholen, wurde die niedrigere Qualität der japanischen Waren teilweise durch höhere Erschwinglichkeit kompensiert, was zu einem allmählich steigenden japanischen Leistungsbilanzüberschuss führte. Da der Yen im Jahre 1949 auf 360 Yen 1 USD festgesetzt wurde, setzte dieser Leistungsbilanzüberschuss die Spannungen auf den Zapfen, und die Turbulenzen, die sich aus der US-Aufhebung des Goldstandards ergeben, zwangen Japan schließlich dazu, 1973 die Währung zu schwimmen Aber die japanische Regierung behauptete weiterhin, den Yen für einen Großteil des Zeitraums zwischen 1973 und 1985 auf künstlich niedrigen Werten zu halten. Der Preis schwankte während eines Großteils dieses Zeitraums zwischen 240 und 300 Yen pro Dollar, was eine anhaltende Blase unterstützte Japan zur gleichen Zeit. Als die Niedrig-Yen-Politik im Rahmen der Plaza Accord von 1985 teilweise aufgegeben wurde, erlebte der Yen einen starken Wertzuwachs (bis zu 128 pro Dollar), von dem angenommen wird, dass er den Kollaps der japanischen Blase ausgelöst hat, Die die Zentralbankraten zwang, sich auf ihrem derzeitigen extremen Niveau zu stabilisieren. Handel mit dem USDJPY-Paar Das USDJPY-Paar war das perfekte Paar des Carry-Trades und fungierte auch als Barometer, stürzte zu Zeiten erhöhter Risikoaversion und stieg rasch, wenn Händler optimistisch in die Zukunft blickten. Dies ist nach wie vor der Fall, aber das Übertragspotential von USDJPY ist viel geringer als das, was es im ersten Quartal 2008 war. Stattdessen hat das Jahr 2009 gesehen, dass der Yen weiterhin aufgrund des immer geringer werdenden und verschwindenden Zinsdifferentials, der schrecklichen Performance in der US-Wirtschaft (obwohl Japan wohl noch schlechter gehandelt hat) und der relativ leichten Flucht des japanischen Finanzsektors aus dem Die schlimmsten Unglücke der Krise. Obwohl die neue Regierung den Wählern eine andere Politik gegenüber einem stärkeren und durchsetzungsfähigeren Japan mit einer unabhängigen Außenpolitik und einer größeren Liberalisierung in wirtschaftlichen Fragen, dem mächtigen Schnittpunkt amerikanischer und japanischer Interessen sowie der entscheidenden Rolle des Exportsektors versprochen hat In der japanischen Wirtschaft haben bisher jede radikale Änderung der Politik verhindert. Da die gegenwärtige Periode ein Sturm und Verwirrung in der Politik ist, kann die Festlegung langfristiger Trades in USDJPY nicht die optimale Strategie sein. Die Bank von Japan intervenierte regelmäßig in den Devisenmärkten, um die Händler davon abzuhalten, den Yen zu sehr zu schätzen, doch das Aufkommen des Carry Traders hat es der Institution ermöglicht, diese Aufgabe den Marktteilnehmern zum größten Teil zu überlassen Carry-Trade wurden oft geäußert, keine ernsthafte Maßnahme wurde jemals getroffen. Heute Interventionen sind mehr und mehr schwierig aufgrund der US-Druck auf Japan, um ein Modell für China zu folgen, wie es den Währungs-PEG verlässt. Der Handel des USDJPY-Paares auf kurzfristiger Basis beinhaltet die üblichen Strategien und Einschränkungen, die in jedem anderen Paar gültig sind. Es ist darauf zu achten, dass die Händler nicht in Zeiten übermäßiger Volatilität verfangen werden. Wenn Sie ein Forex Trader werden möchten, besuchen Sie bitte unsere Forex Broker Überprüfung Abschnitt zu prüfen, unsere Wahl von einigen der vertrauenswürdigsten und kompetentesten Unternehmen auf dem Forex-Markt. Wir haben sie nach ihrer Anfängerfreundlichkeit und technischen Kompetenz im Allgemeinen eingestuft, damit Sie in Ihrem Auswahlprozess abwägen. Top Rated BrokersTrade USDJPY Spot Forex Der US-Dollar (USD, Greenback) ist die am meisten gehandelte Währung in der Welt. Der Emittent ist das Federal Reserve System (Fed). Ist die beliebteste Reservewährung, von Zentralbanken, Finanzinstituten und privaten Investoren gehalten wird als eine sichere Hafenwährung in Zeiten der Instabilität aufgrund der allgemein anerkannten Zuverlässigkeit der US-Wirtschaft gilt als Standard-Zahlung Einheit in Rohstoffmärkten verwendet Der japanische Yen (JPY) ist die drittgrößte Währung der Welt. Der Emittent ist die Bank von Japan. Wird als eine sichere Hafen-Währung aufgrund der niedrigen Inflation und hohe Stabilität der Nationen Wirtschaft ist gekennzeichnet durch relativ geringen Wert gegenüber anderen wichtigen Währungen durch sehr niedrige Zinsen Ist aktiv in den Handelsgeschäften, vor allem in Asien beteiligt. Niedrige Wechselkurs der nationalen Währung wurde historisch von der Regierung begünstigt, unterstützt Exporteure und trägt zum Wirtschaftswachstum Trade Currency Pairs und entdecken Sie die Vorteile des Forex-Handels mit IFC Markets IFCMARKETS. CORP 2006-2017 IFC Markets ist ein führender Makler auf den internationalen Finanzmärkten, der Online Forex Trading Services sowie zukünftige Index-, Aktien - und Rohstoff-CFDs anbietet. Das Unternehmen hat seit 2006 kontinuierlich seine Kunden in 18 Sprachen von 60 Ländern auf der ganzen Welt, in Übereinstimmung mit internationalen Standards der Vermittlung Dienstleistungen. Risiko-Warnung Hinweis: Forex-und CFD-Handel im OTC-Markt umfasst erhebliche Risiken und Verluste können Ihre Investitionen übersteigen. IFC Markets bietet keine Dienstleistungen für die USA und Japan an. Liv - und Historische USDJPY-Kurse Diese Grafik zeigt den Wert des US-Dollars (USD) gegenüber dem Wert des japanischen Yen (JPY) - also wie viele Yen sind Benötigt, um einen Dollar zu kaufen. Sowohl JPY als auch USD sind wichtige Währungen. USDJPY bildet ein großes Paar, aber es bildet kein Warenpaar. Der US-Dollar Obwohl viele Währungen den Namen Dollar teilen, ist der US-Dollar die stärkste Währung der Welt. Wichtige Rohstoffe wie Öl und Gold werden ausschließlich im Dollar gehandelt. Einige Unternehmen handeln ihre Aktien ausschließlich in den Dollar als gut. Sein Wert wird sehr eng durch die Federal Reserves Anpassung der Dollarkredit Zinsen gesteuert. Auf einmal war der chinesische Yuan an den Dollar gekoppelt, und für eine Zeit waren die USA bereit, den Stress, dass die Konfliktbeziehung zu halten, um diese Situation zu halten. Der Dollar ist die wichtigste Reservewährung. Hält fast das Doppelte des Wertes seines engsten Wettbewerbers, dem Euro. Der japanische Yen Aus japanischer Sicht ist der japanische Yen das drittstärkste Volumen, sowohl hinter dem US-Dollar als auch dem Euro. Diese Positionierung ist ein Beweis für den Erfolg des Exporthandels von Japan auf globaler Basis, wenn seine Bevölkerung nur 40 der Vereinigten Staaten ist. Die beliebteste Paarung ist die USDJPY-Kombination. Er beherrscht rund 17 täglichen Forex-Volumen, an zweiter Stelle nach dem EURUSD Paar bei 28 und vor dem GBPUSD, die bei 14 in dritter steht Wenn der japanische Yen in Währungskombinationen verwendet wird, ist der Pip an zweiter Stelle (.01 ) Im Gegensatz zum üblichen vierten Platz (.0001). Der japanische Yen hat seit 1973 einen variablen Zinssatz. Wie die US-Notenbank Federal Reserve behält die Bank of Japan (BOJ) das japanische Yen eng beherrscht. In den Jahrzehnten nach 1990 nutzte die Bank von Japan ihre Macht, die Zinsen niedrig auf dem Yen zu halten, wodurch die Yens-Popularität als Carry-Währung gestärkt wurde und der Zweck der wachsenden Investitionen in japanische Vermögenswerte erreicht werden sollte. Die japanische Wirtschaft hat sich in zwei langen Jahrzehnten ein minimales Wachstum, aber die neue Regierung im Jahr 2012, in Verbindung mit der Bank of Japan, verfolgt eine aggressive Politik der quantitativen Lockerung verstrickt worden, um die Yen und stimulieren die Nachfrage nach seinen Exporthandel zu schwächen. Diese Arten von großen geldpolitischen Bewegungen sind sehr ungewöhnlich für die BOJ. Der Yen schätzte etwa 30 über sechs Monate, was zu Drohungen von Währungskriegen von ihren wichtigsten Handelspartnern führte. Der Konjunkturplan hat jedoch gearbeitet, und die japanische Wirtschaft erlebt derzeit eine sehr positive BIP-Wachstumsphase im Jahr 2013. Händler ziehen diese Währung aufgrund ihrer Stabilität und der vorsichtigen Natur der BOJ oftmals vor. Aus diesem Grund war es auch die Händlerwahl als Basiswährung bei der Betrachtung einer Carry-Trade-Strategie. Viele dieser Trades wurden jedoch über Nacht nach dem großen Erdbeben vor ein paar Jahren abgewickelt. Unternehmen und Einzelpersonen plötzlich repatriiert Übersee Investitionen und Gewinne, wodurch schwere Nachfrage Nachfrage für den Yen. Verstärkte Bewegungen einer Basiswährung in einem Carry-Trade können zu massiven Verlusten führen, wenn die Positionen nicht ordnungsgemäß abgesichert oder abgewickelt werden. USDJPY Analyse Wie andere Währungspaare hat das USDJPY-Paar aus vielen Gründen eine einzigartige Persönlichkeit. Hier sind einige davon: Die Bewegung im Yen korreliert gut mit Änderungen im 10-jährigen Schatzanweisungsindex. Wenn eine Krise schlägt, kann der Yen eine bevorzugte sichere Hafen, wie Edelmetalle oder US-Schatzkammern zu werden. Händler sehen den Yen manchmal als Proxy für den Handel im chinesischen Yuan. Änderungen im Yuan werden von der Regierung kontrolliert, aber nur, nachdem Druck auf dem Markt aufgebaut hat. Der Yen wird diese Erwartungen widerspiegeln. Der Yen ist tendenziell übermäßig empfindlich auf politische Ereignisse, da der japanische Exporthandel weltweit so allgegenwärtig ist. Das USDJPY-Paar tendiert auch dazu, in seinen Preisbewegungen konsequenter zu sein, ein weiterer Grund dafür, dass Anfänger dieses Handelspaar bevorzugen. Die Vorsicht der BOJ und ihr natürliches Verlangen nach Konsens vor dem Handeln vermittelt Vorhersagbarkeit, die einige als Herdinstinkt bezeichnen. In anderen Worten, der Euro ist für viele Kopf-Fälschungen bekannt, bevor er seinen Verstand bildet, aber der Yen wird in einer erwarteten Flugbahn vorgehen, ohne ein Überwiegen von falschen Ausbrüchen. Für Händler, die an dem USDJPY-Paar interessiert sind, wäre es ihnen wichtig, sich über die Candlestick-Formationen und das Ichimoku-Handelssystem zu informieren. Besonders was die Kumo-Wolke und ihre Verästelungen anbelangt. Forex Kommentar in der Region oft spricht, wie diese technischen Tools reagieren auf die Marktbedingungen. Asiatische Händler basieren viele ihrer Erkenntnisse auf diese Methoden, wie gut. Die tägliche Handelsspanne kann ein bisschen weniger als volatilere Währungen wie der Euro und das Pfund sein, aber die beste Zeit zum Handel ist während der asiatischen Handelssitzungen, wenn die Liquidität am höchsten ist. Sie können Zeuge eines Rückgangs der Liquidität am letzten Tag eines jeden Monats, wenn wichtige Institutionen auf dem Markt aus welchem ​​Grund auch immer fehlen. OptiLab Partners AB Fatburs Brunnsgata 31 118 28 Stockholm Schweden Der Handel mit Devisen an der Marge hat ein hohes Risiko und ist möglicherweise nicht für alle Anleger geeignet. Der hohe Grad der Hebelwirkung kann sowohl gegen Sie als auch für Sie arbeiten. Vor der Entscheidung, in Devisen zu investieren, sollten Sie sorgfältig überlegen Sie Ihre Anlageziele, Erfahrung und Risikobereitschaft. Keine Informationen oder Meinung auf dieser Website sollte als eine Aufforderung oder ein Angebot zum Kauf oder Verkauf von Währung, Eigenkapital oder andere Finanzinstrumente oder Dienstleistungen genommen werden. Die Wertentwicklung in der Vergangenheit ist kein Hinweis auf die zukünftige Wertentwicklung. Bitte lesen Sie unsere rechtlichen Hinweise. Kopie 2017 OptiLab Partners AB. Alle Rechte vorbehalten.

Moving Average Trend Schätzung


Die ARIMA-Modelle sind in der Theorie die allgemeinste Klasse von Modellen zur Prognose einer Zeitreihe, die durch Differenzierung (wenn nötig) vielleicht 8220 stationary8221 gemacht werden kann In Verbindung mit nichtlinearen Transformationen, wie zB Protokollierung oder Abscheidung (falls erforderlich). Eine Zufallsvariable, die eine Zeitreihe ist, ist stationär, wenn ihre statistischen Eigenschaften alle über die Zeit konstant sind. Eine stationäre Reihe hat keinen Trend, ihre Variationen um ihren Mittelwert haben eine konstante Amplitude, und sie wackelt in einer konsistenten Weise. D. h. seine kurzzeitigen Zufallszeitmuster sehen immer im statistischen Sinne gleich aus. Die letztgenannte Bedingung bedeutet, daß ihre Autokorrelationen (Korrelationen mit ihren eigenen vorherigen Abweichungen vom Mittelwert) über die Zeit konstant bleiben oder daß ihr Leistungsspektrum über die Zeit konstant bleibt. Eine zufällige Variable dieser Form kann (wie üblich) als eine Kombination von Signal und Rauschen betrachtet werden, und das Signal (wenn eines offensichtlich ist) könnte ein Muster einer schnellen oder langsamen mittleren Reversion oder einer sinusförmigen Oszillation oder eines schnellen Wechsels im Vorzeichen sein , Und es könnte auch eine saisonale Komponente. Ein ARIMA-Modell kann als 8220filter8221 betrachtet werden, das versucht, das Signal vom Rauschen zu trennen, und das Signal wird dann in die Zukunft extrapoliert, um Prognosen zu erhalten. Die ARIMA-Vorhersagegleichung für eine stationäre Zeitreihe ist eine lineare Gleichung (d. H. Regressionstyp), bei der die Prädiktoren aus Verzögerungen der abhängigen Variablen und oder Verzögerungen der Prognosefehler bestehen. Das heißt: Vorhergesagter Wert von Y eine Konstante undeine gewichtete Summe aus einem oder mehreren neuen Werten von Y und einer gewichteten Summe aus einem oder mehreren neuen Werten der Fehler. Wenn die Prädiktoren nur aus verzögerten Werten von Y bestehen, handelt es sich um ein reines autoregressives Modell (8220 selbst-regressed8221), das nur ein Spezialfall eines Regressionsmodells ist und mit einer Standard-Regressions-Software ausgestattet werden kann. Beispielsweise ist ein autoregressives Modell erster Ordnung (8220AR (1) 8221) für Y ein einfaches Regressionsmodell, bei dem die unabhängige Variable nur um eine Periode (LAG (Y, 1) in Statgraphics oder YLAG1 in RegressIt) verzögert ist. Wenn einige der Prädiktoren Verzögerungen der Fehler sind, handelt es sich bei einem ARIMA-Modell nicht um ein lineares Regressionsmodell, da es keine Möglichkeit gibt, 8220last period8217s error8221 als eine unabhängige Variable festzulegen: Die Fehler müssen auf einer Periodenperiode berechnet werden Wenn das Modell an die Daten angepasst ist. Aus technischer Sicht ist das Problem der Verwendung von verzögerten Fehlern als Prädiktoren, dass die Vorhersagen von model8217s keine linearen Funktionen der Koeffizienten sind. Obwohl es sich um lineare Funktionen der vergangenen Daten handelt. Daher müssen Koeffizienten in ARIMA-Modellen, die verzögerte Fehler enthalten, durch nichtlineare Optimierungsmethoden (8220hill-climbing8221) abgeschätzt werden, anstatt nur ein Gleichungssystem zu lösen. Das Akronym ARIMA steht für Auto-Regressive Integrated Moving Average. Die Verzögerungen der stationären Reihe in der Prognose-Gleichung werden als autoregressiveQuot-Terme bezeichnet, die Verzögerungen der Prognosefehler werden als mittlere Mittelwert-Terme bezeichnet und eine Zeitreihe, die differenziert werden muß, um stationär gemacht zu werden, wird als eine integrierte quotierte Version einer stationären Reihe bezeichnet. Random-walk und random-trend Modelle, autoregressive Modelle und exponentielle Glättungsmodelle sind alle Sonderfälle von ARIMA Modellen. Ein nicht seasonales ARIMA-Modell wird als ein quotarIMA-Modell (p, d, q) klassifiziert, wobei p die Anzahl der autoregressiven Terme ist, d die Anzahl der für die Stationarität benötigten Nicht-Seasonal-Differenzen ist und q die Anzahl der verzögerten Prognosefehler ist Die Vorhersagegleichung. Die Vorhersagegleichung ist wie folgt aufgebaut. Zuerst bezeichne y die d - te Differenz von Y. Das bedeutet, daß die zweite Differenz von Y (der Fall d2) nicht die Differenz von 2 Perioden ist. Es ist vielmehr die erste Differenz der ersten Differenz. Was das diskrete Analogon einer zweiten Ableitung ist, d. h. die lokale Beschleunigung der Reihe anstatt ihres lokalen Takts. In Bezug auf y. Ist die allgemeine Prognose-Gleichung: Hier sind die gleitenden Durchschnittsparameter (9528217s) so definiert, daß ihre Vorzeichen in der Gleichung negativ sind, und zwar nach der Konvention von Box und Jenkins. Einige Autoren und Software (einschließlich der Programmiersprache R) definieren sie so, dass sie stattdessen Pluszeichen haben. Wenn tatsächliche Zahlen in die Gleichung gesteckt werden, gibt es keine Mehrdeutigkeit, aber es ist wichtig zu wissen, welche Konvention Ihre Software verwendet, wenn Sie die Ausgabe lesen. Oft werden dort die Parameter mit AR (1), AR (2), 8230 und MA (1), MA (2), 8230 usw. bezeichnet. Um das entsprechende ARIMA-Modell für Y zu identifizieren, beginnt man die Reihenfolge der Differenzierung zu bestimmen (D) Notwendigkeit, die Serie zu stationarisieren und die Brutto-Merkmale der Saisonalität zu beseitigen, möglicherweise in Verbindung mit einer variationsstabilisierenden Transformation, wie beispielsweise Protokollierung oder Entleerung. Wenn Sie an diesem Punkt anhalten und voraussagen, dass die differenzierten Serien konstant sind, haben Sie lediglich ein zufälliges oder zufälliges Trendmodell angebracht. Die stationäre Reihe kann jedoch weiterhin autokorrelierte Fehler aufweisen, was nahe legt, daß in der Vorhersagegleichung auch einige Anzahl von AR-Terme (p 8805 1) und einige MA-MA-Terme (q 8805 1) benötigt werden. Der Prozess der Bestimmung der Werte von p, d und q, die für eine gegebene Zeitreihe am besten sind, werden in späteren Abschnitten der Notizen (deren Links oben auf dieser Seite sind), aber eine Vorschau von einigen der Typen erörtert Von nicht-saisonalen ARIMA-Modellen, die üblicherweise angetroffen werden, ist unten angegeben. ARIMA (1,0,0) erstes autoregressives Modell: Wenn die Serie stationär und autokorreliert ist, kann sie vielleicht als ein Vielfaches ihres eigenen vorherigen Wertes plus einer Konstante vorhergesagt werden. Die Prognose-Gleichung ist in diesem Fall 8230, die Y auf sich selbst zurückgeblieben um eine Periode zurückgeblieben ist. Dies ist ein 8220ARIMA (1,0,0) constant8221 Modell. Wenn der Mittelwert von Y Null ist, dann würde der konstante Term nicht eingeschlossen werden. Wenn der Steigungskoeffizient 981 & sub1; positiv und kleiner als 1 in der Grße ist (er muß kleiner als 1 in der Grße sein, wenn Y stationär ist), beschreibt das Modell ein Mittelrücksetzverhalten, bei dem der nächste Periodenblockwert 981 1 mal als vorhergesagt werden sollte Weit weg vom Durchschnitt, wie dieser Zeitraum8217s Wert. Wenn 981 & sub1; negativ ist, prognostiziert es ein Mittelwert-Wiederherstellungsverhalten mit einer Veränderung von Vorzeichen, d. h. es sagt auch voraus, daß Y unterhalb der mittleren nächsten Periode liegt, wenn sie über dem Mittel dieser Periode liegt. In einem autoregressiven Modell zweiter Ordnung (ARIMA (2,0,0)), würde es auch einen Yt-2-Term auf der rechten Seite geben, und so weiter. Abhängig von den Zeichen und Größen der Koeffizienten kann ein ARIMA (2,0,0) - Modell ein System beschreiben, dessen mittlere Reversion sinusförmig oszillierend erfolgt, wie die Bewegung einer Masse auf einer Feder, die zufälligen Schocks ausgesetzt ist . ARIMA (0,1,0) zufälliger Weg: Wenn die Reihe Y nicht stationär ist, ist das einfachste mögliche Modell ein zufälliges Wandermodell, das als Begrenzungsfall eines AR (1) - Modells betrachtet werden kann, in dem die autoregressive Koeffizient ist gleich 1, dh eine Reihe mit unendlich langsamer mittlerer Reversion. Die Vorhersagegleichung für dieses Modell kann folgendermaßen geschrieben werden: wobei der konstante Term die mittlere Periodenperiodenänderung (dh die Langzeitdrift) in Y ist. Dieses Modell könnte als ein No-Intercept-Regressionsmodell angepasst werden, in dem die Die erste Differenz von Y ist die abhängige Variable. Da es nur einen nicht sonderbaren Unterschied und einen konstanten Term enthält, wird er als quotarima (0,1,0) - Modell mit constant. quot klassifiziert. Das random-walk-ohne - driftmodell wäre ein ARIMA (0,1, 0) - Modell ohne konstantes ARIMA (1,1,0) differenziertes autoregressives Modell erster Ordnung: Wenn die Fehler eines Zufallswegmodells autokorreliert werden, kann das Problem möglicherweise durch Hinzufügen einer Verzögerung der abhängigen Variablen zu der Vorhersagegleichung - - ie Durch Rückgang der ersten Differenz von Y auf sich selbst verzögert um eine Periode. Dies würde die folgende Vorhersagegleichung ergeben, die umgeordnet werden kann: Dies ist ein autoregressives Modell erster Ordnung mit einer Ordnung der Nichtsaisonaldifferenzierung und einem konstanten Term - d. e. Ein ARIMA (1,1,0) - Modell. ARIMA (0,1,1) ohne konstante einfache exponentielle Glättung: Eine weitere Strategie zur Korrektur autokorrelierter Fehler in einem Random-Walk-Modell wird durch das einfache exponentielle Glättungsmodell vorgeschlagen. Es sei daran erinnert, dass für einige nichtstationäre Zeitreihen (z. B. diejenigen, die geräuschschwankungen um einen langsam variierenden Mittelwert aufweisen) das Zufallswegmodell nicht ebenso gut funktioniert wie ein gleitender Durchschnitt von vergangenen Werten. Mit anderen Worten, anstatt die letzte Beobachtung als Prognose der nächsten Beobachtung zu nehmen, ist es besser, einen Durchschnitt der letzten Beobachtungen zu verwenden, um das Rauschen herauszufiltern und das lokale Mittel genauer zu schätzen. Das einfache exponentielle Glättungsmodell verwendet einen exponentiell gewichteten gleitenden Durchschnitt vergangener Werte, um diesen Effekt zu erzielen. Die Vorhersagegleichung für das einfache exponentielle Glättungsmodell kann in einer Anzahl mathematisch äquivalenter Formen geschrieben werden. Von denen eine die sogenannte 8220-Fehlerkorrektur8221-Form ist, in der die vorhergehende Prognose in der Richtung ihres Fehlers angepasst wird: Weil e t-1 Y t-1 - 374 t-1 per Definition umgeschrieben werden kann : Es handelt sich um eine ARIMA (0,1,1) - konstante Vorhersagegleichung mit 952 1 1 - 945. Dies bedeutet, dass Sie eine einfache exponentielle Glättung durch Angabe als ARIMA (0,1,1) - Modell ohne passen Konstant und der geschätzte MA (1) - Koeffizient entspricht 1-minus-alpha in der SES-Formel. Denken Sie daran, dass im SES-Modell das durchschnittliche Alter der Daten in den 1-Periodenprognosen 1 945 beträgt, was bedeutet, dass sie tendenziell hinter Trends oder Wendepunkten um etwa 1 945 Perioden zurückbleiben werden. Daraus folgt, dass das Durchschnittsalter der Daten in den 1-Periodenprognosen eines ARIMA-Modells (0,1,1) ohne Konstante 1 (1 - 952 1) ist. Wenn beispielsweise 952 1 0,8 beträgt, ist das Durchschnittsalter 5. Da sich 952 1 1 nähert, wird das ARIMA-Modell (0,1,1) ohne Konstante zu einem sehr langfristigen gleitenden Durchschnitt und als 952 1 Ansätze 0 wird es ein random-walk-ohne-Drift-Modell. What8217s der beste Weg, um für Autokorrelation zu korrigieren: Hinzufügen von AR-Begriffe oder Hinzufügen von MA-Begriffen In den vorherigen beiden Modellen, die oben diskutiert wurden, wurde das Problem der autokorrelierten Fehler in einem zufälligen Fußmodell auf zwei verschiedene Arten behoben: durch Hinzufügen eines Verzögerungswertes der differenzierten Reihe Auf die Gleichung oder das Hinzufügen eines verzögerten Wertes des Prognosefehlers. Welcher Ansatz am besten ist Eine Regel für diese Situation, die später noch ausführlicher diskutiert wird, besteht darin, dass die positive Autokorrelation normalerweise am besten durch Hinzufügen eines AR-Terms zum Modell behandelt wird und negative Autokorrelation in der Regel am besten durch Hinzufügen eines MA-Semester. In der Wirtschafts - und Wirtschaftszeitreihe entsteht häufig eine negative Autokorrelation als Artefakt der Differenzierung. (Im allgemeinen differenziert die Differenzierung die positive Autokorrelation und kann sogar einen Wechsel von positiver zu negativer Autokorrelation bewirken.) Daher wird das ARIMA (0,1,1) - Modell, in dem die Differenzierung von einem MA-Begriff begleitet wird, häufiger verwendet als ein ARIMA-Modell (1,1,0). ARIMA (0,1,1) mit konstanter einfacher exponentieller Glättung mit Wachstum: Durch die Implementierung des SES-Modells als ARIMA-Modell gewinnen Sie tatsächlich etwas Flexibilität. Zuerst darf der geschätzte MA (1) - Koeffizient negativ sein. Dies entspricht einem Glättungsfaktor von mehr als 1 in einem SES-Modell, das nach dem SES-Modellanpassungsverfahren üblicherweise nicht zulässig ist. Zweitens haben Sie die Möglichkeit, einen konstanten Term in das ARIMA-Modell zu integrieren, wenn Sie es wünschen, um einen durchschnittlichen Trend, der nicht Null ist, abzuschätzen. Das Modell ARIMA (0,1,1) mit Konstante hat die Vorhersagegleichung: Die Ein-Perioden-Prognosen aus diesem Modell sind qualitativ denjenigen des SES-Modells ähnlich, mit der Ausnahme, dass die Trajektorie der Langzeitprognosen typischerweise a ist (Deren Neigung gleich mu ist) und nicht eine horizontale Linie. ARIMA (0,2,1) oder (0,2,2) ohne konstante lineare exponentielle Glättung: Lineare exponentielle Glättungsmodelle sind ARIMA-Modelle, die zwei nicht-sauren Differenzen in Verbindung mit MA-Begriffen verwenden. Die zweite Differenz einer Folge Y ist nicht einfach die Differenz von Y und selbst von zwei Perioden verzögert, sondern sie ist die erste Differenz der ersten Differenz - i. e. Die Änderung in der Änderung von Y in der Periode t. Somit ist die zweite Differenz von Y in der Periode t gleich (Yt - Yt - 1) - (Yt - 1 - Yt - 2) Yt - 2Yt - 1Yt - 2. Eine zweite Differenz einer diskreten Funktion ist analog zu einer zweiten Ableitung einer stetigen Funktion: sie mißt zu einem gegebenen Zeitpunkt die Quota-Beschleunigungquot oder quotvequot in der Funktion. Das ARIMA (0,2,2) - Modell ohne Konstante sagt voraus, daß die zweite Differenz der Reihe eine lineare Funktion der letzten beiden Prognosefehler ist, die umgeordnet werden können: wobei 952 1 und 952 2 die MA (1) und MA (2) Koeffizienten. Dies ist ein allgemeines lineares exponentielles Glättungsmodell. Im Wesentlichen das gleiche wie Holt8217s Modell, und Brown8217s Modell ist ein spezieller Fall. Es verwendet exponentiell gewichtete gleitende Mittelwerte, um sowohl eine lokale Ebene als auch einen lokalen Trend in der Reihe abzuschätzen. Die Langzeitprognosen von diesem Modell konvergieren zu einer Geraden, deren Steigung von dem durchschnittlichen Trend abhängt, der gegen Ende der Reihe beobachtet wird. ARIMA (1,1,2) ohne konstante gedämpfte lineare Exponentialglättung. Dieses Modell ist in den begleitenden Dias auf ARIMA-Modellen dargestellt. Es extrapoliert die lokale Tendenz am Ende der Serie, sondern flacht es auf längere Prognose Horizonte, um eine Notiz von Konservatismus, eine Praxis, die empirische Unterstützung hat einzuführen. Siehe den Artikel auf quotWarum die Damped Trend Werke von Gardner und McKenzie und die quotGolden Rulequot Artikel von Armstrong et al. für Details. Es ist grundsätzlich ratsam, bei Modellen zu bleiben, bei denen mindestens einer von p und q nicht größer als 1 ist, dh nicht versuchen, ein Modell wie ARIMA (2,1,2) anzubringen, da dies zu Überbeanspruchungen führen kann Die in den Anmerkungen zur mathematischen Struktur von ARIMA-Modellen näher erläutert werden. Spreadsheet-Implementierung: ARIMA-Modelle wie die oben beschriebenen lassen sich einfach in einer Tabellenkalkulation implementieren. Die Vorhersagegleichung ist einfach eine lineare Gleichung, die sich auf vergangene Werte von ursprünglichen Zeitreihen und vergangenen Werten der Fehler bezieht. So können Sie eine ARIMA-Prognosekalkulation einrichten, indem Sie die Daten in Spalte A, die Prognoseformel in Spalte B und die Fehler (Daten minus Prognosen) in Spalte C speichern. Die Prognoseformel in einer typischen Zelle in Spalte B wäre einfach Ein linearer Ausdruck, der sich auf Werte in vorhergehenden Zeilen der Spalten A und C bezieht, multipliziert mit den entsprechenden AR - oder MA-Koeffizienten, die in Zellen an anderer Stelle auf dem Spreadsheet gespeichert sind. Moving durchschnittliche und exponentielle Glättungsmodelle Als erster Schritt, , Und lineare Trendmodelle, nicht-saisonale Muster und Trends können mit einem gleitenden Durchschnitt oder Glättungsmodell extrapoliert werden. Die grundlegende Annahme hinter Mittelwertbildung und Glättungsmodellen ist, dass die Zeitreihe lokal stationär mit einem sich langsam verändernden Mittelwert ist. Daher nehmen wir einen bewegten (lokalen) Durchschnitt, um den aktuellen Wert des Mittelwerts abzuschätzen und dann als die Prognose für die nahe Zukunft zu verwenden. Dies kann als Kompromiss zwischen dem mittleren Modell und dem random-walk-ohne-Drift-Modell betrachtet werden. Die gleiche Strategie kann verwendet werden, um einen lokalen Trend abzuschätzen und zu extrapolieren. Ein gleitender Durchschnitt wird oft als "quotsmoothedquot" - Version der ursprünglichen Serie bezeichnet, da die kurzzeitige Mittelung die Wirkung hat, die Stöße in der ursprünglichen Reihe zu glätten. Durch Anpassen des Glättungsgrades (die Breite des gleitenden Durchschnitts) können wir hoffen, eine Art von optimaler Balance zwischen der Leistung des Mittelwerts und der zufälligen Wandermodelle zu erreichen. Die einfachste Art der Mittelung Modell ist die. Einfache (gleichgewichtige) Moving Average: Die Prognose für den Wert von Y zum Zeitpunkt t1, der zum Zeitpunkt t gemacht wird, entspricht dem einfachen Mittelwert der letzten m Beobachtungen: (Hier und anderswo werde ich das Symbol 8220Y-hat8221 stehen lassen Für eine Prognose der Zeitreihe Y, die am frühestmöglichen früheren Zeitpunkt durch ein gegebenes Modell vorgenommen wurde.) Dieser Mittelwert wird auf den Zeitraum t (m1) 2 zentriert, was impliziert, daß die Schätzung des lokalen Mittels dazu tendiert, hinter dem wahr zu bleiben Wert des lokalen Mittels um etwa (m1) 2 Perioden. Somit ist das Durchschnittsalter der Daten im einfachen gleitenden Durchschnitt (m1) 2 relativ zu der Periode, für die die Prognose berechnet wird, angegeben: dies ist die Zeitspanne, in der die Prognosen dazu tendieren, hinter den Wendepunkten der Daten zu liegen . Wenn Sie z. B. die letzten 5 Werte mitteln, werden die Prognosen etwa 3 Perioden spät sein, wenn sie auf Wendepunkte reagieren. Beachten Sie, dass, wenn m1, die einfache gleitende Durchschnitt (SMA) - Modell ist gleichbedeutend mit der random walk-Modell (ohne Wachstum). Wenn m sehr groß ist (vergleichbar der Länge des Schätzzeitraums), entspricht das SMA-Modell dem mittleren Modell. Wie bei jedem Parameter eines Prognosemodells ist es üblich, den Wert von k anzupassen, um den besten Quotienten der Daten zu erhalten, d. H. Die kleinsten Prognosefehler im Durchschnitt. Hier ist ein Beispiel einer Reihe, die zufällige Fluktuationen um ein sich langsam veränderndes Mittel zu zeigen scheint. Erstens können wir versuchen, es mit einem zufälligen Fußmodell, das entspricht einem einfachen gleitenden Durchschnitt von 1 Begriff entspricht: Das zufällige gehen Modell reagiert sehr schnell auf Änderungen in der Serie, aber dabei nimmt sie einen Großteil der quotnoisequot in der Daten (die zufälligen Fluktuationen) sowie das Quotsignalquot (das lokale Mittel). Wenn wir stattdessen einen einfachen gleitenden Durchschnitt von 5 Begriffen anwenden, erhalten wir einen glatteren Satz von Prognosen: Der 5-Term-einfache gleitende Durchschnitt liefert in diesem Fall deutlich kleinere Fehler als das zufällige Wegmodell. Das Durchschnittsalter der Daten in dieser Prognose beträgt 3 ((51) 2), so dass es dazu neigt, hinter den Wendepunkten um etwa drei Perioden zu liegen. (Zum Beispiel scheint ein Abschwung in Periode 21 aufgetreten zu sein, aber die Prognosen drehen sich erst nach mehreren Perioden später.) Beachten Sie, dass die Langzeitprognosen des SMA-Modells eine horizontale Gerade sind, genau wie beim zufälligen Weg Modell. Somit geht das SMA-Modell davon aus, dass es keinen Trend in den Daten gibt. Während jedoch die Prognosen aus dem Zufallswegmodell einfach dem letzten beobachteten Wert entsprechen, sind die Prognosen des SMA-Modells gleich einem gewichteten Mittelwert der neueren Werte. Die von Statgraphics berechneten Konfidenzgrenzen für die Langzeitprognosen des einfachen gleitenden Durchschnitts werden nicht breiter, wenn der Prognosehorizont zunimmt. Dies ist offensichtlich nicht richtig Leider gibt es keine zugrunde liegende statistische Theorie, die uns sagt, wie sich die Vertrauensintervalle für dieses Modell erweitern sollten. Allerdings ist es nicht zu schwer, empirische Schätzungen der Konfidenzgrenzen für die längerfristigen Prognosen zu berechnen. Beispielsweise können Sie eine Tabellenkalkulation einrichten, in der das SMA-Modell für die Vorhersage von 2 Schritten im Voraus, 3 Schritten voraus usw. innerhalb der historischen Datenprobe verwendet wird. Sie könnten dann die Stichproben-Standardabweichungen der Fehler bei jedem Prognosehorizont berechnen und dann Konfidenzintervalle für längerfristige Prognosen durch Addieren und Subtrahieren von Vielfachen der geeigneten Standardabweichung konstruieren. Wenn wir einen 9-Term einfach gleitenden Durchschnitt versuchen, erhalten wir sogar noch bessere Prognosen und mehr von einem nacheilenden Effekt: Das Durchschnittsalter beträgt jetzt 5 Perioden ((91) 2). Wenn wir einen 19-term gleitenden Durchschnitt nehmen, steigt das Durchschnittsalter auf 10 an: Beachten Sie, dass die Prognosen tatsächlich hinter den Wendepunkten um etwa 10 Perioden zurückbleiben. Welches Maß an Glättung ist am besten für diese Serie Hier ist eine Tabelle, die ihre Fehlerstatistiken vergleicht, darunter auch einen 3-Term-Durchschnitt: Modell C, der 5-Term-Gleitender Durchschnitt, ergibt den niedrigsten Wert von RMSE mit einer kleinen Marge über die 3 - term und 9-Term-Mittelwerte, und ihre anderen Statistiken sind fast identisch. So können wir bei Modellen mit sehr ähnlichen Fehlerstatistiken wählen, ob wir ein wenig mehr Reaktionsfähigkeit oder ein wenig mehr Glätte in den Prognosen bevorzugen würden. (Rückkehr nach oben.) Browns Einfache Exponentialglättung (exponentiell gewichteter gleitender Durchschnitt) Das oben beschriebene einfache gleitende Durchschnittsmodell hat die unerwünschte Eigenschaft, daß es die letzten k-Beobachtungen gleich und vollständig ignoriert. Intuitiv sollten vergangene Daten in einer allmählicheren Weise diskontiert werden - zum Beispiel sollte die jüngste Beobachtung ein wenig mehr Gewicht als die zweitletzte erhalten, und die 2. jüngsten sollten ein wenig mehr Gewicht als die 3. jüngsten erhalten, und bald. Das einfache exponentielle Glättungsmodell (SES) erfüllt dies. 945 bezeichnen eine quotsmoothing constantquot (eine Zahl zwischen 0 und 1). Eine Möglichkeit, das Modell zu schreiben, besteht darin, eine Reihe L zu definieren, die den gegenwärtigen Pegel (d. H. Den lokalen Mittelwert) der Serie, wie er aus Daten bis zu der Zeit geschätzt wird, darstellt. Der Wert von L zur Zeit t wird rekursiv von seinem eigenen vorherigen Wert wie folgt berechnet: Somit ist der aktuelle geglättete Wert eine Interpolation zwischen dem vorher geglätteten Wert und der aktuellen Beobachtung, wobei 945 die Nähe des interpolierten Wertes auf die neueste steuert Überwachung. Die Prognose für die nächste Periode ist einfach der aktuelle geglättete Wert: Äquivalent können wir die nächste Prognose direkt in Form früherer Prognosen und früherer Beobachtungen in einer der folgenden gleichwertigen Versionen ausdrücken. In der ersten Version ist die Prognose eine Interpolation zwischen vorheriger Prognose und vorheriger Beobachtung: In der zweiten Version wird die nächste Prognose durch Anpassung der bisherigen Prognose in Richtung des bisherigen Fehlers um einen Bruchteil 945 erhalten Zeit t. In der dritten Version ist die Prognose ein exponentiell gewichteter (dh diskontierter) gleitender Durchschnitt mit Abzinsungsfaktor 1-945: Die Interpolationsversion der Prognoseformel ist am einfachsten zu verwenden, wenn Sie das Modell in einer Tabellenkalkulation implementieren Einzelne Zelle und enthält Zellverweise, die auf die vorhergehende Prognose, die vorherige Beobachtung und die Zelle mit dem Wert von 945 zeigen. Beachten Sie, dass, wenn 945 1, das SES-Modell zu einem zufälligen Weg-Modell (ohne Wachstum) äquivalent ist. Wenn 945 0 ist, entspricht das SES-Modell dem mittleren Modell, wobei angenommen wird, dass der erste geglättete Wert gleich dem Mittelwert gesetzt ist. (Zurück zum Seitenanfang.) Das Durchschnittsalter der Daten in der Simple-Exponential-Glättungsprognose beträgt 1 945, bezogen auf den Zeitraum, für den die Prognose berechnet wird. (Dies sollte nicht offensichtlich sein, kann aber leicht durch die Auswertung einer unendlichen Reihe gezeigt werden.) Die einfache gleitende Durchschnittsprognose neigt daher zu Verzögerungen hinter den Wendepunkten um etwa 1 945 Perioden. Wenn beispielsweise 945 0,5 die Verzögerung 2 Perioden beträgt, wenn 945 0,2 die Verzögerung 5 Perioden beträgt, wenn 945 0,1 die Verzögerung 10 Perioden und so weiter ist. Für ein gegebenes Durchschnittsalter (d. H. Eine Verzögerung) ist die einfache exponentielle Glättungsprognose (SES) der simplen gleitenden Durchschnittsprognose (SMA) etwas überlegen, weil sie relativ viel mehr Gewicht auf die jüngste Beobachtung - i. e stellt. Es ist etwas mehr quresponsivequot zu Änderungen, die sich in der jüngsten Vergangenheit. Zum Beispiel haben ein SMA - Modell mit 9 Terminen und ein SES - Modell mit 945 0,2 beide ein durchschnittliches Alter von 5 Jahren für die Daten in ihren Prognosen, aber das SES - Modell legt mehr Gewicht auf die letzten 3 Werte als das SMA - Modell und am Gleiches gilt für die Werte von mehr als 9 Perioden, wie in dieser Tabelle gezeigt: 822forget8221. Ein weiterer wichtiger Vorteil des SES-Modells gegenüber dem SMA-Modell ist, dass das SES-Modell einen Glättungsparameter verwendet, der kontinuierlich variabel ist und somit leicht optimiert werden kann Indem ein Quotsolverquot-Algorithmus verwendet wird, um den mittleren quadratischen Fehler zu minimieren. Der optimale Wert von 945 im SES-Modell für diese Serie ergibt sich wie folgt: Das durchschnittliche Alter der Daten in dieser Prognose beträgt 10.2961 3,4 Perioden, was ähnlich wie bei einem 6-term einfachen gleitenden Durchschnitt ist. Die Langzeitprognosen aus dem SES-Modell sind eine horizontale Gerade. Wie im SMA-Modell und dem Random-Walk-Modell ohne Wachstum. Es ist jedoch anzumerken, dass die von Statgraphics berechneten Konfidenzintervalle nun in einer vernünftigen Weise abweichen und dass sie wesentlich schmaler sind als die Konfidenzintervalle für das Zufallswegmodell. Das SES-Modell geht davon aus, dass die Serie etwas vorhersehbarer ist als das Zufallswandermodell. Ein SES-Modell ist eigentlich ein Spezialfall eines ARIMA-Modells. So dass die statistische Theorie der ARIMA-Modelle eine solide Grundlage für die Berechnung der Konfidenzintervalle für das SES-Modell bildet. Insbesondere ist ein SES-Modell ein ARIMA-Modell mit einer nicht sonderbaren Differenz, einem MA (1) - Term und kein konstanter Term. Ansonsten als quotARIMA (0,1,1) - Modell ohne Konstantquot bekannt. Der MA (1) - Koeffizient im ARIMA-Modell entspricht der Größe 1 - 945 im SES-Modell. Wenn Sie zum Beispiel ein ARIMA-Modell (0,1,1) ohne Konstante an die hier analysierte Serie anpassen, ergibt sich der geschätzte MA (1) - Koeffizient auf 0,7029, was fast genau ein Minus von 0,2961 ist. Es ist möglich, die Annahme eines von Null verschiedenen konstanten linearen Trends zu einem SES-Modell hinzuzufügen. Dazu wird ein ARIMA-Modell mit einer nicht sonderbaren Differenz und einem MA (1) - Term mit konstantem, d. H. Einem ARIMA-Modell (0,1,1) mit konstantem Wert angegeben. Die langfristigen Prognosen haben dann einen Trend, der dem durchschnittlichen Trend über den gesamten Schätzungszeitraum entspricht. Sie können dies nicht in Verbindung mit saisonalen Anpassungen tun, da die saisonalen Anpassungsoptionen deaktiviert sind, wenn der Modelltyp auf ARIMA gesetzt ist. Sie können jedoch einen konstanten langfristigen exponentiellen Trend zu einem einfachen exponentiellen Glättungsmodell (mit oder ohne saisonale Anpassung) hinzufügen, indem Sie die Inflationsanpassungsoption im Prognoseverfahren verwenden. Die prozentuale Zinssatzquote (prozentuale Wachstumsrate) pro Periode kann als der Steigungskoeffizient in einem linearen Trendmodell geschätzt werden, das an die Daten in Verbindung mit einer natürlichen Logarithmuswandlung angepasst ist, oder es kann auf anderen unabhängigen Informationen bezüglich der langfristigen Wachstumsperspektiven beruhen . (Rückkehr nach oben.) Browns Linear (dh doppelt) Exponentielle Glättung Die SMA-Modelle und SES-Modelle gehen davon aus, dass es in den Daten keine Tendenzen gibt (die in der Regel in Ordnung sind oder zumindest nicht zu schlecht für 1- Wenn die Daten relativ verrauscht sind), und sie können modifiziert werden, um einen konstanten linearen Trend, wie oben gezeigt, zu integrieren. Was ist mit kurzfristigen Trends Wenn eine Serie eine unterschiedliche Wachstumsrate oder ein zyklisches Muster zeigt, das sich deutlich gegen das Rauschen auszeichnet, und wenn es notwendig ist, mehr als eine Periode vorher zu prognostizieren, könnte die Schätzung eines lokalen Trends auch sein Ein Problem. Das einfache exponentielle Glättungsmodell kann verallgemeinert werden, um ein lineares exponentielles Glättungsmodell (LES) zu erhalten, das lokale Schätzungen sowohl des Niveaus als auch des Trends berechnet. Das einfachste zeitvariable Trendmodell ist Browns lineares exponentielles Glättungsmodell, das zwei verschiedene geglättete Serien verwendet, die zu verschiedenen Zeitpunkten zentriert sind. Die Prognoseformel basiert auf einer Extrapolation einer Linie durch die beiden Zentren. (Eine weiterentwickelte Version dieses Modells, Holt8217s, wird unten diskutiert.) Die algebraische Form des Brown8217s linearen exponentiellen Glättungsmodells, wie die des einfachen exponentiellen Glättungsmodells, kann in einer Anzahl von unterschiedlichen, aber äquivalenten Formen ausgedrückt werden. Die quadratische quadratische Form dieses Modells wird gewöhnlich wie folgt ausgedrückt: Sei S die einfach geglättete Reihe, die durch Anwendung einfacher exponentieller Glättung auf Reihe Y erhalten wird. Das heißt, der Wert von S in der Periode t ist gegeben durch: (Erinnern wir uns, Exponentielle Glättung, so würde dies die Prognose für Y in der Periode t1 sein.) Dann sei Squot die doppelt geglättete Folge, die man erhält, indem man eine einfache exponentielle Glättung (unter Verwendung desselben 945) auf die Reihe S anwendet: Schließlich die Prognose für Ytk. Für jedes kgt1 ist gegeben durch: Dies ergibt e & sub1; & sub0; (d. h. Cheat ein Bit, und die erste Prognose ist gleich der tatsächlichen ersten Beobachtung) und e & sub2; Y & sub2; 8211 Y & sub1; Nach denen die Prognosen unter Verwendung der obigen Gleichung erzeugt werden. Dies ergibt die gleichen Anpassungswerte wie die Formel auf der Basis von S und S, wenn diese mit S 1 S 1 Y 1 gestartet wurden. Diese Version des Modells wird auf der nächsten Seite verwendet, die eine Kombination von exponentieller Glättung mit saisonaler Anpassung veranschaulicht. Holt8217s Lineares Exponentialglättung Brown8217s LES-Modell berechnet lokale Schätzungen von Pegel und Trend durch Glätten der letzten Daten, aber die Tatsache, dass dies mit einem einzigen Glättungsparameter erfolgt, legt eine Einschränkung für die Datenmuster fest, die er anpassen kann: den Pegel und den Trend Dürfen nicht zu unabhängigen Preisen variieren. Holt8217s LES-Modell adressiert dieses Problem durch zwei Glättungskonstanten, eine für die Ebene und eine für den Trend. Zu jedem Zeitpunkt t, wie in Brown8217s-Modell, gibt es eine Schätzung L t der lokalen Ebene und eine Schätzung T t der lokalen Trend. Hier werden sie rekursiv aus dem zum Zeitpunkt t beobachteten Wert von Y und den vorherigen Schätzungen von Pegel und Trend durch zwei Gleichungen berechnet, die exponentielle Glättung separat anwenden. Wenn der geschätzte Pegel und der Trend zum Zeitpunkt t-1 L t82091 und T t-1 sind. Dann ist die Prognose für Y tshy, die zum Zeitpunkt t-1 gemacht worden wäre, gleich L t-1 T t-1. Wenn der tatsächliche Wert beobachtet wird, wird die aktualisierte Schätzung des Pegels rekursiv berechnet, indem zwischen Y tshy und seiner Prognose L t-1 T t-1 unter Verwendung von Gewichten von 945 und 1- 945 interpoliert wird. Die Änderung des geschätzten Pegels, Nämlich L t 8209 L t82091. Kann als eine verrauschte Messung des Trends zum Zeitpunkt t interpretiert werden. Die aktualisierte Schätzung des Trends wird dann rekursiv berechnet, indem zwischen L t 8209 L t82091 und der vorherigen Schätzung des Trends T t-1 interpoliert wird. Unter Verwendung der Gewichte von 946 und 1-946: Die Interpretation der Trendglättungskonstante 946 ist analog zu der Pegelglättungskonstante 945. Modelle mit kleinen Werten von 946 nehmen an, dass sich der Trend mit der Zeit nur sehr langsam ändert, während Modelle mit Größere 946 nehmen an, dass sie sich schneller ändert. Ein Modell mit einem großen 946 glaubt, dass die ferne Zukunft sehr unsicher ist, da Fehler in der Trendschätzung bei der Prognose von mehr als einer Periode ganz wichtig werden. (Rückkehr nach oben) Die Glättungskonstanten 945 und 946 können auf übliche Weise geschätzt werden, indem der mittlere quadratische Fehler der 1-Schritt-Voraus-Prognosen minimiert wird. Wenn dies in Statgraphics getan wird, erweisen sich die Schätzungen als 945 0.3048 und 946 0,008. Der sehr geringe Wert von 946 bedeutet, dass das Modell eine sehr geringe Veränderung im Trend von einer Periode zur nächsten annimmt, so dass dieses Modell im Grunde versucht, einen langfristigen Trend abzuschätzen. Analog zur Vorstellung des Durchschnittsalters der Daten, die bei der Schätzung der lokalen Ebene der Reihe verwendet werden, ist das Durchschnittsalter der Daten, die bei der Schätzung des lokalen Trends verwendet werden, proportional zu 1 946, wenn auch nicht exakt gleich . In diesem Fall erweist sich dies als 10.006 125. Dies ist eine sehr genaue Zahl, da die Genauigkeit der Schätzung von 946 nicht wirklich 3 Dezimalstellen beträgt, sondern sie ist von der gleichen Größenordnung wie die Stichprobengröße von 100 Dieses Modell ist Mittelung über eine ziemlich große Geschichte bei der Schätzung der Trend. Das Prognose-Diagramm unten zeigt, dass das LES-Modell einen etwas größeren lokalen Trend am Ende der Serie schätzt als der im SEStrend-Modell geschätzte konstante Trend. Außerdem ist der Schätzwert von 945 fast identisch mit dem, der durch Anpassen des SES-Modells mit oder ohne Trend erhalten wird, so dass dies fast das gleiche Modell ist. Nun, sehen diese aussehen wie vernünftige Prognosen für ein Modell, das soll Schätzung einer lokalen Tendenz Wenn Sie 8220eyeball8221 dieser Handlung, sieht es so aus, als ob der lokale Trend nach unten am Ende der Serie gedreht hat Was ist passiert Die Parameter dieses Modells Wurden durch Minimierung des quadratischen Fehlers von 1-Schritt-Voraus-Prognosen, nicht längerfristigen Prognosen, abgeschätzt, wobei der Trend keinen großen Unterschied macht. Wenn alles, was Sie suchen, 1-Schritt-vor-Fehler sind, sehen Sie nicht das größere Bild der Trends über (sagen) 10 oder 20 Perioden. Um dieses Modell im Einklang mit unserer Augapfel-Extrapolation der Daten zu erhalten, können wir die Trendglättungskonstante manuell anpassen, so dass sie eine kürzere Basislinie für die Trendschätzung verwendet. Wenn wir beispielsweise 946 0,1 setzen, beträgt das durchschnittliche Alter der Daten, die bei der Schätzung des lokalen Trends verwendet werden, 10 Perioden, was bedeutet, dass wir den Trend über die letzten 20 Perioden oder so mitteln. Here8217s, was das Prognose-Plot aussieht, wenn wir 946 0,1 setzen, während 945 0,3 halten. Dies scheint intuitiv vernünftig für diese Serie, obwohl es wahrscheinlich gefährlich, diesen Trend mehr als 10 Perioden in der Zukunft zu extrapolieren. Was ist mit den Fehlerstatistiken Hier ist ein Modellvergleich für die beiden oben gezeigten Modelle sowie drei SES-Modelle. Der optimale Wert von 945 für das SES-Modell beträgt etwa 0,3, aber ähnliche Ergebnisse (mit etwas mehr oder weniger Reaktionsfähigkeit) werden mit 0,5 und 0,2 erhalten. (A) Holts linearer Exp. Glättung mit alpha 0.3048 und beta 0,008 (B) Holts linear exp. Glättung mit alpha 0,3 (E) Einfache exponentielle Glättung mit alpha 0,3 (E) Einfache exponentielle Glättung mit alpha 0,2 Ihre Stats sind nahezu identisch, so dass wir wirklich die Wahl auf der Basis machen können Von 1-Schritt-Vorhersagefehlern innerhalb der Datenprobe. Wir müssen auf andere Überlegungen zurückgreifen. Wenn wir glauben, dass es sinnvoll ist, die aktuelle Trendschätzung auf das, was in den letzten 20 Perioden passiert ist, zugrunde zu legen, können wir für das LES-Modell mit 945 0,3 und 946 0,1 einen Fall machen. Wenn wir agnostisch sein wollen, ob es einen lokalen Trend gibt, dann könnte eines der SES-Modelle leichter zu erklären sein, und würde auch für die nächsten 5 oder 10 Perioden mehr Mittelprognosen geben. (Rückkehr nach oben.) Welche Art von Trend-Extrapolation am besten ist: horizontal oder linear Empirische Evidenz deutet darauf hin, dass es, wenn die Daten bereits für die Inflation angepasst wurden (wenn nötig), unprätent ist, kurzfristige linear zu extrapolieren Trends sehr weit in die Zukunft. Die heutigen Trends können sich in Zukunft aufgrund unterschiedlicher Ursachen wie Produktveralterung, verstärkte Konkurrenz und konjunkturelle Abschwünge oder Aufschwünge in einer Branche abschwächen. Aus diesem Grund führt eine einfache exponentielle Glättung oft zu einer besseren Out-of-Probe, als ansonsten zu erwarten wäre, trotz ihrer quotnaivequot horizontalen Trendextrapolation. Damped Trendmodifikationen des linearen exponentiellen Glättungsmodells werden in der Praxis häufig auch eingesetzt, um in seinen Trendprojektionen eine Note des Konservatismus einzuführen. Das Dämpfungs-Trend-LES-Modell kann als Spezialfall eines ARIMA-Modells, insbesondere eines ARIMA-Modells (1,1,2), implementiert werden. Es ist möglich, Konfidenzintervalle um langfristige Prognosen zu berechnen, die durch exponentielle Glättungsmodelle erzeugt werden, indem man sie als Spezialfälle von ARIMA-Modellen betrachtet. (Achtung: Nicht alle Software berechnet die Konfidenzintervalle für diese Modelle korrekt.) Die Breite der Konfidenzintervalle hängt ab von (i) dem RMS-Fehler des Modells, (ii) der Art der Glättung (einfach oder linear) (iii) dem Wert (S) der Glättungskonstante (n) und (iv) die Anzahl der Perioden vor der Prognose. Im Allgemeinen breiten sich die Intervalle schneller aus, da 945 im SES-Modell größer wird und sich viel schneller ausbreiten, wenn lineare statt einfache Glättung verwendet wird. Dieses Thema wird im Abschnitt "ARIMA-Modelle" weiter erläutert. (Zurück zum Seitenanfang.)