Éditeur de code

Ce manuel explique comment créer, ouvrir et modifier le code source d'une stratégie, d'un indicateur ou d'un plugin à l'aide de l'éditeur de code intégré de JForex4, ainsi que comment compiler et enregistrer vos modifications.

Renommé : Cet outil s'appelait auparavant « Strategy Editor ». Il porte désormais le nom d'éditeur de code, car il permet de modifier non seulement les stratégies, mais aussi les indicateurs et les plugins.


1. Ouvrir l'éditeur

Vous pouvez accéder à l'éditeur de code de deux manières :

  • Créer un nouveau code : Dans le panneau Navigator (en bas à gauche), faites un clic droit sur le nœud concerné — Strategies, Indicators, Plugins (ou leurs sous-nœuds Custom respectifs) — puis sélectionnez New Strategy, New Indicator ou New Plugin selon le cas. La plateforme génère un nouveau fichier .java avec le squelette approprié et l'ouvre directement dans l'éditeur.
  • Modifier un code existant : Faites un clic droit sur une stratégie, un indicateur ou un plugin dans le Navigator ou dans le panneau correspondant, puis sélectionnez Edit. Cela ouvre son fichier source (.java) dans l'éditeur. Si seul un fichier .jfx compilé est présent (sans code source), la modification n'est pas possible — il faudrait alors disposer du fichier .java d'origine.

Remarque : par défaut, les nouveaux fichiers sont enregistrés sur JCloud. Si vous enregistrez le fichier sous un nom personnalisé, n'oubliez pas de renommer également le nom de la classe Java à l'intérieur du fichier pour qu'il corresponde — le nom de la classe et le nom du fichier doivent être identiques pour que la compilation réussisse.

2. Comprendre le squelette de code

Le squelette généré dépend de ce que vous avez choisi de créer :

  • New Strategy génère une classe implémentant IStrategy.
  • New Indicator génère une classe implémentant IIndicator.
  • New Plugin génère une classe implémentant IPlugin.

Le reste de ce manuel se concentre sur la modification des stratégies comme exemple principal, mais le même processus d'édition (ouvrir, modifier, compiler, enregistrer) s'applique également aux indicateurs et aux plugins — seule la manière de les lancer ensuite diffère (voir la section 6).

Chaque stratégie est une classe Java implémentant IStrategy, avec un ensemble minimal de méthodes requises pour la compilation :

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 {}
}
Méthode Objectif
onStart S'exécute une fois au lancement de la stratégie — initialisation, abonnement aux instruments, stockage de IContext/IConsole.
onTick S'exécute à chaque tick entrant pour les instruments abonnés.
onBar S'exécute chaque fois qu'une nouvelle barre se clôture pour les instruments/périodes abonnés.
onAccount S'exécute lors des changements d'état du compte (solde, équité, marge).
onMessage S'exécute lors des événements du cycle de vie des ordres/positions (exécutions, rejets, etc.).
onStop S'exécute une fois à l'arrêt de la stratégie — logique de nettoyage.

Les indicateurs et les plugins ont leurs propres méthodes d'interface requises (par exemple calculate() pour IIndicator). L'éditeur de code génère automatiquement les squelettes de méthodes appropriés en fonction de l'option « New ... » sélectionnée à l'étape 1.

3. Modifier le code

Travaillez directement dans le volet de l'éditeur, en ajoutant votre logique à l'intérieur des méthodes de cycle de vie concernées. Par exemple, pour afficher les ticks entrants dans le journal au sein d'une stratégie :

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 {}
}

Les modifications courantes à ce stade incluent :

  • L'ajout de champs publics annotés @Configurable afin que les paramètres apparaissent dans la boîte de dialogue Define Parameters lors de l'exécution de la stratégie, de l'indicateur ou du plugin.
  • L'ajout d'une logique d'ordres (ordres au marché/conditionnels, stop loss/take profit) à l'intérieur de onTick, onBar ou onStart (pour les stratégies).
  • L'ajout de calculs d'indicateurs personnalisés ou de références à des indicateurs intégrés.

Astuce : les classes d'indicateurs personnalisés utilisées par une stratégie doivent être définies dans le même fichier si vous prévoyez d'exécuter la stratégie en mode distant (remote) — l'environnement distant ne peut pas charger des fichiers de classes locales séparés. Cela s'applique également aux classes auxiliaires utilisées par les indicateurs ou les plugins.

4. Compiler vos modifications

