L'arrivée d'une nouvelle génération de logiciels de trading. À quoi doit ressembler l'interface de l'EA ? - page 12

 
Yury Kulikov:
Comme tout est en désordre :)
Je parlais d'un exemple de création d'interface en utilisant votre indicateur de navigateur de fichiers, implémenté dans Expert Advisor. Mais ne vous accrochez pas aux mots "navigateur de fichiers", c'est un exemple de tâche, et il peut y avoir de nombreuses tâches similaires dans les Expert Advisors : navigateur de fenêtres de terminal, objets sur le graphique, indicateurs dans le terminal ... Et ce n'est qu'une petite couche de tâches qui peuvent être mises en œuvre par le biais d'une liste (tableau) de chaînes que vous voulez obtenir dans votre indicateur via des variables globales.
Je suis un peu confus en ce moment, et je ne comprends pas le sens de vos messages. Mes excuses. Un peu plus tard, je décrirai en détail le concept du moteur, du studio, de l'interface et de l'EA. Après cela, nous pourrons en discuter. :)
 

1. Le concept du moteur graphique.

2. Concept du cœur graphique.

3. les étapes de la création d'un studio visuel pour la plateforme MT.

4. description du mécanisme de création d'une interface EA.


1. Le moteur graphique est un programme conçu comme un indicateur. Ce programme est conçu uniquement pour la gestion de l'interface utilisateur. Il remplit un ensemble de fonctions de base :

  • Chargement du noyau de l'interface graphique à partir d'un fichier.
  • Sauvegarde des paramètres de l'interface utilisateur.
  • Mise en place d'un contrôle unique et cohérent de tous les processus de l'interface. Il met en œuvre les "mécanismes" de l'interface, notamment : l'ouverture et la fermeture des fenêtres, le redimensionnement des fenêtres, le déplacement des fenêtres, la fusion des fenêtres, le zoom, la lecture des scripts, le changement d'état des objets, la liaison des objets, le contrôle des valeurs des paramètres des contrôles en fonction de leurs types et propriétés, la création et la suppression des variables globales.

Le moteur graphique est ajouté au graphique comme tout autre indicateur. Il comprend l'ensemble des fenêtres suivantes :

  • Barre des tâches, sur le côté droit de laquelle plusieurs icônes seront ajoutées pour appeler les fenêtres de service du moteur lui-même.
  • Navigateur de fichiers, qui sera utilisé pour sélectionner le fichier de démarrage à partir d'une liste de fichiers avec des interfaces situées dans un dossier spécial.
  • Les fenêtres de configuration facultatives, qui ne jouent pas un rôle principal à ce stade.

C'est, en principe, la fin du concept de moteur graphique. Ce qui est important, c'est que l'interface ne peut pas fonctionner sans elle.



2. Un noyau graphique est un bloc d'informations contenant les données de tous les objets et fenêtres d'une interface, qui est enregistré dans un tableau et sauvegardé dans un fichier.

Ce bloc est une représentation numérique de l'interface graphique. Il est chargé par le moteur graphique sur instruction de l'utilisateur. Le moteur graphique lui-même possède son propre noyau graphique interne qui assure le fonctionnement de ses propres fenêtres et, à l'intérieur de ce noyau, l'espace libre est alloué pour l'intégration de l'interface utilisateur (sous la forme numérique) dans celui-ci. L'intégration est effectuée au cours du processus de chargement du noyau graphique à partir d'un fichier.


3. La création d'un studio visuel sur la plateforme MT, si j'ai bien compris, se divise en deux étapes :

  • Dans un premier temps, une version du constructeur d'interface basée sur des fichiers sera créée. L'utilisateur y travaillera avec des modèles de tableaux. Dans les tableaux, l'utilisateur écrira les types et les noms des éléments d'interface et définira les propriétés de leurs paramètres. La création sera un processus extrêmement convivial, où l'utilisateur n'aura pas à se soucier du positionnement correct de ses éléments dans les fenêtres (le moteur calculera tout automatiquement) et devra simplement disposer les éléments dans l'ordre requis.
  • Dans la deuxième phase, un environnement visuel sera créé qui met en œuvre la même méthode de construction d'interface que le constructeur de fichier, mais il sera plus facile et plus pratique à utiliser. Elle ajoutera également la possibilité de modifier l'apparence des contrôles. En général, l'utilisateur disposera de plus d'options graphiques.


4. Je souhaite présenter le mécanisme de création de l'interface en termes généraux, et lever légèrement le voile sur sa technologie. Expliquez d'où viendra la facilité de créer une interface via un fichier.

C'est le cas : le moteur dispose d'une fonction spéciale qui crée un noyau graphique complet à partir d'un seul fichier avec un minimum d'informations de chargement. Les informations de démarrage contenues dans ce fichier sont explicites et lisibles par l'homme. Il est facile à écrire et à modifier. Par exemple, vous devez écrire "_CREATE_NEW_WINDOW" pour créer une fenêtre, et "_CHECKBOX" et le nom de la case à cocher, (le moteur reconnaît automatiquement le nom de l'élément, comme le nom de l'élément lui-même et comme le nom de son paramètre).

Cette fonction s'appelle "G_CORE_BUILDER()" et construit le noyau graphique en prenant des données de deux sources principales : un fichier de démarrage créé par l'utilisateur et le tableau "CONTENT[]", qui contient tous les groupes d'objets standard inclus dans les plateformes de fenêtres et les contrôles. "CONTENT[]" contient également des états et des scripts d'objets. Tout dans un seul tableau. En général, le matériel source de "CONTENT[]" + le fichier de chargement créé par l'utilisateur est utilisé par "G_CORE_BUILDER()" pour construire le noyau graphique avec lequel le moteur fonctionne.

 

Pour éviter toute confusion, j'aimerais ajouter que le fichier de démarrage peut avoir deux formats :

1. Sous la forme d'un ensemble d'instructions définies par l'utilisateur, qui décrivent les fenêtres, les contrôles et les propriétés de leurs paramètres. Dans ce cas, à l'étape du chargement, la fonction "G_CORE_BUILDER()" est lancée et construit le noyau graphique.

2. Sous la forme d'un noyau graphique prêt à l'emploi qui est chargé directement dans le moteur. Dans cette variante, il n'est pas nécessaire d'utiliser la fonction "G_CORE_BUILDER()".

La première option serait utilisée dans le constructeur de l'interface et la seconde pour exécuter l'interface prête à l'emploi de toute application.

Une version simplifiée du moteur chargera le noyau graphique prêt à l'emploi, duquel sera retiré le système de construction du noyau ("G_CORE_BUILDER()" et le tableau "CONTENT[]") afin de simplifier son fonctionnement.
 
Реter Konow:
Dessiner une image n'est pas encore une interface, la question la plus importante que vous ne mentionnez pas est de savoir comment le conseiller expert va interagir avec l'indicateur, les"variables globales" semblent quelque peu vagues.
 
Yury Kulikov:
Dessiner une image n'est pas encore l'interface, la question la plus importante que vous ne mentionnez pas - comment l'EA va interagir avec l'indicateur, à travers les"variables globales" semble quelque peu vague.
Pour le moment, le système d'interaction du Conseiller Expert avec l'interface implémentée dans l'indicateur via les globaux est seulement sur le papier, et je n'ai pas eu d'expérience dans sa création. Je vais essayer de décrire mon idée plus en détail, et si vous y trouvez des contradictions ou des erreurs, veuillez commenter.

1. Permettez-moi de vous rappeler ce que tout le monde sait - chaque variable globale est dans la portée de tous les programmes chargés dans le tableau. Pour créer une variable globale, vous devez appeler la fonction spéciale, et lui passer le nom de la variable et sa valeur.

2. Les variables globales seront créées par le moteur au moment du chargement de l'interface, qui lira le fichier de démarrage. Les noms des variables globales et leurs valeurs sauvegardées (ou prédéfinies) seront écrits dans le fichier de démarrage lui-même.

3. Il existe un bloc spécial à l'intérieur du moteur qui est responsable du contrôle des valeurs des paramètres des contrôles en fonction du type d'élément, du type de valeur et des propriétés du paramètre. Lorsque l'utilisateur coche une case à cocher ou modifie une valeur dans un élément "spin edit", le bloc d'interaction des paramètres du contrôle effectue des actions spécifiques sur une valeur spécifique, une variable spécifique.

4. Du fait que la variable est globale, sa valeur sera constamment "observée" par le Conseiller Expert, et il réagira aux changements de la valeur de chacune des variables globales selon les algorithmes qui y sont intégrés.

5. Le conseiller expert ne se contente pas d'"observer" les variables globales, mais travaille entièrement avec leurs valeurs à partir de sa fonctionnalité. Dans ce cas, il est important de comprendre que les variables globales seront conditionnellement divisées en deux types : les variables "contrôlées" par l'utilisateur, dont les valeurs seront fixées par l'utilisateur par le biais des commandes de l'interface, et les variables "contrôlées" par la fonctionnalité de l'EA, dont les valeurs seront fixées par les fonctions de l'utilisateur.

6. Le moteur, quant à lui, fonctionnera avec les deux types de variables globales conditionnelles. J'ai décrit le principe de travail avec les valeurs des variables "sous contrôle" de l'utilisateur, et le principe de travail avec les valeurs "sous contrôle" de la fonctionnalité EA sera le suivant : le même bloc divise conditionnellement les contrôles en deux catégories : ceux qui contrôlent la valeur, et ceux qui affichent la valeur (en l'affichant de n'importe quelle manière). Chacun de ces contrôles (champ de saisie, barre de progression, etc...) est abonné à l'événement de changement de valeur de sa variable. Dès que la valeur d'une variable change, le bloc fait référence à l'élément correspondant et effectue une manipulation avec cet élément, qui est fourni par défaut dans le type d'élément.

Notez que le bloc boucle sur toutes les variables globales à la fréquence de la minuterie, " suivant " ainsi le comportement des valeurs des variables contrôlées fonctionnellement.

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
P.S. Quant à la question de savoir comment charger les paramètres d'EA à partir de l'interface utilisateur, dans mon esprit, cela se fera de la manière suivante :

Les valeurs de toutes les variables globales, avec lesquelles l'EA fonctionne (y compris celles qui représentent les paramètres de l'EA), seront stockées dans le fichier de chargement avant d'être détruites lors de l'événement de déchargement de l'EA. À chaque chargement de l'interface, ces mêmes variables globales seront créées à nouveau et prendront leurs valeurs originales. Ensuite, l'Expert Advisor sera chargé et accédera à ses variables.
 
Реter Konow:

Comment faire passer un texte (par exemple un nom de fichier) par une variable globale?

Comment l'Expert Advisor peut-il activer/désactiver une fenêtre ?

Comment l'Expert Advisor peut-il créer une nouvelle fenêtre pendant qu'il est en cours d'exécution ?

...

 
Yury Kulikov:

1. Comment faire passer du texte (par exemple, un nom de fichier) par une variable globale?

2. Comment l'expert peut-il activer/désactiver la fenêtre ?

3. Comment l'Expert Advisor peut-il créer une nouvelle fenêtre pendant qu'il est en cours d'exécution ?

...

1. cette tâche n'a pas encore été résolue. Je peux suggérer quelques variantes à titre indicatif :

a) Passage de la chaîne de caractères au moyen du nom de la variable globale elle-même. Comme les variables sont indexées, le moteur et l'Expert Advisor doivent toujours "connaître" l'indice de la variable glob à effacer et à recréer pour transférer le texte, en changeant son nom à chaque fois et en faisant passer la chaîne par elle. À première vue, l'option semble désordonnée, mais qui sait, elle peut peut-être être améliorée...

b) Transmettre une chaîne avec la valeur d'une variable, consécutivement à des lettres, où, au lieu des lettres elles-mêmes, les chiffres correspondants seront transmis, et le processus de transmission sera effectué dans un nombre n de périodes de temporisation.

2. Pour l'instant, il manque à mon concept une méthode d'activation/désactivation des fenêtres du côté de l'EA. Pour être honnête, je ne suis pas tout à fait sûr de ce que vous voulez dire. Les fenêtres ne seront traitées que par l'utilisateur et le moteur. Le conseiller expert ne traite que les variables et ses propres fonctions. Il n'a pas encore accès à l'interface. (Et quel est l'intérêt ?).

3. les nouvelles fenêtres (composites), que l'utilisateur peut regrouper en ensembles de fenêtres (composants) à sa discrétion, seront créées par le moteur et non par l'Expert Advisor. par exemple, en cliquant sur l'élément du menu principal "nouvelle fenêtre". Il est important que toutes les fenêtres groupées soient déjà créées dans l'interface et le nombre de fenêtres composites utilisées pour regrouper les informations requises par l'utilisateur peut être (conditionnellement) illimité. Les ensembles de fenêtres et leur contenu seront enregistrés dans un fichier.

 
Реter Konow: Il n'a pas encore accès à l'interface. (Et quel est l'intérêt de cela ?)

Le point est fondamental. Les événements ne se produisent pas seulement dans l'interface.

Il y aura plus d'un iceberg sur la route de votre Titanic. Vous avez commencé le projet du mauvais côté et les variables globales ne vous aideront pas ici.

 
Yury Kulikov:

Le point est fondamental. Les événements ne se produisent pas seulement dans l'interface.

Il y aura plus d'un iceberg sur la route de votre Titanic. Vous avez commencé le projet du mauvais côté et les variables globales ne vous aideront pas.

À votre avis, sur quel bord aurais-je dû commencer le projet, et qu'est-ce qui peut m'aider ?
 
Реter Konow:
OK, mais où pensez-vous que j'aurais dû commencer le projet, et qu'est-ce qui peut m'aider ?

Je pense que nous devrions commencer par l'expert. J'ai donné trois types de tâches qui sont pertinentes pour l'expert, mais il s'avère qu'elles ne sont pas réalisables dans votre interface.

Qu'est-ce qui pourrait aider ? Peut-être une intégration plus poussée, ou la limitation du projet à une "commande à distance".

Raison: