Code-Editor

Dieses Handbuch erklärt, wie man den Quellcode einer Strategie, eines Indikators oder eines Plugins mit dem integrierten Code-Editor von JForex4 erstellt, öffnet und bearbeitet, und wie man Änderungen kompiliert und speichert.

Umbenannt: Dieses Werkzeug hieß früher „Strategy Editor". Es wird jetzt Code-Editor genannt, da es nicht nur zum Bearbeiten von Strategien, sondern auch von Indikatoren und Plugins verwendet wird.


1. Den Editor öffnen

Sie können den Code-Editor auf zwei Arten erreichen:

  • Neuen Code erstellen: Klicken Sie im Navigator-Panel (unten links) mit der rechten Maustaste auf den entsprechenden Knoten — Strategies, Indicators, Plugins (oder deren jeweilige Custom-Unterknoten) — und wählen Sie New Strategy, New Indicator oder New Plugin aus. Die Plattform erzeugt eine neue .java-Datei mit dem passenden Grundgerüst und öffnet diese direkt im Editor.
  • Vorhandenen Code bearbeiten: Klicken Sie im Navigator oder im entsprechenden Panel mit der rechten Maustaste auf eine Strategie, einen Indikator oder ein Plugin und wählen Sie Edit. Dadurch wird die Quelldatei (.java) im Editor geöffnet. Ist nur eine kompilierte .jfx-Datei vorhanden (keine Quelldatei), ist eine Bearbeitung nicht möglich — dafür würde die ursprüngliche .java-Datei benötigt.

Hinweis: Neue Dateien werden standardmäßig in JCloud gespeichert. Wenn Sie die Datei unter einem benutzerdefinierten Namen speichern, denken Sie daran, auch den Java-Klassennamen in der Datei entsprechend anzupassen — Klassenname und Dateiname müssen übereinstimmen, damit die Kompilierung gelingt.

2. Das Code-Grundgerüst verstehen

Das erzeugte Grundgerüst hängt davon ab, was Sie erstellen wollten:

  • New Strategy erzeugt eine Klasse, die IStrategy implementiert.
  • New Indicator erzeugt eine Klasse, die IIndicator implementiert.
  • New Plugin erzeugt eine Klasse, die IPlugin implementiert.

Der Rest dieses Handbuchs konzentriert sich exemplarisch auf die Strategie-Bearbeitung, doch derselbe Editor-Ablauf (öffnen, bearbeiten, kompilieren, speichern) gilt auch für Indikatoren und Plugins — nur die Art, wie jedes davon anschließend gestartet wird, unterscheidet sich (siehe Abschnitt 6).

Jede Strategie ist eine Java-Klasse, die IStrategy implementiert, mit einer minimalen Anzahl an Methoden, die für die Kompilierung erforderlich sind:

package jforex;
import com.dukascopy.api.*;

public class Strategy1 implements IStrategy {
    public void onStart(IContext context) throws JFException {}
    public void onAccount(IAccount account) throws JFException {}
    public void onMessage(IMessage message) throws JFException {}
    public void onStop() throws JFException {}
    public void onTick(Instrument instr, ITick tick) throws JFException {}
    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {}
}
Methode Zweck
onStart Wird einmal beim Start der Strategie ausgeführt — Initialisierung, Abonnieren von Instrumenten, Speichern von IContext/IConsole.
onTick Wird bei jedem eingehenden Tick für abonnierte Instrumente ausgeführt.
onBar Wird immer dann ausgeführt, wenn für abonnierte Instrumente/Zeiträume eine neue Bar abgeschlossen wird.
onAccount Wird bei Änderungen des Kontostatus (Guthaben, Eigenkapital, Margin) ausgeführt.
onMessage Wird bei Order-/Positions-Lebenszyklusereignissen (Ausführungen, Ablehnungen usw.) ausgeführt.
onStop Wird einmal beim Stoppen der Strategie ausgeführt — Aufräumlogik.

Indikatoren und Plugins haben ihre eigenen erforderlichen Schnittstellenmethoden (z. B. calculate() für IIndicator). Der Code-Editor erzeugt die passenden Methoden-Stubs automatisch, je nachdem, welche „New ..."-Option Sie in Schritt 1 ausgewählt haben.

3. Den Code bearbeiten

Arbeiten Sie direkt im Editor-Fenster und fügen Sie Ihre Logik innerhalb der jeweiligen Lifecycle-Methoden hinzu. Beispiel: eingehende Ticks in einer Strategie im Log ausgeben:

package jforex;
import com.dukascopy.api.*;

public class Strategy1 implements IStrategy {
    private IConsole con = null;

    public void onStart(IContext context) throws JFException {
        // store the console for printing to the Messages tab
        this.con = context.getConsole();
    }

    public void onAccount(IAccount account) throws JFException {}
    public void onMessage(IMessage message) throws JFException {}
    public void onStop() throws JFException {}

    public void onTick(Instrument instr, ITick tick) throws JFException {
        con.getOut().println(instr + " " + tick.getAsk() + "/" + tick.getBid());
    }

    public void onBar(Instrument instrument, Period period, IBar askBar, IBar bidBar) throws JFException {}
}

Typische Änderungen in dieser Phase sind:

  • Hinzufügen von öffentlichen Feldern mit @Configurable, damit Parameter im Dialog Define Parameters verfügbar sind, wenn die Strategie, der Indikator oder das Plugin ausgeführt wird.
  • Hinzufügen von Orderlogik (Market-/Conditional-Orders, Stop-Loss/Take-Profit) innerhalb von onTick, onBar oder onStart (Strategien).
  • Hinzufügen benutzerdefinierter Indikatorberechnungen oder Verweise auf integrierte Indikatoren.