Après avoir modifié le code, compilez le fichier de l'une des manières suivantes :

  • le bouton Compile dans la barre d'outils de l'éditeur de code, ou
  • le raccourci clavier F5, ou
  • un clic droit sur la stratégie, l'indicateur ou le plugin dans la liste Navigator correspondante, puis en sélectionnant Compile.

Le résultat de la compilation s'affiche dans l'onglet Messages :

  • Compiling... OK — le code a été compilé avec succès et un fichier .jfx correspondant est enregistré à côté du fichier source .java.
  • Détails des erreurs — si la compilation échoue, l'onglet Messages liste les erreurs précises (numéros de ligne, problèmes de syntaxe, etc.) afin que vous puissiez les localiser et les corriger dans l'éditeur.

5. Enregistrer votre travail

  • L'enregistrement standard (Ctrl+S ou le bouton Save de la barre d'outils) écrit vos modifications dans le fichier source .java.
  • Si vous utilisez Save As pour enregistrer sous un nouveau nom de fichier, ouvrez ensuite le fichier et renommez la déclaration public class pour qu'elle corresponde au nouveau nom de fichier — Java exige que le nom de la classe publique et le nom du fichier soient identiques.

6. Exécuter le code modifié

La façon de lancer votre code modifié une fois compilé dépend du type d'élément que vous avez modifié — stratégie, indicateur ou plugin — chacun ayant son propre mécanisme de lancement dans JForex4 :

  • Les stratégies sont lancées via Local run ou Remote run :

    1. Cliquez avec le bouton gauche sur la stratégie dans le Navigator, ou sélectionnez-la dans le panneau Strategies.
    2. Choisissez Local run ou Remote run (voir les différences entre les modes ci-dessous).
    3. Configurez les paramètres dans la boîte de dialogue Define Parameters si vous y êtes invité, puis cliquez sur Run.
    Mode Remarques concernant le code modifié
    Local run Accès complet aux fichiers locaux, aux autres classes Java et aux graphiques — pratique lors du débogage actif.
    Remote run S'exécute sur le serveur Dukascopy. Aucun accès au système de fichiers, aucun accès aux graphiques (IContext.getChart() renvoie null) ; tous les instruments doivent être abonnés explicitement dans onStart, et les indicateurs personnalisés doivent être autonomes dans le fichier de la stratégie.

    Seules les stratégies prennent en charge le Remote run sur le serveur Dukascopy. Les indicateurs et les plugins ne disposent pas de mode d'exécution à distance.

  • Les indicateurs ne sont pas « exécutés » comme les stratégies — ils sont plutôt ajoutés à un graphique. Sélectionnez l'indicateur compilé dans le Navigator ou dans le panneau Indicators, puis ajoutez-le à un graphique ouvert (par exemple par glisser-déposer, double-clic, ou via le menu des indicateurs du graphique) pour le voir se calculer et s'afficher en fonction des données de prix en direct ou historiques. Configurez ses paramètres @Configurable dans la boîte de dialogue de réglages de l'indicateur, sur le graphique.

  • Les plugins sont lancés au sein de la plateforme elle-même, plutôt que rattachés à un graphique ou exécutés à distance. Sélectionnez le plugin compilé dans le Navigator ou dans le panneau Plugins et lancez-le directement ; il s'exécute alors au sein de l'application JForex4, en s'intégrant à l'interface ou à l'espace de travail de la plateforme selon sa conception.


Bonnes pratiques pour la modification

  • Utilisez un IDE externe pour un développement sérieux. L'éditeur de code intégré de JForex4 est pratique pour des ajustements rapides, mais un IDE (Eclipse, IntelliJ IDEA, NetBeans) offre une vérification des erreurs en temps réel, l'autocomplétion et des outils de refactorisation qui détectent les erreurs avant même la tentative de compilation.
  • Recompilez après chaque modification significative et vérifiez l'onglet Messages — ne présumez pas qu'un enregistrement a réussi sans passer par une compilation.
  • Testez d'abord sur un compte de démonstration. Après avoir modifié une logique de stratégie affectant le placement des ordres ou les paramètres de risque, effectuez toujours un backtest (via le Historical Tester) et un test en démo avant de passer en réel.
  • Conservez une sauvegarde des versions fonctionnelles avant des modifications importantes, car l'éditeur écrase directement le fichier .java à l'enregistrement.
  • Faites correspondre le nom du fichier et le nom de la classe chaque fois que vous renommez ou dupliquez un fichier de stratégie, d'indicateur ou de plugin, afin d'éviter les erreurs de compilation.
common.disclaimer