Comment faire pour que la sortie sur un graphique soit en police monospace ? - page 3

 
Victor Ziborov:

Au stade des tests et de l'optimisation des paramètres, la sortie vers le commentaire et la sortie vers l'étiquette peuvent être désactivées, mais lorsqu'il est temps d'utiliser l'EA dans la vie réelle, la sortie vers le commentaire et la sortie vers l'étiquette doivent être réactivées.


merci, cap )))))) nous ne savions pas

 
Victor Ziborov:

Au stade des tests et de l'optimisation des paramètres, la sortie dans le commentaire et la sortie sur l'étiquette peuvent être désactivées, mais lorsqu'il est temps d'utiliser l'EA dans la vie réelle, la sortie dans le commentaire et la sortie sur l'étiquette doivent être réactivées.

En général, cela se fait automatiquement :

bool bIsComment = (!IsTesting() || IsVisualMode());

Ensuite, nous vérifions bIsComment dans le code si le commentaire doit être édité ou si un graphique doit être exécuté. Par conséquent, il n'est pas nécessaire de commuter quoi que ce soit manuellement.

 
Ihor Herasko:

Cette opération se fait automatiquement :

Ensuite, nous vérifions bIsComment sur le code lorsqu'il est nécessaire d'émettre un commentaire ou de faire des constructions graphiques. Par conséquent, il n'est pas nécessaire de commuter quoi que ce soit manuellement.


Où il a été dit que vous deviez le faire manuellement ? J'ai raté quelque chose ?

 
Yury Kirillov:

Où est-il dit que vous devez le faire manuellement ? J'ai raté quelque chose ?


Répondant à ce message. C'est fondamentalement ambigu là. Mais d'une certaine manière, il semble plutôt que "désactiver" et "activer" soit un paramètre de configuration qui est modifié par l'utilisateur en fonction de la façon dont le programme est exécuté. Je viens de clarifier qu'un tel paramètre n'est pas nécessaire.

 
Artem Virskiy:

Vous pouvez mesurer la largeur de chaque caractère en piskels (il y aura plusieurs groupes avec la même largeur). Écrivez une fonction qui ajoutera toute chaîne de caractères avec des espaces jusqu'à ce qu'elle atteigne une largeur donnée. Assemblez ensuite le commentaire à partir de ces sous-chaînes.

Si vous créez une telle fonction, postez-la sur kodobase, beaucoup vous remercieront. Et moi aussi. Je suis trop paresseux pour me déranger.

Dans ce cas, le symbole \x200A serait utile - largeur minimale de l'espace, pour un ajustement exact. Et remplacez les espaces normaux par le symbole /1 - espace large (après tout, la longueur du commentaire est limitée). Il existe peut-être d'autres espaces utiles, mais je ne les connais pas.


Merci pour l'idée !

 
Yury Kirillov:
Comment est nettement plus rapide que les polices graphiques.

C'est logique, mais ça ne l'est pas.
Et c'est facile à vérifier.
Voici un script sur MQL5 (je ne l'ai pas essayé sur MT4) :

#property script_show_inputs
#include <Canvas\Canvas.mqh>

input uint   FontSize=12;                                   // размер шрифта
input ENUM_COLOR_FORMAT format=COLOR_FORMAT_ARGB_NORMALIZE; //Способ обработки цвета

void OnStart()
  {
   CCanvas Text;
   ulong ColorScreen=ChartGetInteger(0,CHART_COLOR_BACKGROUND,0);

   Text.FontSet("Arial",FontSize);
   string str="Соотношение времени выполнения Canvas/Comment = 0.00000";
   int H=Text.TextHeight(str);
   int W=Text.TextWidth(str);
   if(!Text.CreateBitmapLabel(0,0,"FONT",2,130,W,H,format)) Print("Error creating canvas: ",GetLastError());

   ulong t1=1,t2=1,t0;
   int i=0;
   color clr=(color)ARGB(255,255^GETRGBR(ColorScreen),255^GETRGBG(ColorScreen),255^GETRGBB(ColorScreen));
   while(!IsStopped())
     {
      t0=GetMicrosecondCount();
      Text.Erase((color)ColorScreen);
      Text.TextOut(0,0,str,clr);
      Text.Update();
      t1+=GetMicrosecondCount()-t0;
      t0=GetMicrosecondCount();
      Comment(str);
      t2+=GetMicrosecondCount()-t0;
      str="Соотношение времени выполнения Canvas/Comment = "+DoubleToString((double)t1/(double)t2,5);
      if(i==1000) {Print("Canvas - ",t1,"   Comment - ",t2); i=0; t1=1; t2=1; } else i++;
     }
   Text.Destroy();
   Comment("");

}

Le test montre que la sortie graphique est environ 10% plus rapide. Mais ce qui est intéressant, c'est que même si vous réglez la taille de la police sur 30 (au lieu de 12), la vitesse est toujours plus rapide. C'est un mystère pour moi personnellement.

Dossiers :
 
Alexey Volchanskiy:

Je ne fais pas de dessins animés à 60k/sec, je les sors juste et ok.

Canvas peut aussi faire des dessins animés.


Dossiers :
 
Nikolai Semko:


Voici un script sur MQL5 (je ne l'ai pas essayé sur MT4) :


Je l'ai essayé sur MT4. Le code y fonctionne également.
Sur MT4, il s'est avéré que Comment est environ 5 fois plus rapide que son homologue graphique. Et il s'avère que Comment() est 5-6 fois plus lent sur MT5 que sur MT4. Voilà une surprise désagréable et étrange. Ma question s'adresse donc aux développeurs. Comment cela se fait-il ? C'est clairement un bug pour 5 ! !!

 
Nikolai Semko:

C'est logique, mais ça ne l'est pas.
Et cela est facile à vérifier.
Voici un script pour MQL5 (je ne l'ai pas essayé sur MT4) :

Le test montre que la sortie graphique est environ 10% plus rapide. Mais ce qui est intéressant, c'est que même si vous réglez la taille de la police sur 30 (au lieu de 12), la vitesse est toujours plus rapide. C'est un mystère pour moi personnellement.


Ces mesures ne servent à rien. Nous devrions exécuter des boucles séparées de dizaines de milliers de passages pour Comment et Canvas séparément, alors nous serons en mesure de juger quelque chose. Et le texte à imprimer doit changer, par exemple, laisser la valeur du compteur être imprimée.

Vous ne pourriez pas le refaire comme ça ?

 
Alexey Volchanskiy:

Ces mesures ne sont rien. Nous devrions faire des cycles séparés de plusieurs dizaines de milliers de passages séparément pour Comment et Canvas, alors nous pourrons juger quelque chose. Et le texte à imprimer doit changer, par exemple, laisser la valeur du compteur être imprimée.

Pourriez-vous le refaire sous cette forme ?


J'ai aussi essayé de faire des boucles séparées et j'ai trouvé que le résultat était plutôt étrange. Mêmes résultats. Cela ne fait aucune différence qu'il s'agisse d'une boucle générale ou séparée. Dans mon échantillon, le texte change à chaque fois, je me demande pourquoi cela n'a pas été remarqué. Je connais aussi l'optimisation du compilateur. ))