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

 
Vasiliy Sokolov:

Peter, c'est quoi ces cordes ? ! Vous avez un tas de paramètres comme double, int, couleur vous les convertissez en une chaîne de caractères pour les écrire dans l'objet sur le graphique. Mais vous n'avez pas besoin de ficelles lorsque vous travaillez avec l'union. Regardez à nouveau l'exemple, là vous travaillez directement avec le double, sans aucune chaîne, et les données sont bien transmises.

Vasiliy, en plus des données numériques, les EA personnalisés définissent un grand nombre de données de type chaîne dans le moteur. Noms, messages, etc. Il est donc impossible de se contenter de chiffres.

Par exemple, l'Expert Advisor d'Oleg Papkov fera passer des textes comme "La tendance est montée, la tendance est descendue..." dans ses fenêtres. D'autres voudront faire passer des textes dans les cellules du tableau. Dans les champs de saisie.

Il n'y a aucun moyen de ne faire qu'avec des chiffres... ((

 

Si vous devez transmettre du texte, traduisez la chaîne en un tableau d'octets :

StringToCharArray("text", u.char);

où u est union et u.char array char[] respectivement. Le tableau d'union aura une taille fixe, donc si la chaîne ne rentre pas, il faut soit augmenter u.char, soit passer la chaîne en plusieurs parties.

 
Vasiliy Sokolov:

Si vous devez transmettre du texte, traduisez la chaîne en un tableau d'octets :

où u est union et u.char array char[] respectivement. Le tableau d'union aura une taille fixe, donc si la chaîne de caractères ne rentre pas dans le tableau, il faut soit étendre u.char, soit passer la chaîne de caractères en plusieurs parties.

Je vois. Merci. Je vais l'essayer maintenant. (Bien que je puisse tout faire à travers la description de l'objet ). Mais je veux comprendre pleinement les ressources. Cela peut aussi s'avérer utile.

Des fonctionnalités supplémentaires sont toujours utiles. Et quelques nouvelles connaissances ne feront pas de mal non plus...

En bref, merci beaucoup pour votre aide personnelle et celle de tous les autres.

 
Реter Konow:

Je vois. Merci. Je vais essayer. (Bien que l'on puisse tout faire par le biais de la description des objets ), mais je veux aller au fond des choses en matière de ressources. Cela peut aussi s'avérer utile.

Des fonctionnalités supplémentaires sont toujours utiles. Et quelques nouvelles connaissances ne feront pas de mal non plus...

En bref, merci beaucoup pour votre aide personnelle et celle de tous les autres.

Si vous voulez une communication rapide, vous ne pouvez rien faire de plus rapide. La chaîne de caractères avec des paramètres que vous passerez à travers les objets très rapidement, peut-être même plus rapidement que ResourceCreate, mais l'analyse syntaxique de cette chaîne de caractères tuera toute votre vitesse. Mais MQL est un langage très rapide, et même l'analyse lente est relativement rapide ici.

 
Vasiliy Sokolov:

Si vous voulez une communication rapide, vous ne pouvez rien faire de plus rapide que le syndicat. Vous pouvez faire passer une chaîne de caractères avec des paramètres à travers des objets très rapidement, peut-être même plus rapidement que ResourceCreate, mais l'analyse de cette chaîne de caractères tuera votre vitesse. Mais MQL est un langage très rapide, et même l'analyse lente est relativement rapide ici.

Le problème est que l'analyse syntaxique sera nécessaire dans tous les cas. Après tout, même après avoir écrit la chaîne de caractères dans la ressource, elle doit ensuite être extraite de celle-ci, collectée puis divisée en parties"numéro de paramètre/valeur de paramètre".

C'est-à-dire qu'il est difficile d'extraire d'un seul coup les cordes cassées de la ressource. Et donc l'analyse syntaxique est toujours nécessaire...((

 
Реter Konow:

Le problème est que l'analyse syntaxique sera nécessaire dans tous les cas. Après tout, même après avoir écrit une chaîne de caractères dans la ressource, elle doit ensuite être extraite de celle-ci, collectée, puis divisée en parties"numéro de paramètre / valeur de paramètre".

C'est-à-dire qu'il est difficile d'extraire d'un seul coup les cordes cassées de la ressource. Donc, nous avons encore besoin de l'analyse syntaxique...((

Peter, vous le faites encore. Combien de fois cela a-t-il duré ? Cela a déjà été dit de nombreuses fois : vous passez des valeurs et des numéros de paramètres sans utiliser de chaînes de caractères. Dans votre exemple, vous avez passé et obtenu double sans aucune analyse syntaxique des chaînes. Alors pourquoi essayez-vous de remettre ce double dans une chaîne de caractères ? Si vous devez transmettre un message à un utilisateur, vous le transmettez sous forme de texte sans aucune analyse. C'est tout.

 
Vasiliy Sokolov:

Peter, tu recommences. Combien de fois cela a-t-il été dit ? Cela a été dit à maintes reprises : vous passez et recevez des valeurs de paramètres et des nombres SANS utiliser de chaînes de caractères. Dans votre exemple, vous avez passé et obtenu double sans aucune analyse syntaxique de la chaîne. Alors pourquoi essayez-vous de remettre ce double dans une chaîne de caractères ? Si vous devez transmettre un message à un utilisateur, vous le transmettez sous forme de texte sans aucune analyse. C'est tout.

Vasily, laisse-moi essayer d'expliquer.

Les valeurs des paramètres ne sont pas seulement des chiffres. La valeur d'un paramètre peut être un texte. Par exemple, un utilisateur a saisi du texte dans le champ de saisie. Ce texte est transféré du moteur au conseiller expert. Ou bien, le conseiller expert envoie un texte à l'interface graphique lors d'un événement spécifique, avec le message "Une session de négociation a commencé !

Étant donné qu'à chaque événement, le conseiller expert ou le moteur doit transmettre des données de TOUS les types (int, double, long, chaîne de caractères...), il est plus pratique de tout transmettre d'une seule manière, par le biais d'une chaîne de caractères, puis de la convertir dans le type souhaité.

Autrement, une façon de passer certaines données, et une autre façon de passer d'autres données.

Personne ne sait quelles données l'utilisateur va transférer ou recevoir en plus. Ce sont peut-être les textes qui constitueront les principales données. De toutes parts, il s'avère que la corde, est un support universel pour transmettre et recevoir des informations.

 
Vasiliy Sokolov:


Au fait, regardez le pas en avant que j'ai fait grâce à nos solutions d'hier (et à votre aide) :

Dans cet exemple particulier, tout passe par une ressource.



Et tout est fait par ce code dans l'EA :

void OnTimer()
  { 
   static int q1,q2,q3,a,b,c,d; 
   //------------------------------------
   LOAD_CANVAS_Last_10_bars();
   //---------------------------------
   if(!a) { q1++;}
   if(q1 == 200)a = 1;
   if(a)q1--;
   if(!q1)a = 0;
   //------------------------------------  
   CIRCLE(q1,q2,q3,clrGreen);  
   TRIANGLE(q1,q1,q1 + 100,q1 + 10,q1 + 50,q1 + 200,clrRed);  
   ELLIPSE(q1,q1,q1 + q1*2,q1 +  q1,clrBlue);  
   FILLED_CIRCLE(q1,20,20,clrBlue); 
   TRIANGLE(q1 + 10,q1,q1 + 10,q1 + 100,q1 + 50,q1 + 200,clrAqua);  
   ELLIPSE(q1 + 50,q1,q1 + q1*2,q1 * q1-30,clrBlack);  
   ELLIPSE(q1 + 52,q1,q1 + q1*3,q1 * q1-32,clrMagenta); 
   ELLIPSE(q1 + 54,q1,q1 + q1*4,q1 * q1-34,clrOrange); 
   FILLED_CIRCLE(q1 + 70,q1+20,20,clrDarkCyan);        
   FILLED_CIRCLE(q3,q2,40,clrGreen); 
   //------------------------------------
   REDRAW_CANVAS();
  }
 
Реter Konow:

Au fait, regardez le pas en avant que j'ai fait grâce à nos solutions d'hier (et à votre aide) :

Dans cet exemple particulier, tout est transféré par le biais d'une ressource.

Oui, c'est spectaculaire.

 
Реter Konow:

De toutes parts, il apparaît que la corde est un support universel pour transmettre et recevoir des informations.

Je ne suis pas d'accord avec vous. Le tableau d'octets est le cheval de bataille universel pour le transfert d'informations.

Je suis d'accord pour que le texte soit également transféré. Et je suis également d'accord pour dire qu'il est préférable de passer le texte sous forme de chaîne. Mais, en fait, une chaîne de caractères n'est qu'une abstraction. Lorsque vous transmettiez des textes via des objets dans le graphique, la longueur de ce texte était limitée à 64 caractères. Cela signifie que dans les coulisses, vous transmettez en fait un tableau de 64 octets (MQL a fait tout le travail de conversion d'une chaîne de caractères en un tableau et inversement pour vous, pas explicitement). Si vous réalisez un projet où l'échange d'informations entre programmes MQL est un point critique et fondamental du projet, il est hors de question de laisser cette fonction à une solution généralisée. Si j'étais vous, je développerais un système de transfert généralisé pour des types arbitraires, y compris les chaînes de caractères, avec un contrôle strict de la conversion. Cela pourrait se faire sur la base de l'analyse syntaxique et de la lecture des ressources. Mais pour l'analyse syntaxique des chaînes de caractères, cela pose problème, car il n'y a aucune garantie que la chaîne analysée sera valide.