Mon approche. Le noyau est le moteur. - page 80

 
Александр:

Votre message doit-il être considéré comme une demande de participation à la mise en œuvre ?

Je regardais aussi ce fil, mais vous ne semblez pas avoir lu attentivement mon message précédent.

Si c'est par le biais du freelancing, faites-le. Quel est le budget ? A quel moment vous a-t-il semblé que je lisais de manière inattentive ?

 
Dmitry Fedoseev:

Si c'est par le biais du freelancing, faites-le. Quel est le budget ? A quel moment avez-vous pensé que je ne lisais pas attentivement ?

Je m'abstiendrai de suggérer le freelancing.

Je vais m'abstenir d'y prêter attention ici :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Mon approche. Core - Moteur.

Alexander, 2018.12.16 16:12

Mes compétences en MQL et en programmation en général sont assez modestes. ....

...S'il existe un moyen d'accélérer les résultats sans aller trop loin dans le processus, pourquoi ne pas en profiter ?

 

Exemple d'une animation personnalisée dessinée par l'EA dans la fenêtre du moteur :

Code de contrôle dans l'EA :

void OnTimer()
  { 
   static int q1,a,b; 
   //------------------------------------
   if(!a)LOAD_CANVAS_Last_10_bars(); 
   //---------------------------------
   if(!b) q1++;
   if(q1 == 200)b = 1;
   if(b)q1--;
   if(!q1)b = 0;  
   //------------- 
   ELLIPSE(q1,q1,q1+q1*2,q1+q1,clrBlue);          
   //------------------------------------
  }

Ajout de 14 fonctions de dessin de la classe CCanvas au bloc de dessin du moteur. Ces fonctions sont appelées depuis le conseiller expert. Pour cela, les fonctions wrapper des fonctions de dessin ont été ajoutées dans le fichier Connection_Properties.mqh

Vous pouvez dessiner des cercles, des rectangles, des triangles, des arcs, des ellipses et des lignes.

Avant d'appeler les fonctions de dessin, nous devons spécifier sur quel canevas elles vont dessiner (par exemple,LOAD_CANVAS_Last_10_bars() ;).

La technologie est encore à l'état brut. Dès que je l'aurai débogué, je posterai un exemple prêt à l'emploi.

 
Александр:

Bon après-midi.

J'essaie de créer une barre d'outils permettant de contrôler l'activation et la désactivation des fonctions de trading personnalisées et, respectivement, de corriger certains de leurs paramètres.

J'ai été confronté à l'impossibilité d'activer/désactiver le panneau en raison de l'absence d'événement ChartEvent dans le Strategy Tester, lors de l'implémentation du panneau dans le code de l'Expert Advisor.

Ou l'impossibilité d'ouvrir des ordres dans le cas où le panel est implémenté dans le code de l'indicateur.

Discussion ici : https://www.mql5.com/ru/forum/294890

Peter m'a proposé son aide pour développer le panneau, ce que je n'ai pas pu refuser.

Actuellement, le panneau ressemble à ceci

ou comme ceci, quand tous les boutons sont pressés :

sous chaque bouton ses paramètres, qui peuvent être modifiés soit par les flèches haut/bas, soit par le champ d'édition.

Pour les boutons "Now" , la valeur est .Locking(false) ; pour tous les autres boutons .Locking(true) ;

Pour le bouton "Trailing", ajoutez un autre paramètre (switch) avec les valeurs All/Each.

En outre, nous devons ajouter une liste déroulante dans le panneau avec un choix d'horizon temporel et une fenêtre avec une liste d'ordres ouverts par le symbole courant avec indication du profit de chaque ordre (y compris le swap) et une croix devant chacun d'eux pour le fermer.

Peter, cette description est-elle suffisante pour votre RPT ?

Voici le panel.

Merci d'apporter des modifications à l'apparence, et d'expliquer où placer exactement le commutateur "Tout/Echantillon", ainsi que la liste des versions avec les échéances (je suppose en haut au centre).

