Wie kann ich die Ausgabe in einem Diagramm in einer einzeiligen Schriftart gestalten? - Seite 3

 
Victor Ziborov:

In der Phase des Testens und Optimierens von Parametern können die Ausgabe an Kommentar und die Ausgabe an Label deaktiviert werden, aber wenn es an der Zeit ist, den EA im wirklichen Leben zu verwenden, sollten die Ausgabe an Kommentar und die Ausgabe an Label wieder aktiviert werden.


Danke, Cap )))))) Wir wussten es nicht.

 
Victor Ziborov:

In der Phase des Testens und Optimierens von Parametern können die Ausgabe im Kommentar und die Ausgabe auf dem Etikett ausgeschaltet werden, aber wenn es an der Zeit ist, den EA im wirklichen Leben zu verwenden, sollten die Ausgabe im Kommentar und die Ausgabe auf dem Etikett wieder eingeschaltet werden.

Im Allgemeinen geschieht dies automatisch:

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

Dann prüfen wir im Code bIsComment, ob der Kommentar ausgegeben werden soll oder ob ein Charting durchgeführt werden soll. Es ist also nicht nötig, etwas manuell zu schalten.

 
Ihor Herasko:

Dies geschieht automatisch:

Dann prüfen wir bIsComment auf dem Code, wenn es notwendig ist, Kommentar auszugeben oder irgendwelche grafischen Konstruktionen zu machen. Es ist also nicht nötig, etwas manuell zu schalten.


Wo wurde gesagt, dass man das manuell machen muss? Habe ich etwas verpasst?

 
Yury Kirillov:

Wo steht, dass man das manuell machen muss? Habe ich etwas verpasst?


Als Antwort auf diesen Beitrag. Das ist im Grunde genommen zweideutig. Aber irgendwie scheint es eher so zu sein, dass "deaktivieren" und "aktivieren" ein Konfigurationsparameter ist, der vom Benutzer geändert wird, je nachdem wie das Programm ausgeführt wird. Es wurde gerade klargestellt, dass ein solcher Parameter nicht erforderlich ist.

 
Artem Virskiy:

Sie können die Breite jedes Zeichens in Piskel messen (es wird mehrere Gruppen mit der gleichen Breite geben). Schreibe eine Funktion, die eine beliebige Zeichenkette mit Leerzeichen anfügt, bis sie eine bestimmte Breite erreicht. Fügen Sie dann einen Kommentar aus diesen Teilstrings zusammen.

Wenn Sie eine solche Funktion erstellen, stellen Sie sie in kodobase ein, viele werden Ihnen dankbar sein. Und ich auch. Ich bin zu faul, mir die Mühe zu machen.

In diesem Fall wäre das Symbol \x200A nützlich - die Mindestbreite des Raums für eine genaue Passform. Und ersetzen Sie reguläre Leerzeichen durch das Symbol /1 - breites Leerzeichen (schließlich ist die Länge des Kommentars begrenzt). Vielleicht gibt es noch andere nützliche Räume, aber ich kenne sie nicht.


Danke für die Idee!

 
Yury Kirillov:
Comment ist wesentlich schneller als grafische Schriftarten.

Das klingt logisch, ist es aber nicht.
Und es ist leicht zu überprüfen.
Hier ist ein Skript auf MQL5 (habe es nicht auf MT4 versucht):

#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("");

}

Der Test zeigt, dass die grafische Ausgabe etwa 10 % schneller ist. Interessant ist jedoch, dass die Geschwindigkeit auch dann noch höher ist, wenn Sie die Schriftgröße auf 30 (statt 12) einstellen. Für mich persönlich ist das ein Rätsel.

Dateien:
 
Alexey Volchanskiy:

Ich mache keine 60k/Sekunden-Cartoons, ich stelle sie einfach raus und gut ist.

Canvas kann auch Cartoons machen.


Dateien:
 
Nikolai Semko:


Hier ist ein Skript auf MQL5 (habe es nicht auf MT4 versucht):


Ich habe es auf MT4 ausprobiert. Der Code funktioniert auch dort.
Auf MT4 hat sich herausgestellt, dass Comment () 5 mal schneller ist als sein grafisches Pendant. Und es stellt sich heraus, dass Comment() auf MT5 5-6 mal langsamer ist als auf MT4. Das ist eine unangenehme und seltsame Überraschung. Meine Frage geht also an die Entwickler. Wie kommt das? Es ist eindeutig ein Fehler für 5!!!

 
Nikolai Semko:

Das klingt logisch, ist es aber nicht.
Und das ist leicht zu überprüfen.
Hier ist ein Skript für MQL5 (ich habe es nicht auf MT4 ausprobiert):

Der Test zeigt, dass die grafische Ausgabe etwa 10 % schneller ist. Interessant ist jedoch, dass die Geschwindigkeit auch dann noch höher ist, wenn Sie die Schriftgröße auf 30 (statt 12) einstellen. Für mich persönlich ist das ein Rätsel.


Bei diesen Messungen geht es um nichts. Wir sollten getrennte Schleifen mit Zehntausenden von Durchläufen für Comment und Canvas laufen lassen, dann können wir etwas beurteilen. Und der zu druckende Text soll sich ändern, z.B. soll der Zählerstand gedruckt werden.

Könnte man das nicht auch auf diese Weise machen?

 
Alexey Volchanskiy:

Diese Messungen sind unbedeutend. Wir sollten getrennte Zyklen von mehreren zehntausend Durchläufen für Comment und Canvas machen, dann können wir etwas beurteilen. Und der zu druckende Text soll sich ändern, z.B. soll der Zählerstand gedruckt werden.

Könnten Sie es in dieser Form wiederholen?


Ich habe auch versucht, getrennte Schleifen zu erstellen, und fand das Ergebnis ziemlich seltsam. Gleiche Ergebnisse. Es macht keinen Unterschied, ob es sich um eine allgemeine Schleife oder um eine separate Schleife handelt. In meinem Beispiel ändert sich der Text jedes Mal, ich frage mich, warum das nicht bemerkt wurde. Ich kenne mich auch mit der Optimierung von Compilern aus. ))