EA avec boîte de dialogue MQL5 : interface de configuration utilisateur
Maîtrisez la création d’une interface de dialogue interactive pour vos Expert Advisors, permettant une configuration intuitive sans recompilation. Découvrez comment concevoir des boîtes de dialogue MQL5 professionnelles pour améliorer l’expérience utilisateur.
Introduction
Dans le monde du trading algorithmique, la flexibilité est un atout majeur. Un Expert Advisor (EA) performant doit non seulement exécuter des stratégies complexes, mais aussi offrir une interface de configuration intuitive. C’est là que la boîte de dialogue MQL5 entre en jeu. Contrairement aux simples paramètres d’entrée, une boîte de dialogue personnalisée permet à l’utilisateur de modifier les réglages en temps réel, de visualiser des informations en direct, et de contrôler l’exécution sans avoir à recompiler le code. Dans cet article, nous allons explorer comment concevoir une interface de configuration utilisateur robuste pour vos EA, en utilisant les classes d’interface graphique de MQL5. Nous aborderons la création de fenêtres, de boutons, de champs de saisie et de contrôles interactifs, le tout dans un format structuré et accessible. Que vous soyez un développeur débutant ou expérimenté, ce guide vous fournira les bases pour intégrer une boîte de dialogue professionnelle dans vos projets.
1. Comprendre l’architecture des boîtes de dialogue en MQL5
Avant de plonger dans le code, il est essentiel de comprendre comment MQL5 gère les interfaces utilisateur. Les boîtes de dialogue sont construites à partir de la classe CDialog, héritée de CAppDialog. Cette classe fournit une structure pour créer des fenêtres avec des contrôles (boutons, champs de texte, listes déroulantes).
Étape 1 : Créer une classe dérivée
Pour personnaliser votre boîte de dialogue, vous devez créer une classe qui hérite de CAppDialog. Par exemple, class CMyDialog : public CAppDialog. Cette classe contiendra vos contrôles personnalisés.
Étape 2 : Définir les contrôles
Utilisez les classes de contrôles comme CEdit pour les champs de texte, CButton pour les boutons, et CLabel pour les étiquettes. Chaque contrôle doit être créé dans le constructeur de votre classe.
Étape 3 : Gérer les événements
Les interactions utilisateur (clics, modifications de texte) sont gérées via des fonctions virtuelles comme OnClickButton ou OnChangeEdit. Ces fonctions doivent être surchargées dans votre classe.
Exemple de squelette de code :
#include <Controls\Dialog.mqh>
#include <Controls\Button.mqh>
#include <Controls\Edit.mqh>
class CConfigDialog : public CAppDialog {
private:
CButton m_btnApply; // Bouton Appliquer
CEdit m_editLotSize; // Champ pour la taille du lot
public:
CConfigDialog(void);
~CConfigDialog(void);
virtual bool Create(const long chart, const string name, const int subwin, const int x1, const int y1, const int x2, const int y2);
virtual bool OnEvent(const int id, const long &lparam, const double &dparam, const string &sparam);
protected:
bool CreateControls(void);
virtual void OnClickApply(void);
};
2. Conception des contrôles interactifs : champs de saisie et boutons
Une fois la classe de dialogue définie, il est temps de créer les contrôles spécifiques à votre configuration. Par exemple, pour un EA de trading, vous aurez besoin de champs pour la taille du lot, le stop loss, le take profit, et d’un bouton pour appliquer les modifications.
Étape 4 : Création du champ de saisie
Dans la fonction CreateControls, utilisez CEdit pour ajouter un champ de texte. Définissez sa position, sa taille et sa valeur par défaut.
Étape 5 : Ajout du bouton d’action
Créez un bouton CButton avec un texte explicite comme “Appliquer”. Associez-lui un gestionnaire d’événements.
Étape 6 : Gestion des événements
La fonction OnEvent permet de capturer les clics. Pour le bouton, la méthode OnClickApply doit lire la valeur du champ, la valider, puis la transmettre à l’EA.
Exemple de code pour les contrôles :
bool CConfigDialog::CreateControls(void) {
// Champ pour la taille du lot
if(!m_editLotSize.Create(0, "0.10", 20, 30, 150, 50)) return false;
if(!Add(m_editLotSize)) return false;
// Bouton Appliquer
if(!m_btnApply.Create(0, "Appliquer", 20, 60, 150, 90)) return false;
if(!Add(m_btnApply)) return false;
return true;
}
3. Intégration de la boîte de dialogue dans l’EA
Une fois la boîte de dialogue conçue, il faut l’intégrer dans le cycle de vie de votre Expert Advisor. Cela implique de l’initialiser au démarrage et de la détruire à la fermeture.
Étape 7 : Déclaration et initialisation
Dans votre classe EA principale, déclarez un objet de votre dialogue : CConfigDialog m_dialog;. Dans la fonction OnInit, appelez m_dialog.Create avec les paramètres de position.
Étape 8 : Gestion des événements de l’EA
La fonction OnChartEvent de l’EA doit transmettre les événements à la boîte de dialogue via m_dialog.OnEvent. Cela permet aux clics et aux modifications de texte d’être traités.
Étape 9 : Mise à jour des paramètres
Lorsque l’utilisateur clique sur “Appliquer”, la boîte de dialogue doit mettre à jour les variables globales de l’EA (par exemple, la taille du lot). Utilisez des pointeurs ou des références pour synchroniser ces valeurs.
Exemple de code pour l’intégration :
int OnInit() {
// Créer la boîte de dialogue
if(!m_dialog.Create(ChartID(), "Configuration", 0, 10, 10, 300, 200)) {
Print("Échec de la création du dialogue");
return(INIT_FAILED);
}
m_dialog.Run();
return(INIT_SUCCEEDED);
}
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {
m_dialog.OnEvent(id, lparam, dparam, sparam);
}
4. Personnalisation avancée : listes déroulantes et graphiques
Pour une interface plus complète, vous pouvez ajouter des listes déroulantes (CComboBox) pour sélectionner des stratégies ou des timeframes, ou même des graphiques intégrés (CChart) pour afficher les performances.
Étape 10 : Ajout d’une liste déroulante
Utilisez CComboBox pour proposer des options comme “Scalping”, “Day Trading”, “Swing Trading”. La sélection déclenche un événement qui ajuste les paramètres de l’EA.
Étape 11 : Validation des données utilisateur
Avant d’appliquer les modifications, validez les entrées (par exemple, vérifiez que la taille du lot est positive et dans les limites du broker). Utilisez des fonctions de validation dans le gestionnaire de clic.
Étape 12 : Sauvegarde des préférences
Pour une expérience utilisateur optimale, sauvegardez les paramètres dans un fichier (via FileOpen et FileWrite) et rechargez-les au démarrage. Cela évite à l’utilisateur de tout reconfigurer à chaque redémarrage.
Astuce pro : Utilisez des pointeurs intelligents ou des références pour lier les contrôles de la boîte de dialogue aux variables de trading de l’EA. Par exemple, créez une structure ConfigParams que le dialogue modifie directement. Cela simplifie la synchronisation et évite les erreurs de copie.
5. Débogage et optimisation des performances
Les boîtes de dialogue peuvent consommer des ressources si elles sont mal conçues. Voici comment optimiser votre interface.
Étape 13 : Gestion des ressources
Libérez la mémoire en détruisant le dialogue dans OnDeinit avec m_dialog.Destroy. Évitez de recréer des contrôles inutilement.
Étape 14 : Tests et logs
Ajoutez des messages Print pour tracer les événements. Utilisez le débogueur de MetaEditor pour vérifier que les clics sont bien capturés.
Étape 15 : Compatibilité multi-charts
Si votre EA est utilisé sur plusieurs graphiques, assurez-vous que chaque boîte de dialogue est indépendante en utilisant des noms uniques (ajoutez un suffixe avec ChartID).
Besoin d’un EA sur-mesure ? Demander un devis gratuit
Questions fréquentes
Quelle est la différence entre une boîte de dialogue MQL5 et les paramètres d’entrée classiques ?
Les paramètres d’entrée (input) sont statiques et ne peuvent être modifiés qu’avant le démarrage de l’EA. Une boîte de dialogue permet des modifications en temps réel, une interaction visuelle et une meilleure expérience utilisateur.
Puis-je utiliser une boîte de dialogue sur plusieurs timeframes simultanément ?
Oui, mais chaque instance de l’EA doit avoir sa propre boîte de dialogue avec un nom unique. Utilisez ChartID pour différencier les dialogues.
Comment gérer les erreurs de saisie utilisateur dans la boîte de dialogue ?
Validez les données dans le gestionnaire d’événements (par exemple, lors du clic sur “Appliquer”). Affichez un message d’erreur via MessageBox ou une étiquette rouge.
Est-il possible d’intégrer des graphiques en temps réel dans une boîte de dialogue MQL5 ?
Oui, utilisez la classe CChart pour afficher des graphiques intégrés. Cependant, cela peut être gourmand en ressources ; optimisez en mettant à jour les données seulement si nécessaire.