Thursday 12 October 2017

Moving Average Effizient Algorithmus


Ich versuche, den gleitenden Durchschnitt eines Signals zu berechnen. Der Signalwert (ein Doppel) wird zu beliebigen Zeiten aktualisiert. Ich bin auf der Suche nach einem effizienten Weg, um seine Zeit gewichteten Durchschnitt über ein Zeitfenster, in Echtzeit zu berechnen. Ich könnte es selbst tun, aber es ist schwieriger als ich dachte. Die meisten der Ressourcen Ive gefunden über das Internet berechnen gleitenden Durchschnitt des periodischen Signals, aber Mine Updates zu beliebigen Zeit. Kennt jemand gute Ressourcen für die Der Trick ist die folgende: Sie erhalten Updates zu beliebigen Zeiten über void update (int Zeit, float-Wert). Allerdings müssen Sie auch nachverfolgen, wenn ein Update fällt aus dem Zeitfenster, so dass Sie einen Alarm, der bei der Zeit N, die die vorherige Aktualisierung entfernt wird immer wieder in der Berechnung berücksichtigt. Wenn dies in Echtzeit geschieht, können Sie das Betriebssystem anfordern, einen Aufruf einer Methode void dropoffoldestupdate (int time) aufzurufen, die zum Zeitpunkt N aufgerufen werden soll. Wenn es sich um eine Simulation handelt, können Sie keine Hilfe vom Betriebssystem bekommen und müssen dies tun Tun Sie es manuell. In einer Simulation würden Sie Methoden mit der angegebenen Zeit als Argument aufrufen (was nicht mit der Echtzeit korreliert). Eine vernünftige Annahme ist jedoch, dass die Anrufe so gewartet werden, dass die Zeitargumente zunehmen. In diesem Fall müssen Sie eine sortierte Liste der Alarmzeitwerte pflegen und bei jedem Aktualisierungs - und Leseaufruf überprüfen, ob das Zeitargument größer ist als der Kopf der Alarmliste. Während es größer ist, tun Sie die alarmbezogene Verarbeitung (Drop off der ältesten Aktualisierung), entfernen Sie den Kopf und überprüfen Sie erneut, bis alle Alarme vor der angegebenen Zeit verarbeitet werden. Anschließend den Update-Aufruf durchführen. Ich habe bis jetzt angenommen, dass es offensichtlich ist, was Sie für die tatsächliche Berechnung tun würden, aber ich erarbeiten gerade für den Fall. Ich nehme an, Sie haben eine Methode float read (int Zeit), die Sie verwenden, um die Werte zu lesen. Das Ziel ist, diesen Anruf so effizient wie möglich zu machen. So berechnen Sie den gleitenden Durchschnitt nicht jedes Mal, wenn die Lesemethode aufgerufen wird. Stattdessen müssen Sie den Wert der letzten Aktualisierung oder des letzten Alarms vorberechnen und diesen Wert durch ein paar Gleitkommaoperationen anpassen, um die Zeit seit der letzten Aktualisierung zu berücksichtigen. (D. h. eine konstante Anzahl von Operationen, außer dass möglicherweise eine Liste von aufgestauten Alarmen verarbeitet wird). Hoffentlich ist dies klar - das sollte ein ganz einfacher Algorithmus und sehr effizient sein. Weitere Optimierung. Einer der verbleibenden Probleme ist, wenn eine große Anzahl von Updates innerhalb des Zeitfensters auftreten, dann gibt es eine lange Zeit, für die es weder liest noch Updates, und dann ein Lesen oder Update kommt entlang. In diesem Fall ist der obige Algorithmus ineffizient, wenn der Wert für jedes der Aktualisierungen, die herunterfallen, inkremental aktualisiert wird. Dies ist nicht notwendig, weil wir nur kümmern uns um die letzte Aktualisierung über das Zeitfenster so, wenn es einen Weg, um effizient drop off alle älteren Updates, würde es helfen. Um dies zu tun, können wir den Algorithmus ändern, um eine binäre Suche nach Updates durchzuführen, um das neueste Update vor dem Zeitfenster zu finden. Wenn es relativ wenige Updates gibt, die gelöscht werden müssen, dann kann man den Wert für jedes heruntergelassene Update inkremental aktualisieren. Aber, wenn es viele Updates gibt, die gelöscht werden müssen, dann kann man den Wert vom Kratzer neu berechnen, nachdem er weg von den alten Updates. Anhang auf Inkrementelle Berechnung: Ich sollte klären, was ich meine durch inkrementelle Berechnung oben in den Satz zwicken diesen Wert durch ein paar Gleitkomma-Operationen, um für den Ablauf der Zeit seit dem letzten Update. Initiale nicht-inkrementelle Berechnung: dann über die relevanten Aktualisierungen in der Reihenfolge der zunehmenden Zeit iterieren: movingaverage (sum lastupdate timesincelastupdate) windowlength. Nun, wenn genau ein Update fällt aus dem Fenster, aber keine neuen Updates eintreffen, stellen Sie die Summe als: (beachten Sie, es ist Priorupdate, deren Timestamp geändert, um den Beginn der letzten Fenster beginnt). Und wenn genau ein Update in das Fenster eintritt, aber keine neuen Updates abfallen, passen Sie die Summe als an: Wie offensichtlich sein sollte, ist dies eine grobe Skizze, aber hoffentlich zeigt es, wie Sie den Durchschnitt so halten können, dass es O (1) Operationen pro Update ist Auf amortisierte Basis. Aber beachten Sie weitere Optimierung im vorherigen Absatz. Beachten Sie auch Stabilitätsprobleme, auf die in einer älteren Antwort hingewiesen wird, was bedeutet, dass Gleitkomma-Fehler über eine große Anzahl derartiger Inkrementierungsoperationen akkumulieren können, so dass es eine Abweichung von dem Ergebnis der Vollberechnung gibt, die für die Anwendung signifikant ist. Wenn eine Annäherung OK und theres eine minimale Zeit zwischen Proben ist, könnten Sie versuchen, Super-Sampling. Sie haben ein Array, das gleichmäßig beabstandete Zeitintervalle repräsentiert, die kürzer als das Minimum sind, und zu jedem Zeitpunkt die letzte empfangene Probe speichern. Je kürzer das Intervall, desto näher ist der Mittelwert auf den wahren Wert. Der Zeitraum sollte nicht größer als die Hälfte des Minimums sein, oder es besteht die Möglichkeit, eine Stichprobe zu fehlen. Antwortete Dec 15 11 at 18:12 antwortete 15 Dez, um 22:38 Uhr Danke für die Antwort. Eine Verbesserung, die erforderlich wäre, um tatsächlich Quotecachequot den Wert des Gesamtdurchschnitts, so dass wir don39t Schleife die ganze Zeit. Auch kann es ein kleiner Punkt sein, aber wäre es nicht effizienter, ein deque oder eine Liste zu verwenden, um den Wert zu speichern, da wir davon ausgehen, dass die Aktualisierung in der richtigen Reihenfolge kommen wird. Einfügen wäre schneller als in der Karte. Ndash Arthur Ja, Sie könnten den Wert der Summe zwischenspeichern. Subtrahieren Sie die Werte der Proben, die Sie löschen, fügen Sie die Werte der Proben, die Sie einfügen. Auch, ja, ein dequeltpairltSample, Dategtgt könnte effizienter sein. Ich wählte Karte für Lesbarkeit, und die Leichtigkeit der Aufruf der Karte :: upperbound. Wie immer, schreiben Sie den richtigen Code zuerst, dann Profil und messen inkrementelle Änderungen. Ndash Rob Dez 16 11 um 15:00 Hinweis: Anscheinend ist dies nicht der Weg, um dies zu nähern. Lassen Sie es hier als Referenz auf, was ist falsch mit diesem Ansatz. Überprüfen Sie die Kommentare. AKTUALISIERT - basierend auf Olis Kommentar. Nicht sicher über die Instabilität, dass er aber reden. Verwenden Sie eine sortierte Karte der Ankunftszeiten mit Werten. Bei der Ankunft eines Wertes addieren Sie die Ankunftszeit zur sortierten Karte zusammen mit ihrem Wert und aktualisieren Sie den gleitenden Durchschnitt. Warnung dies ist Pseudocode: Dort. Nicht vollständig ausgefuellt, aber Sie bekommen die Idee. Dinge zu beachten. Wie ich schon sagte ist Pseudocode. Youll Notwendigkeit, eine passende Karte zu wählen. Entfernen Sie nicht die Paare, während Sie iterieren durch, wie Sie den Iterator ungültig machen und müssen wieder neu starten. Siehe Olis Kommentar unten auch. Antwort # 2 am: Dezember 15, 2010, um 12:22 Uhr Dies doesn39t Arbeit: es doesn39t berücksichtigen, welcher Anteil der Fensterlänge jeder Wert für vorhanden ist. Auch dieser Ansatz der Addition und dann Subtraktion ist nur stabil für Ganzzahl-Typen, nicht Floaten. Ndash Oliver Charlesworth OliCharlesworth - sorry Ich habe einige wichtige Punkte in der Beschreibung (doppelt und zeitgewichtet) verpasst. Ich werde aktualisieren. Vielen Dank. Ndash Dennis Dec 15 11 at 12:33 Die Zeitgewichtung ist ein weiteres Problem. Aber das ist nicht das, worüber ich rede. Ich bezog sich auf die Tatsache, dass, wenn ein neuer Wert zuerst das Zeitfenster betritt, sein Beitrag zum Durchschnitt minimal ist. Ihr Beitrag steigt, bis ein neuer Wert eintritt. Ndash Oliver Charlesworth Dez 15 11 um 12: 35Zuzeit entwickle ich ein grafisches LCD-System, um Temperaturen, Ströme, Spannungen, Energie und Energie in einem Wärmepumpensystem anzuzeigen. Die Verwendung eines grafischen LCD bedeutet, dass die Hälfte meines SRAM und 75 meines Blitzes durch einen Schirmpuffer und Schnüre verbraucht worden sind. Ich zeige derzeit minmaxagetische Zahlen für Energie Um Mitternacht, wenn die tägliche Zahl zurückgesetzt wird, prüft das System, ob der Verbrauch für den Tag über oder unter dem vorherigen Minimum oder Maximum liegt, und speichert den Wert. Der Durchschnitt wird berechnet, indem der kumulative Energieverbrauch durch die Anzahl der Tage dividiert wird. Ich möchte den täglichen Durchschnitt über die letzte Woche und Monat (4 Wochen aus Gründen der Einfachheit), d. h. Derzeit geht es darum, ein Array von Werten für die letzten 28 Tage aufrechtzuerhalten und einen Durchschnitt über das gesamte Array für die monatlichen und letzten 7 Tage für wöchentlich zu berechnen. Zuerst war ich dies mit einem Array von Schwimmern (wie die Energie ist in der Form 12.12kWh), aber das war mit 28 4 Bytes 112 Bytes (5.4 von SRAM). Ich habe nichts dagegen, nur einen einzigen Dezimalpunkt der Auflösung, so dass ich geändert, um mit uint16t und die Multiplikation der Zahl mit 100. Dies bedeutet, dass 12.12 wird als 1212 dargestellt, und ich teile durch 100 für die Anzeige. Die Größe des Arrays ist jetzt auf 56 Bytes (viel besser). Es gibt keine triviale Möglichkeit, die Figur auf einen uint8t zu reduzieren, den ich sehen kann. Ich könnte den Verlust einer Dezimalstelle tolerieren (12,1kWh anstatt 12,12kWh), aber der Verbrauch ist häufig höher als 25,5kWh (255 ist der höchste Wert, der durch eine 8-Bit-Ganzzahl ohne Vorzeichen dargestellt wird). Der Verbrauch lag nie unter 10,0 kWh oder über 35,0 kWh, so daß ich 10 von den gespeicherten Zahlen subtrahieren konnte, aber ich weiß, dass wir eines Tages diese Grenzen überschreiten werden. Ich testete dann Code, 9-Bit-Werte in ein Array zu packen. Dies ergibt einen Bereich von 0-51,2 kWh und verwendet insgesamt 32 Bytes. Allerdings ist der Zugriff auf ein Array wie dieses ziemlich langsam, vor allem, wenn Sie über alle Werte iterieren müssen, um einen Durchschnitt zu berechnen. Also meine Frage ist - gibt es eine effizientere Methode der Berechnung eines gleitenden Durchschnitt mit drei Fenstern - Lebensdauer, 28 Tage und 7 Tage Effizienz bedeutet kleiner in Bezug auf SRAM Nutzung, aber ohne die Strafe von riesigen Code. Kann ich vermeiden, die Speicherung aller Werte gefragt Ich habe gedacht, und Sie haben Recht. So dass technisch macht meine Antwort falsch. Ich investiere noch mehr Zeit und Geduld. Vielleicht etwas aus der Box. Ich lasse Sie wissen, wenn ich mit etwas kommen. Wir machen so etwas viel an meinem Arbeitsplatz. Lassen Sie mich fragen. Sorry über die Verwirrung. Ndash Aditya Somani Mar 8 14 am 17:15 gibt es eine effizientere Methode der Berechnung eines gleitenden Durchschnitt mit. 28 Tage und 7 Tage. Müssen sich an 27 Tage Geschichte erinnern. Vielleicht erhalten Sie nahe genug Speicherung 11 Werte anstelle von 28 Werten, vielleicht so etwas wie: Mit anderen Worten, anstatt jedes Detail von jedem Tag für die letzten 27 Tage zu speichern, (a) speichern 7 oder so Werte der detaillierten täglichen Informationen für die Vergangenheit 7 oder so Tage, und auch (b) speichern Sie 4 oder so zusammengefasste Werte der Gesamt-oder durchschnittliche Informationen für jede der letzten 4 oder so Wochen. Basics of Algorithmic Trading: Konzepte und Beispiele Ein Algorithmus ist eine bestimmte Menge von klar definierten Anweisungen angestrebt Um eine Aufgabe oder einen Prozess auszuführen. Algorithmischer Handel (automatisierter Handel, Black-Box-Handel oder einfach Algo-Handel) ist der Prozess der Verwendung von Computern programmiert, um eine definierte Reihe von Anweisungen für die Platzierung eines Handels folgen, um Gewinne mit einer Geschwindigkeit und Häufigkeit, die unmöglich ist, Menschlichen Händler. Die definierten Regelsätze basieren auf Timing, Preis, Menge oder jedem mathematischen Modell. Neben den Gewinnchancen für den Trader macht algo-trading die Märkte liquider und macht den Handel systematischer, indem er emotionale menschliche Auswirkungen auf die Handelsaktivitäten ausschließt. Angenommen, ein Trader folgt diesen einfachen Handelskriterien: Kaufe 50 Aktien einer Aktie, wenn der 50-Tage-Gleitende Durchschnitt über dem 200-Tage-Gleitdurchschnitt liegt. Verkaufe Aktien der Aktie, wenn der 50-Tage-Gleitende Durchschnitt unter den 200-Tage-Gleitender Durchschnitt fällt Unter Verwendung dieses Satzes von zwei einfachen Anweisungen ist es einfach, ein Computerprogramm zu schreiben, das automatisch den Aktienkurs (und die gleitenden Durchschnittsindikatoren) überwacht und die Kauf - und Verkaufsaufträge platziert, wenn die definierten Bedingungen erfüllt sind. Der Händler muss nicht mehr eine Uhr für Live-Preise und Grafiken, oder legen Sie die Aufträge manuell zu halten. Das algorithmische Handelssystem tut es automatisch, indem er die Handelschance korrekt identifiziert. (Mehr zu den gleitenden Durchschnitten finden Sie unter: Einfache Bewegungsdurchschnitte machen Trends aus.) Algo-trading bietet die folgenden Vorteile: Handel zu bestmöglichen Preisen ausgeführt Sofortige und genaue Auftragsabwicklung (dadurch hohe Chancen bei der Ausführung auf gewünschten Ebenen) Trades Timing korrekt und sofort, um signifikante Preisänderungen zu vermeiden Reduzierte Transaktionskosten (siehe nachfolgendes Beispiel für die Implementierungsminderung) Gleichzeitige automatisierte Überprüfung mehrerer Marktbedingungen Reduziertes Risiko für manuelle Fehler bei der Platzierung der Trades Backtest den Algorithmus auf der Grundlage verfügbarer historischer und Echtzeitdaten Reduziert Möglichkeit von Fehlern durch menschliche Händler auf der Grundlage emotionaler und psychologischer Faktoren Der größte Teil des heutigen Algo-Handels ist der Hochfrequenzhandel (HFT), der versucht, eine große Anzahl von Aufträgen mit sehr schnellen Geschwindigkeiten auf mehrere Märkte und mehrfache Entscheidung zu setzen Parameter, basierend auf vorprogrammierten Anweisungen. Algo-Trading wird in vielen Formen von Handels - und Investitionsaktivitäten eingesetzt, darunter: mittel - bis langfristige Anleger oder Buy-Side-Gesellschaften (Pensionskassen) , Investmentfonds, Versicherungsgesellschaften), die zwar in großen Mengen kaufen, die Aktienpreise aber nicht mit diskreten, großvolumigen Investitionen beeinflussen wollen. Kurzfristige Händler und Verkaufsseitenteilnehmer (Marktmacher, Spekulanten und Arbitrageure) profitieren von automatisierter Handelsausführung, algo-Handelshilfen, um genügend Liquidität für Verkäufer auf dem Markt zu schaffen. Systematische Händler (Trendfolger, Paare Händler, Hedgefonds usw.) finden es viel effizienter, ihre Handelsregeln zu programmieren und das Programm automatisch handeln zu lassen. Algorithmischen Handel bietet einen systematischeren Ansatz für den aktiven Handel als Methoden auf der Grundlage einer menschlichen Händler Intuition oder Instinkt. Algorithmische Handelsstrategien Jede Strategie für den algorithmischen Handel erfordert eine identifizierte Chance, die in Bezug auf ein verbessertes Ergebnis oder eine Kostensenkung rentabel ist. Die folgenden handelsstrategien werden im algo-handel verwendet: Die gebräuchlichsten algorithmischen handelsstrategien folgen den trends bei gleitenden durchschnitten. Kanal Ausbrüche. Preisniveaubewegungen und damit zusammenhängende technische Indikatoren. Dies sind die einfachsten und einfachsten Strategien, um durch den algorithmischen Handel zu implementieren, da diese Strategien keine Prognosen oder Preisvorhersagen beinhalten. Trades werden basierend auf dem Auftreten von wünschenswerten Trends initiiert. Die einfach und unkompliziert durch Algorithmen implementiert werden können, ohne in die Komplexität der Vorhersageanalyse einzutreten. Das oben genannte Beispiel für 50 und 200 Tage gleitenden Durchschnitt ist ein beliebter Trend nach Strategie. (Für mehr über Tendenzhandelsstrategien siehe: Einfache Strategien zur Aktivierung von Trends.) Der Kauf eines dualen börsennotierten Wertpapiers zu einem niedrigeren Kurs in einem Markt und der gleichzeitigen Veräußerung zu einem höheren Preis in einem anderen Markt bietet die Preisdifferenz als risikofreien Gewinn Oder Arbitrage. Der gleiche Vorgang kann für Aktien gegen Futures-Instrumente repliziert werden, da Preisunterschiede von Zeit zu Zeit bestehen. Die Implementierung eines Algorithmus zur Identifizierung solcher Preisunterschiede und die Platzierung der Aufträge ermöglicht profitable Chancen in effizienter Weise. Die Indexfonds haben definierte Perioden des Ausgleichs festgelegt, um ihre Bestände auf ihre Benchmark-Indizes zu bringen. Dies schafft profitable Chancen für algorithmische Händler, die auf erwarteten Trades, die 20-80 Basispunkte Gewinne in Abhängigkeit von der Anzahl der Aktien im Index-Fonds, kurz vor dem Index Fonds Rebalancing bieten zu profitieren. Solche Trades werden über algorithmische Handelssysteme für rechtzeitige Ausführung und beste Preise initiiert. Viele bewährte mathematische Modelle, wie die delta-neutrale Trading-Strategie, die den Handel auf Kombination von Optionen und die zugrunde liegenden Sicherheit ermöglichen. Wo Trades zum Ausgleich von positiven und negativen Deltas platziert werden, so dass das Portfolio-Delta auf Null gehalten wird. Die mittlere Reversionsstrategie basiert auf der Idee, dass die hohen und niedrigen Preise eines Vermögenswertes ein temporäres Phänomen sind, das periodisch auf ihren Mittelwert zurückgeht. Ermittlung und Definition einer Preisspanne und Implementierung Algorithmus auf der Grundlage, dass Trades automatisch platziert werden, wenn der Preis für Asset Pausen in und aus der definierten Bereich ermöglicht. Die volumengewogene durchschnittliche Preisstrategie bricht einen großen Auftrag auf und gibt dynamisch bestimmte kleinere Stücke des Auftrags auf den Markt ab, indem sie spezifische historische Volumenprofile verwendet. Ziel ist es, die Order in der Nähe des volumengewichteten Durchschnittspreises (VWAP) auszuführen und damit den Durchschnittspreis zu nutzen. Die zeitgewichtete durchschnittliche Preisstrategie baut einen großen Auftrag auf und gibt dynamisch bestimmte kleinere Stücke des Auftrags auf dem Markt unter Verwendung gleichmäßig geteilter Zeitschlitze zwischen einer Anfangs - und einer Endzeit frei. Ziel ist es, die Order in der Nähe des Durchschnittspreises zwischen der Start - und Endzeit auszuführen, wodurch die Marktwirkung minimiert wird. Solange der Handelsauftrag nicht vollständig gefüllt ist, setzt dieser Algorithmus fort, Teilaufträge entsprechend der definierten Teilnahmequote und entsprechend dem auf den Märkten gehandelten Volumen zu senden. Die zugehörige Schrittstrategie sendet Aufträge zu einem benutzerdefinierten Prozentsatz der Marktvolumina und erhöht oder verringert diese Beteiligungsquote, wenn der Aktienkurs auf benutzerdefinierte Ebenen ankommt. Die Implementierungs-Defizit-Strategie zielt darauf ab, die Ausführungskosten eines Auftrags durch den Handel auf dem Real-Time-Markt zu minimieren, wodurch die Kosten der Bestellung eingespart werden und die Opportunitätskosten der verzögerten Ausführung profitieren. Die Strategie wird die angestrebte Beteiligungsquote erhöhen, wenn sich der Aktienkurs positiv entwickelt und sinkt, wenn der Aktienkurs sich negativ bewegt. Es gibt einige spezielle Klassen von Algorithmen, die versuchen, Ereignisse auf der anderen Seite zu identifizieren. Diese Sniffing-Algorithmen, die beispielsweise von einem Sell-Market-Hersteller genutzt werden, haben die eingebaute Intelligenz, um die Existenz von Algorithmen auf der Buy-Seite eines großen Auftrags zu identifizieren. Eine solche Erkennung durch Algorithmen hilft dem Marktmacher, große Orderchancen zu identifizieren und ihm zu ermöglichen, durch das Ausfüllen der Aufträge zu einem höheren Preis zu profitieren. Dies wird manchmal als Hightech-Front-Run bezeichnet. (Für mehr über Hochfrequenzhandel und betrügerische Praktiken, siehe: Wenn Sie Aktien kaufen, sind Sie in HFTs beteiligt.) Technische Anforderungen für Algorithmic Trading Die Umsetzung der Algorithmus mit einem Computer-Programm ist der letzte Teil, mit Backtesting clubbed. Die Herausforderung besteht darin, die identifizierte Strategie in einen integrierten EDV-gestützten Prozess umzuwandeln, der Zugang zu einem Handelskonto für die Auftragserteilung hat. Die folgenden werden benötigt: Programmierkenntnisse, um die erforderliche Handelsstrategie zu programmieren, angeheuerte Programmierer oder vorgefertigte Handelssoftware Netzwerkkonnektivität und Zugang zu Handelsplattformen, um die Aufträge zu vergeben Zugang zu Marktdatenfeeds, die durch den Algorithmus auf Gelegenheitsmöglichkeiten überwacht werden Bestellungen Die Fähigkeit und Infrastruktur, Backtest System einmal gebaut, bevor es live auf realen Märkten Erhältliche historische Daten für Backtesting, abhängig von der Komplexität der Regeln in Algorithmen implementiert Hier ist ein umfassendes Beispiel: Royal Dutch Shell (RDS) ist in Amsterdam gelistet (AEX) und der London Stock Exchange (LSE). Erstellen Sie einen Algorithmus, um Arbitrage-Chancen zu identifizieren. Hier sind einige interessante Beobachtungen: AEX-Geschäfte in Euros, während LSE in Sterling Pfund handelt Wegen der einstündigen Zeitverschiebung, öffnet AEX eine Stunde früher als LSE, gefolgt von beiden Börsen, die gleichzeitig für die nächsten paar Stunden gehandelt werden und dann nur im LSE Handel Die letzte Stunde als AEX schließt Können wir erkunden die Möglichkeit des Arbitrage-Handels auf der Royal Dutch Shell-Aktien auf diesen beiden Märkten in zwei verschiedenen Währungen aufgeführt Ein Computer-Programm, das aktuelle Marktpreise lesen können Preis-Feeds von LSE und AEX A forex Rate Feed für GBP-EUR-Umrechnungskurs Auftragsvergabe, die den Auftrag an den richtigen Austausch weiterleiten kann Rücktestfähigkeit auf historische Preisvorschübe Das Computerprogramm sollte folgende Schritte ausführen: Lesen Sie den eingehenden Preisvorschub des RDS-Bestands von beiden Börsen mit den verfügbaren Wechselkursen . Wandeln Sie den Preis einer Währung in einen anderen um. Wenn es eine ausreichend große Preisdiskrepanz gibt (Rabatt auf die Maklergebühren), die zu einer rentablen Chance führt, dann legen Sie den Kaufauftrag auf den günstigeren Devisenumtausch und Verkaufsauftrag auf höherer Kurswährung an Erwünscht, wird die Arbitrage Profit folgen Einfach und leicht Aber die Praxis der algorithmischen Handel ist nicht so einfach zu pflegen und auszuführen. Denken Sie daran, wenn Sie einen Algo-generierten Handel platzieren können, so können die anderen Marktteilnehmer. Infolgedessen schwanken die Preise in Milli - und sogar Mikrosekunden. In dem obigen Beispiel, was passiert, wenn Ihr Kaufhandel ausgeführt wird, aber verkaufen Handel nicht, wie die Verkaufspreise ändern sich durch die Zeit Ihre Bestellung trifft den Markt Sie werden am Ende sitzen mit einer offenen Position. So dass Ihre Arbitrage-Strategie wertlos. Es gibt zusätzliche Risiken und Herausforderungen: zum Beispiel Systemausfallrisiken, Netzwerkkonnektivitätsfehler, Zeitverzögerungen zwischen Handelsaufträgen und Ausführung und vor allem unvollständige Algorithmen. Je komplexer ein Algorithmus ist, desto strenger ist das Backtesting, bevor es in die Tat umgesetzt wird. Quantitative Analyse einer Algorithmen-Performance spielt eine wichtige Rolle und sollte kritisch untersucht werden. Seine spannende für die Automatisierung von Computern mit einer Vorstellung, um Geld zu machen mühelos gehen. Aber man muss sicherstellen, dass das System gründlich getestet wird und die erforderlichen Grenzen gesetzt sind. Analytische Händler sollten das Lernen von Programmierungs - und Gebäudesystemen selbst in Erwägung ziehen, um sicherzustellen, dass die richtigen Strategien in narrensicherer Weise umgesetzt werden. Eine vorsichtige Anwendung und gründliche Prüfung von algo-trading kann profitable Chancen schaffen.

No comments:

Post a Comment