Boutons pressés :


 

Quant à l'échange du testeur, je suis en train de résoudre ce problème en ce moment même. Je veux refaire complètement la communication entre l'EA et le moteur. Le mettre en œuvre par le biais d'"objets de communication" (objets MT dont la description de la chaîne est utilisée pour la transmission de données entre programmes).

Cela peut être un moyen de communication rapide et polyvalent pour la communication normale et pour la communication en mode test de l'EA.

L'approche actuelle de la communication surcharge la file d'attente des événements OnChartEvent(). L'envoi et la réception des messages entre l'EA et le moteur sont retardés s'il y a trop d'événements, ce qui est visible visuellement. La communication par le biais d'objets MT devrait éliminer ce problème, car la réception et l'envoi de messages se feront en dehors de la file d'attente des événements OnChartEvent().

En théorie, cela devrait fonctionner...

 
Реter Konow:

Voici le panel.

Veuillez apporter des corrections à l'apparence, et expliquer où placer exactement le commutateur "All/Each", ainsi que la liste des délais (je suppose en haut au centre).

Je pense qu'il serait mieux de faire le panneau sur toute la largeur de la zone de travail (il y aura plus de méta pour la liste des commandes).

Les champs d'édition avec les étiquettes Lot, Profit et à côté des boutons "Maintenant" doivent avoir des centièmes (format 0.00).

J'ai expérimenté et je suis arrivé à la conclusion qu'il serait préférable de remplacer le champ avec la liste des échéances par une étiquette et deux boutons ("-" et "+"). Placez au niveau de la rangée supérieure de boutons. Étiquette au milieu, bouton "-" à gauche, bouton "+" à droite de l'étiquette. Il y aura un espace en dessous pour la liste des commandes en cours.

Placez les commutateurs All/Each sous les boutons "Trailing" au niveau de l'étiquette "Profit".

C'est ma vision, mais d'après ce que j'ai compris, après avoir lu le forum et observé votre travail, vous avez le désir et la capacité de dessiner, donc je ne m'opposerai pas à vos suggestions.

 
Александр:

1. Je pense qu'il serait préférable de faire en sorte que le panneau occupe toute la largeur de la zone de travail (il y aurait plus de méta pour la liste des commandes).

2. Les champs d'édition avec les étiquettes Lot, Profit et à côté des boutons "Maintenant" doivent avoir des centièmes (format 0.00).

3. J'ai expérimenté et je suis arrivé à la conclusion qu'il est préférable de remplacer le champ avec la liste des échéances par une étiquette et deux boutons ("-" et "+"). Placez au niveau de la rangée supérieure de boutons. Étiquette au milieu, bouton "-" à gauche, bouton "+" à droite de l'étiquette. En dessous, il y aura un espace pour la liste des commandes en cours.

4. Placez les commutateurs All/Each sous les boutons Trailing au niveau de l'étiquette Profit.

5. c'est ma vision, mais j'ai compris, après avoir lu le forum et observé votre travail, que vous avez le talent et la capacité de dessiner, donc je ne m'opposerai pas à vos suggestions.

1. c'est-à-dire faire en sorte que le panneau s'adapte automatiquement à la largeur du graphique? Ou seulement à la largeur du graphique ?

2. Je le ferai.

3. Je ne comprends pas bien. Vous voulez dire que les délais doivent être configurés dans le champ de saisie avec des boutons +/- ? Et nous ne devrions pas faire une fenêtre séparée avec la liste des commandes ? Tout sur le panneau ?

4. L'interrupteur pourrait être un simple bouton qui change de texte lorsqu'il est enfoncé ou pressé ?

5. Ajoutez des éléments graphiques.

(Un petit curseur pourrait être transformé en interrupteur. Le curseur irait de droite à gauche).

 
Реter Konow:

Quant à l'échange du testeur, je suis en train de résoudre ce problème en ce moment même. Je veux refaire complètement la communication entre l'EA et le moteur. Je veux l'implémenter à travers des "objets de communication" (objets MT dont la description de la chaîne est utilisée pour transférer des données entre programmes).

Cela peut être un moyen de communication rapide et polyvalent pour la communication normale et pour la communication en mode test de l'EA.

L'approche actuelle de la communication surcharge la file d'attente des événements OnChartEvent(). L'envoi et la réception des messages entre l'EA et le moteur sont retardés s'il y a trop d'événements, ce qui est visible visuellement. La communication par le biais d'objets MT devrait éliminer ce problème, car la réception et l'envoi de messages se feront en dehors de la file d'attente des événements OnChartEvent().

En théorie, ça devrait marcher...

Je ne suis pas sûr de bien comprendre ce que vous voulez dire.

Ai-je bien compris que vous allez implémenter la communication entre l'EA et le panneau en mode test par le biais d'événements OnChartEvent() ?

Si c'est le cas, les chances de succès ne sont pas très élevées, car les événements OnChartEvent() ne sont pas générés pour l'EA dans le testeur (seulement pour l'indicateur).

https://www.mql5.com/ru/forum/294890/page4#comment_9914750 ici il a été suggéré de remplacer les événements OnChartEvent() par des événements OnTick().

Je l'ai essayé, mais cela fait que tous les objets composites (SpinEdit, ComboBox et autres) cessent de fonctionner. La seule méthode qui permet de modifier les valeurs des variables dans le testeur Button.Pressed() et uniquement pour les boutons autonomes (boutons non inclus dans un objet complexe comme SpinEdit).

SimplePanel проблема при переключении таймфрейма
SimplePanel проблема при переключении таймфрейма
  • 2018.12.16
  • www.mql5.com
В составе стандартного пакета MT4 имеется пример создания панели управления "Simple Panel...
 
Александр:

Je ne suis pas sûr de bien comprendre ce que vous voulez dire.

Si je comprends bien, vous allez réaliser la communication entre l'EA et le panneau en mode test à travers les événements OnChartEvent() ?

Si c'est le cas, les chances de succès ne sont pas très élevées, car les événements OnChartEvent() ne sont pas générés pour l'EA dans le testeur (seulement pour l'indicateur).

https://www.mql5.com/ru/forum/294890/page4#comment_9914750 ici il a été suggéré de remplacer les événements OnChartEvent() par des événements OnTick().

Je l'ai essayé, mais cela fait que tous les objets composites (SpinEdit, ComboBox et autres) cessent de fonctionner. La seule méthode qui permet de modifier les valeurs des variables dans le testeur Button.Pressed() et uniquement pour les boutons autonomes (boutons non inclus dans un objet complexe comme SpinEdit).

C'est une longue explication. Mais, faites confiance à mon expérience. La méthode de communication fonctionnera.

Le panel sera sur un tableau régulier. Le conseiller expert dans le testeur. Le panel trouvera le conseiller expert dans le testeur de stratégie, créera des objets MT et, par leur description, "communiquera" avec l'EA.

La fonction OnChartEvent() fonctionne sur le graphique normal. Ce n'est pas le cas dans le testeur. Mais cela n'empêchera pas la synchronisation des valeurs des paramètres.

Je suis sûr que ça va marcher.

Ce sera l'affaire d'une semaine.

 
Реter Konow:

C'est une longue explication. Mais, faites confiance à mon expérience. La méthode de communication fonctionnera.

Le panneau sera sur un graphique normal. Le conseiller expert dans le testeur. Le panel trouvera le conseiller expert dans le testeur de stratégie, créera des objets MT et, par leur description, "communiquera" avec l'EA.

La fonction OnChartEvent() fonctionne sur le graphique normal. Ce n'est pas le cas dans le testeur. Mais cela n'empêchera pas la synchronisation des valeurs des paramètres.

Je suis sûr que ça va marcher.

Ce sera l'affaire d'une semaine.

Ça ne marchera pas.

Raison: