Strategy API Der folgende Abschnitt enthält eine detaillierte Beschreibung der JForex Strategy API. Die API ermöglicht die Entwicklung von benutzerdefinierten JForex Handelsstrategien. Die Trading-Plattform-Einstellungen wirken sich nicht auf die benutzerdefinierte Strategie aus. Dieser Abschnitt beschreibt Routinen, die der Benutzer von Strategy API programmgesteuert automatisieren kann, wie zum Beispiel: Auch andere Aspekte werden berührt, die nicht direkt die Strategie-Geschäftslogik, wie Threading und andere Praktiken betreffen. Im Wesentlichen kann eine Strategie tun, was auch immer Java SE tun kann. Simple Strategy beschreibt einen Schritt-für-Schritt-Prozess der Erstellung einer einfachen Strategie. SMA Simple beschreibt eine einfache Strategie mit einem Indikator. Jeder der vorgenannten Abschnitte wird mit Beispielen geliefert, um dem Benutzer zu helfen, seine eigene benutzerdefinierte JForex startegy zu erstellen und zu modifizieren. IStrategy-Schnittstelle Jede Strategie muss die IStrategy-Schnittstelle implementieren, die sechs Callback-Methoden enthält: onStart wird beim Strategiestart aufgerufen. Hier würde man normalerweise Variablen initialisieren, die von IContext gehalten werden. Abonnieren Sie Feeds (z. B. benutzerdefinierte Periode, Bereich Bars, renko Steine, etc.) und andere Strategien Setup-Operationen. OnTick wird auf jedes Häkchen jedes Instruments aufgerufen, auf das die Anwendung abonniert ist, so dass für die Arbeit mit bestimmten Instrumenten Tick-Filtering in Betracht gezogen werden sollte. Die Methode empfängt die neueste ITick des jeweiligen Instruments, aus dem der Benutzer die neuesten ASK und BID Preise sowie die Volumes abrufen kann. Hier würde man eine Strategie-Logik implementieren, die mit der Preisänderung zusammenhängt. OnBar wird aufgerufen, wenn ein Balken für alle grundlegenden Perioden und Instrumente fertig ist, auf denen die Anwendung abonniert ist, so dass für die Arbeit mit bestimmten Instrumenten und Perioden eine Bar-Filterung in Betracht gezogen werden sollte. Die Methode erhält die neueste BID und ASK IBar des jeweiligen Instruments und Periode, aus der der Benutzer die offenen, engen, hohen und niedrigen Preise sowie die Lautstärke abrufen kann. Hier würde man eine Strategie-Logik implementieren, die mit der Zeitdauer zusammenhängt. OnMessage wird aufgerufen, wenn eine neue Nachricht empfangen wird. Prominent empfängt die Methode eine IMessage, wenn sich der Auftragsstatus einer beliebigen Reihenfolge ändert. Auf diese Weise zu verwalten Order State. OnAccount wird aufgerufen, wenn eine Kontoinformation aktualisiert wird. OnStop wird aufgerufen, bevor eine Strategie gestoppt wird. Hier wäre, abhängig von der Strategie-Logik, ein Schließen aller aktiven Befehle, das Entfernen von erstellten Diagrammobjekten, die Entsorgung jeglicher benutzerdefinierter GUI-Objekte usw. erforderlich. Nachdem man die Anatomie einer leeren JForex-Strategie (Teil 1 und Teil 2) untersucht hat, Arbeiten. MAPlay ist die Strategie, die in jedem JForex-API-Download als Demonstration enthalten ist. Den kompletten Quellcode dieser Strategie finden Sie im srcsinglejartest im JForex API-Zip-Paket. Beachten Sie, dass die erste Interface-Methode, die zu Beginn der Strategie läuft, onStart ist. Die onStart-Methode von MAPlay wird nachstehend wiedergegeben. Die Variablen-Engine. Indikatoren. Und Konsole sind Felder der MAPlay-Klasse. Sie sind globale Variablen innerhalb der Klasse. Was Linien 42 - 44 tun, ist, die IEngine zu speichern. IIndikatoren. Und IConsole-Objekte für spätere Verwendung. Die letzte Zeile von onStart, Zeile 45, dient lediglich zum Drucken einer Nachricht auf Ihrer JForex-Programmkonsole, um dem Benutzer mitzuteilen, dass die Strategie gestartet wurde. Sobald onStart die Verarbeitung beendet ist, wird der Server wahrscheinlich onTick aufrufen, wenn ein Markt-Tick ankommt. Wenn sein nicht während Marktstunden, dann theres kein Häckchen und etwas anderes Ereignis anstelle von onTick passieren könnte. Denken Sie an die Methoden als Ereignisse statt an einen linearen Prozess. Sie programmieren Ihre JForex-Strategie entsprechend dem, was Sie mit jedem der sechs IStrategy-Interface-Ereignisse durchführen möchten. Für diese besondere Strategie, entscheidet sich der Programmierer, ihre Strategie auf der Tick-Ebene umzusetzen. Als solches wohnt ein großer Teil des Handelsalgorithmus in onTick für MAPlay. Beachten Sie, dass dies eine Designoption ist, können Sie onBar verwenden, wenn Sie möchten, dass Ihre Strategie auf Barlevel verarbeitet wird (oder Sie können onTick und onBar verwenden). Hier ist der Quellcode für onTick in MAPlay. Auf einen Blick können Sie feststellen, dass die Variablen ma0 und ma1 eine Schlüsselrolle bei der Bestimmung des Setups spielen. Hinweis: Um eine Strategie umzukehren, kann es leichter sein, rückwärts zu arbeiten, wenn der Auftrag platziert wird, was in diesem Fall durch engine. submitOrder erfolgt. Ma0 und ma1 Ergebnisse aus exponentiellen gleitenden Durchschnitten (EMA). Ma0 ist der aktuelle Wert. Ma1 ist der vorherige Balkenwert. Die Zeilen 56-63 überprüfen unter Verwendung von IF-Tests (Zeilen 56 und 60), ob eine der Variablen ungültige Daten enthält. Wenn die Daten ungültig sind, wird das Kennzeichen berechnet und der Rest des onTick wird mit der return - Anweisung auf Zeile 62 übersprungen. Hinweis: Indikatorwerte können manchmal ungültig (Null, negativ oder Double. NaN abhängig von der jeweiligen Indikatorimplementierung sein ), Wenn nicht genügend Daten vorhanden sind, um sie zu berechnen oder ein Fehler aufgetreten ist, zum Beispiel. Die EMAs werden in den Zeilen 57 und 59 mit dem IIndicators-Objekt (das in onStart initialisiert wurde) abgerufen. Das JForex Wiki liefert eine Erläuterung seiner Verwendung. Beachten Sie, dass ma1 ein Array ist, das in Zeile 38 mit einer Grße äquivalent zu der Anzahl aller verfügbaren JForex-Instrumente deklariert wurde. Insbesondere wird sie mit einem speziellen Indexwert wie in ma1instrument. ordinal () verwendet. Mit anderen Worten, es ist für die aktuellen Instrumente Steckplatz in der ma1-Array fragen. Das aktuelle Instrument ist dasjenige, das in das Verfahren in Zeile 55 übergeben wird. Beim Verschieben des Codes ist ein weiterer interessanter Punkt die Linie 65, die die Verwendung von instrument. getPipValue () zeigt. Die Zeile 67 prüft, ob die aktuelle Gesamtzahl der Positionen Null ist. Wenn dies der Fall ist, bedeutet dies keine offene Position, dann geht die Strategie weiter, um das Eingangssignal zu überprüfen, um einen Handel einzugeben (Zeilen 68-76). PositionTotal () ist ein benutzerdefiniertes Verfahren, das in den Zeilen 84-92 definiert ist. Es verwendet eine FOR-Schleife, um durch alle Befehle zu laufen, die von engine. getOrders (instrument) erhalten werden. Sobald entweder die lange oder kurze Bedingung, Zeilen 68 und 72 erfüllt ist, sendet die Strategie eine Anweisung in den Zeilen 69 für eine kurze und Zeile 73 für eine lange. Die Einzelheiten der Einreichung von Marktaufträgen ist im JForex Wiki beschrieben. Wenn Sie diese Strategie beenden, wird onStop (Zeilen 48-53) aufgerufen. Für diese Strategie durchläuft der Programmierer alle Aufträge erneut mit engine. getOrders () und schließt jede Position mit einem Befehl order. close () in Zeile 50. Das ist es für diese triviale Strategie. Wenn es einen Punkt, dass Sie sich erinnern sollten. Beachten Sie meine Verwendung der vielen Links zu den JForex javadoc und JForex Wiki in diesem Beitrag. Sie sind wahrscheinlich, viele Ihrer Antworten von diesen zwei Quellen zu finden. Wenn nicht, theres immer das JForex Support Board. Nun, da youve hatte eine Vorstellung davon, wie MAPlay. java funktioniert, seine Zeit, es zu testen. In der nächsten Post im Januar, werden wir diskutieren die JForex Historical Tester und was zu sehen, wenn eine Strategie live zu sehen. Wir sahen vier der sechs Methoden in der IStrategy-Schnittstelle in einem vorherigen Post an. Die letzten beiden Methoden, onTick und onBar, ist, wo Ihre Strategie mit Marktdaten zu verbinden. Entweder eine oder beide dieser Methoden ist, wo Sie Ihre Trading-Algorithmus in. Ihre Strategie wäre dann in der Lage, die Marktdaten zu verarbeiten, wie sie ankommen eine Tickbar zu einem Zeitpunkt. Denken Sie daran, dass IStrategy Interface das Skelett Ihrer Strategie ist. Und das IContext-Objekt ist das Herz Ihrer Strategie. OnTickonBar ist der Kopf Ihrer Strategie, die Ihren Handelsalgorithmus enthält, der das Gehirn ist. Hier ist die Methodendefinition von onTick. Wichtig: OnTick wird für jedes Instrument aufgerufen, das Ihre JForex-Plattform abonniert hat (die Instrumentenliste in Ihrem Arbeitsbereich). Lassen Sie mich sagen, dass wieder, onTick ist für jedes Instrument, dass Ihre JForex-Plattform abonniert aufgerufen wird. Die übliche Praxis ist es, Ticks für Instrumente, die Sie nicht wollen, mit einer einfachen IF-return-Anweisung herauszufiltern. If (instrument myInstrument) return Tatsächliche Tickdaten werden an Ihre Strategie über das ITick-Objekt vom Parameter onTick methods übergeben. Werfen Sie einen Blick auf die ITick javadoc Eintrag zu sehen, was es bietet. OnBar arbeitet ähnlich wie onTick. In welcher onBar wird für jedes subribed Instrument und Zeitraum bekannt zu JForex aufgerufen. Ebenso müssen Sie alle unerwünschten Instrumente und Perioden zu filtern, oder es wird erwartet, Ergebnisse aus Ihrer Strategie. Ein weiterer Punkt zu beachten ist, dass onBar sowohl eine IBar askBar und IBar bidBar, die Frage und Bid Bars darstellt. Frage: Was passiert, wenn zwei oder mehr Perioden überlappen, wie in 13:45 1, 5 und 15-Minuten-Bars sind alle zur gleichen Zeit (ganz zu schweigen von den Perioden in Sekunden zu). Antwort: Nach Dukascopy Support im Forum, sie kommen in einer strengen Ordnung, zum Beispiel (1min 1min 1min 1min 1min 5min 1min 1min 1min 1min 1min 5min.) Sie kommen in Zyklen, wo kleinere Zeiträume an erster Stelle kommt. JForex Support Forum Wie Sie Ihre Strategie mit JForex programmieren, werden Sie zweifellos mit eigenen Fragen aufwarten. Der beste Ort zu fragen ist auf dem offiziellen JForex Support Forum. Dies ist die letzte der drei wesentlichen JForex-Ressourcen, auf die ich früher hingewiesen habe. Auch wenn Sie keine spezielle Frage haben, gibt es Beispiel-Codes, Codierung Diskussion und Hunderte von bestehenden QampA von anderen JForex-Entwickler im Forum veröffentlicht. Die Diskussion war bisher sehr hoch. Um Ihnen zu zeigen, was Sie tatsächlich in einer IStrategy tun können, sezieren wir eine Arbeitsstrategie im nächsten Post. Und was besser zu untersuchen als die beliebtesten JForex-Strategie von ihnen alle - MAPlay. java. Fortsetzung von Teil 1 dieser Serie: Erste Schritte beim Lernen der JForex-Programmierung. Jetzt bereit waren, die reale Sache zu besprechen. Sie erstellen JForex-Strategien mithilfe der IStrategy-Schnittstelle (Was ist eine Schnittstelle). Grundsätzlich ist ein Interface ein Code-Skelett mit einem Satz von vordefinierten leeren Methoden, die Sie brauchen, um sich selbst zu implementieren. Die sechs Standardmethoden der IStrategy-Schnittstelle sind: Es folgt eine leere Implementierung der IStrategy-Schnittstelle, die auch als JForex-Strategie bezeichnet wird. Dieser Code wird gut kompilieren in JForex und Sie können sogar laufen. Aber es tut überhaupt nichts, weil es keinen Code, um in jeder der Methoden laufen. Jede der sechs Methoden wird nur aufgerufen und sofort beenden. Jede Methode wird durch ein bestimmtes Ereignis ausgelöst. Sie können wahrscheinlich erraten, was sie von ihrem Namen sind. OnStart (Zeile 5) Dies ist die erste Methode, die beim Ausführen der Strategie aufgerufen wird. Es wird einmal und nur einmal zu Beginn Ihrer Strategie ausgeführt. Normalerweise machst du hier die Initialisierung. Die Sache zu beachten für onStart ist in Zeile 5 des Codes. Die Methodensignatur von onStart ist Das Objekt im Parameter, das Ihnen in dieser Methode übergeben wird, ist ein IContext-Objekt. Wenn IStrategy das Skelett ist, dann ist IContext das Herzstück der Strategie. Bitte werfen Sie einen Blick auf diese javadoc Link zu IContext zu sehen, was dieses Objekt tut. Javadoc. Jetzt ist eine gute Zeit, um die zweite der drei wesentlichen Ressourcen eines JForex-Programmers einzuführen. Die JForex Javadoc ist die einzige aktuellste API-Dokumentation, die jedes Objekt und jede Methode der JForex-API erläutert. Denken Sie daran wie ein Referenzhandbuch. Beachten Sie, dass, obwohl seine umfassende, die meisten der Erklärung ist sehr spärlich und möglicherweise unvollständig. IContext ist ein Kern-JForex-Objekt, das auf viele wichtige Komponenten des JForex-Systems zugreift, wie z. B. die Bestell-Engine, die Diagramme, die Konsole und die Indikatoren. Du hast die Idee. Es ist wichtig, dass Sie normalerweise eine lokale Kopie davon speichern möchten, da dies das einzige Mal ist (in onStart), dass dieses Objekt an Sie in IStrategy übergeben wird. OnStop (Zeile 26) Wie der Name schon sagt, wird diese Methode aufgerufen, sobald Sie einen Stop-Befehl an Ihre Strategie senden. Sie tun Ihr Programm wrap-up wie Protokollierung und Spülung Daten hier. Nicht viel außergewöhnlich mit diesem. OnMessage (Zeile 18) Während wir wissen, wann onStart und onStop aufgerufen werden, onMessage ist eine asynchrone Methode, dass Sie nicht genau wissen, wann es ausgeführt wird. Diese Methode wird aufgerufen, wenn der Dukascopy-Server eine Strategie sendet. Der Server ruft beispielsweise OnMessage auf, damit Sie wissen, dass Ihre Bestellung gefüllt wurde. Sie empfangen und verarbeiten die Servernachricht, indem Sie auf das IMessage-Objekt zugreifen, das an Sie übergeben wird. Wichtig: Es gibt keine Garantie, dass Sie jede Nachricht erhalten, die an Ihre Strategie vom Server gesendet wurde. Vielleicht ist Ihr Strategieprozess verstopft. Oder vielleicht Ihre Internetverbindung hatte einen Schluckauf. Wenn Ihre Strategie onMessage nicht vom Server aufgerufen wird, aus welchen Gründen auch immer, der Server nicht kümmern konnte weniger und nicht zu überprüfen oder noch einmal versuchen. So dont alles kritisch wie die Verwaltung Ihrer Aufträge in onMessage onAccount (Zeile 22) Diese Methode wird aufgerufen, wenn Ihre Kontoinformationen Aktualisierung empfangen wird. Die Methode bietet Zugriff auf das IAccount-Objekt. Die Sie verwenden, um Ihre Kontoinformationen zu erhalten. Sagen Sie, wenn Sie eine offene Position haben, ändert sich Ihre Kontoinformationen auf jede Zecke, weil Ihr Eigenkapital ist Bargeld unrealisierten Profitverlust. In diesem Fall wird onAccount alle 5 Sekunden vom Server aufgerufen, um zu vermeiden, dass Ihre Strategie überflutet wird. Wichtiger: Das IAccount-Objekt ist nicht live mit Ihrem Konto im Server verbunden. Es ist lediglich eine Momentaufnahme Ihres Kontos. Wenn Sie beispielsweise eine lokale Kopie eines IAccount-Objekts behalten. Tun Sie etwas Handel, um Ihre Balance zu ändern. Dann fragen Sie die gleiche IAccount für Kontostand Informationen, sehen Sie nicht eine Änderung. Aktualisieren Sie daher immer Ihre lokale Kopie von IAccount innerhalb der onAccount-Methode, um Ihre Kontoinformationen aktuell für Ihre Strategien zu verwenden. Fortsetzung folgt OnStart, onStop, onMessage und onAccount Methoden sind administrative Methoden für Ihre Strategie. Die letzten beiden Methoden, die gut diskutieren, onTick und onBar, ist, wo die Magie in einer Strategie passiert. Ich spare das Beste für die letzte in der nächsten Post. Das größte Problem hatte ich beim Lernen, meine eigenen Trading-Strategien in JForex programmieren zu finden, wo ich anfangen zu lernen. Es gab nur wenige JForex Dokumentation zur Verfügung, und ich musste mich durch mühevolle Versuch und Irrtum mit Hilfe von Dukascopys technische Unterstützung lehren. Die Dinge haben sich sicherlich zum Besseren verändert, da eine JForex-Community beginnt zu sprießen und die Dokumentation für sie ist mindestens ausreichend, um jedermann zu starten. Dieser Beitrag ist der erste einer Reihe von schnellen Anfänger Leitfaden zum Lernen JForex Programmierung, indem Sie alle diese Ressourcen in einem Tutorial. JForex ist ein Java-Tool JForex ist eigentlich keine Programmiersprache. Es ist eine Anwendungsprogrammierschnittstelle (API) für die Verwendung mit der Standard-Java-Programmiersprache. Als solcher ist der erste Schritt zum Lernen, in JForex zu programmieren, Java zu lernen. Zum Glück ist Java eine der beliebtesten Programmiersprachen. So gibt es viele Ressourcen auf und aus dem Internet zu lernen Java-Programmierung. Einige Beispiele für kostenlose Online-Tutorials sind: Die Java-Tutorials - Dies ist ein offizielles Tutorial vom Entwickler von Java selbst. Sehr empfehlenswert. Anfänger Java Tutorial - Mehr für die absolute Anfänger für die Programmierung ausgerichtet. Wenn Sie ein Buch bevorzugen, würde ich empfehlen Head First Java, 2. Auflage. Ich bürstete auf meinem Java aus diesem Buch. Dont auf Java zu viel, aber Sie müssen nur wissen, die Grundlagen zu beginnen mit JForex. Lesen Sie ein paar Kapitel, um die Java-Syntax zu verstehen und dann weiterzugehen. Sie können immer zurück zu ihnen später beziehen. Tauchen in JForex Das JForex Wiki ist eine der drei wesentlichen Ressourcen für JForex-Programmierer. Ich werde auf einige spezifische Seiten des Wiki in vielen dieser Reihe von Beiträgen beziehen. Wenn Sie es noch nicht getan haben, registrieren Sie sich für ein DEMO-Konto bei Dukascopy. Dann starten Sie die JForex-Plattform und folgen Sie den Anweisungen auf der JForex-Wiki-Seite verwenden, um Ihre erste JForex-Strategie zusammenzubauen So weit so gut In diesem Punkt hoffe ich, dass Sie grundlegenden Java-Quellcode verstehen und wissen, wie Sie startopen, kompilieren und ausführen können JForex-Strategie. In der nächsten Post in dieser lernenden JForex-Serie, werden wir die Anatomie einer JForex-Strategie zu studieren. JForex Import JForex ist eine Software für den Devisenhandel von Ducascopy. Ihr Programm ermöglicht es Ihnen, Marktdaten, einschließlich Tick-Daten herunterladen. Wie Sie diese Daten importieren können, erfahren Sie in unserem JForex Data Tutorial. In diesem Artikel zeigen wir Ihnen die Benutzeroberfläche des JForex-Import-Tools. Sie können dieses Kontrollkästchen aus dem History Center JForex Import öffnen. 1. JForex-Datenimport Inputverzeichnis Hierbei handelt es sich um den Ordner, der die Daten aus dem JForex Output-Verzeichnis enthält, in dem die konvertierten Daten für die Verwendung durch FSB Pro gespeichert werden. Hier können Sie den Pfad zu einem Datenquellenordner platzieren, sodass die Daten direkt addiert werden In der Datenquelle. Marktschluss am Freitag Marktöffnung am Sonntag ist es ein Merkmal der JForex-Daten, dass es Datensätze über das Wochenende enthält, wo es entweder Null-Bewegung Bars oder einige große Spikes in der Preisbewegung sind. Die Daten am Wochenende sind nicht real und daher nicht für Backtesting geeignet. Aus diesem Grund legen wir die Schließ - und Öffnungszeiten fest, wenn wir die Daten konvertieren und diese Balken filtern. FSB Pro wird versuchen, diese Bars auf eigene Faust zu erkennen, aber wir empfehlen eine doppelte Kontrolle. Wie zu überprüfen: In unserer Praxis ist es um 21 Uhr, wenn der Markt schließt am Freitag und wenn es am Sonntag öffnet. Wir können nicht sicher sein, was diese Stunden für Ihre Zeitzone sind, aber Sie können sie von JForex erhalten, während Sie es ausführen und legen Sie die richtigen Werte in der JForex-Import-Tool. Maximale Anzahl zu importierender Balken filtert die Daten bis zu dieser Anzahl von Balken. JForex Import-Hilfe einen Link zum Tutorial beim Importieren von JForex Data Import mit einem Klick auf die Schaltfläche wird der Importvorgang gestartet. Der obere grüne Balken zeigt den Importstatus der aktuellen Datei an. Die untere Leiste zeigt den Status des gesamten Importvorgangs unter Berücksichtigung aller Dateien, die importiert werden sollen. 2. Ausgabeprotokoll Das Ausgabeprotokoll zeigt den Namen jeder importierten Datei an, das Symbol der Daten, wie viele Balken in der Datei vorhanden sind. Wenn die Balken kleiner als die Maximale Anzahl von Balken für die Importnummer sind, wird FSB Pro konvertieren und in eine Datei speichern Datei im Ausgabeverzeichnis. Wenn zu viele Balken in einer Datei vorhanden sind, sehen Sie: Ausschneiden, wie viele Balken vom Ende der Datei getrimmt wurden Verbleibend, wie viele Balken in FSB Pro-Nutzdaten konvertiert wurden, werden die verbleibenden Balken auch in einer Datei gespeichert
No comments:
Post a Comment