Tipp: Benutzerdefinierte Indikatorklassen, die von einer Strategie verwendet werden, müssen in derselben Datei definiert sein, wenn Sie die Strategie remote ausführen möchten — die Remote-Umgebung kann keine separaten lokalen Klassendateien laden. Dies gilt ebenso für Hilfsklassen, die von Indikatoren oder Plugins verwendet werden.

4. Änderungen kompilieren

Kompilieren Sie die Datei nach der Bearbeitung auf eine der folgenden Arten:

  • über die Schaltfläche Compile in der Symbolleiste des Code-Editors, oder
  • über die Tastenkombination F5, oder
  • durch Rechtsklick auf die Strategie, den Indikator oder das Plugin in der entsprechenden Navigator-Liste und Auswahl von Compile.

Die Ausgabe der Kompilierung erscheint im Tab Messages:

  • Compiling... OK — der Code wurde erfolgreich kompiliert, und eine passende .jfx-Datei wird neben der .java-Quelldatei gespeichert.
  • Fehlerdetails — schlägt die Kompilierung fehl, listet der Tab „Messages" die konkreten Fehler auf (Zeilennummern, Syntaxprobleme usw.), damit Sie diese im Editor lokalisieren und beheben können.

5. Ihre Arbeit speichern

  • Das normale Speichern (Strg+S oder die Schaltfläche „Save" in der Symbolleiste) schreibt Ihre Änderungen in die .java-Quelldatei.
  • Wenn Sie Save As unter einem neuen Dateinamen verwenden, öffnen Sie die Datei anschließend und benennen Sie die public class-Deklaration entsprechend um — Java erfordert, dass der öffentliche Klassenname und der Dateiname identisch sind.

6. Den bearbeiteten Code ausführen

Wie Sie Ihren bearbeiteten Code nach der Kompilierung starten, hängt davon ab, welchen Artefakttyp Sie bearbeitet haben — Strategie, Indikator oder Plugin haben in JForex4 jeweils einen eigenen Startmechanismus:

  • Strategien werden über Local run oder Remote run gestartet:

    1. Klicken Sie mit der linken Maustaste auf die Strategie im Navigator, oder wählen Sie sie im Strategies-Panel aus.
    2. Wählen Sie Local run oder Remote run (siehe Unterschiede der Modi unten).
    3. Konfigurieren Sie bei Bedarf die Parameter im Dialog Define Parameters und klicken Sie anschließend auf Run.
    Modus Hinweise für bearbeiteten Code
    Local run Voller Zugriff auf lokale Dateien, andere Java-Klassen und Charts — praktisch beim aktiven Debuggen.
    Remote run Läuft auf dem Dukascopy-Server. Kein Dateisystemzugriff, kein Chart-Zugriff (IContext.getChart() liefert null); alle Instrumente müssen explizit in onStart abonniert werden, und benutzerdefinierte Indikatoren müssen vollständig in der Strategiedatei enthalten sein.

    Nur Strategien unterstützen Remote run auf dem Dukascopy-Server. Indikatoren und Plugins verfügen über keinen Remote-Ausführungsmodus.

  • Indikatoren werden nicht wie Strategien „ausgeführt" — stattdessen werden sie einem Chart hinzugefügt. Wählen Sie den kompilierten Indikator im Navigator oder im Indicators-Panel aus und fügen Sie ihn einem geöffneten Chart hinzu (z. B. per Drag-and-Drop, Doppelklick oder über das Indikatormenü des Charts), damit er auf Basis von Live- oder historischen Kursdaten berechnet und dargestellt wird. Konfigurieren Sie die @Configurable-Parameter im Einstellungsdialog des Indikators auf dem Chart.

  • Plugins werden innerhalb der Plattform selbst gestartet, statt an ein Chart angehängt oder remote ausgeführt zu werden. Wählen Sie das kompilierte Plugin im Navigator oder im Plugins-Panel aus und starten Sie es direkt; es läuft dann innerhalb der JForex4-Anwendung und integriert sich, wie vorgesehen, in die Plattform-Benutzeroberfläche bzw. den Arbeitsbereich.


Best Practices für die Bearbeitung

  • Für ernsthafte Entwicklung eine externe IDE verwenden. Der integrierte Code-Editor von JForex4 eignet sich für schnelle Anpassungen, aber eine IDE (Eclipse, IntelliJ IDEA, NetBeans) bietet Live-Fehlerprüfung, Autovervollständigung und Refactoring-Werkzeuge, die Fehler erkennen, bevor Sie überhaupt versuchen zu kompilieren.
  • Nach jeder wesentlichen Änderung neu kompilieren und den Tab „Messages" prüfen — gehen Sie nicht davon aus, dass ein Speichervorgang erfolgreich war, ohne einen Kompilierungsdurchlauf durchzuführen.
  • Zuerst auf einem Demokonto testen. Nach dem Bearbeiten von Strategielogik, die die Orderplatzierung oder Risikoparameter betrifft, immer zuerst per Historical Tester zurücktesten und im Demomodus testen, bevor Sie live gehen.
  • Sichern Sie funktionierende Versionen, bevor Sie größere Änderungen vornehmen, da der Editor die .java-Datei beim Speichern direkt überschreibt.
  • Dateiname und Klassenname abgleichen, sobald Sie eine Strategie-, Indikator- oder Plugin-Datei umbenennen oder duplizieren, um Kompilierungsfehler zu vermeiden.