Come faccio a rendere l'output di un grafico in carattere monospaziato? - pagina 3

 
Victor Ziborov:

Nella fase di test e ottimizzazione dei parametri, l'output su Comment e l'output su Label possono essere disabilitati, ma quando è il momento di usare l'EA nella vita reale, l'output su Comment e l'output su Label dovrebbero essere abilitati nuovamente.


grazie, cap )))))) non lo sapevamo

 
Victor Ziborov:

Nella fase di test e ottimizzazione dei parametri, l'uscita nel Commento e l'uscita sull'Etichetta possono essere disattivate, ma quando è il momento di usare l'EA nella vita reale, l'uscita nel Commento e l'uscita sull'Etichetta dovrebbero essere riattivate.

In generale, questo viene fatto automaticamente:

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

Poi controlliamo bIsComment nel codice se il commento deve essere emesso o se deve essere eseguito un grafico. Di conseguenza, non c'è bisogno di cambiare nulla manualmente.

 
Ihor Herasko:

Questo viene fatto automaticamente:

Poi controlliamo bIsComment sul codice quando è necessario emettere commenti o fare costruzioni grafiche. Di conseguenza, non c'è bisogno di cambiare nulla manualmente.


Dove è stato detto che bisogna farlo manualmente? Mi sono perso qualcosa?

 
Yury Kirillov:

Dove si dice che bisogna farlo manualmente? Mi sono perso qualcosa?


Rispondere a questo post. Lì è fondamentalmente ambiguo. Ma in qualche modo sembra più che "disabilitare" e "abilitare" sia un parametro di configurazione che viene cambiato dall'utente a seconda di come viene eseguito il programma. Ho appena chiarito che tale parametro non è necessario.

 
Artem Virskiy:

Puoi misurare la larghezza di ogni carattere in piskel (ci saranno diversi gruppi con la stessa larghezza). Scrivere una funzione che aggiunga qualsiasi stringa con spazi fino a raggiungere una data larghezza. Poi assemblare il commento da queste sottostringhe.

Se fate tale funzione, postatela in kodobase, molti vi ringrazieranno. E anch'io. Sono troppo pigro per preoccuparmi.

In questo caso, sarebbe utile il simbolo \x200A - larghezza minima dello spazio, per un adattamento esatto. E sostituite gli spazi regolari con il simbolo /1 - spazio largo (dopo tutto, la lunghezza del commento è limitata). Forse ci sono altri spazi utili, ma non li conosco.


Grazie per l'idea!

 
Yury Kirillov:
Il commento è significativamente più veloce dei font grafici.

È logico, ma non lo è.
Ed è facile da controllare.
Ecco uno script su MQL5 (non l'ho provato su 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("");

}

Il test mostra che l'output grafico è circa il 10% più veloce. Ma la cosa interessante è che anche se si imposta la dimensione del carattere a 30 (invece di 12), la velocità è ancora maggiore. Per me personalmente è un mistero.

File:
 
Alexey Volchanskiy:

Non faccio cartoni animati a 60k/sec, li metto solo fuori e ok.

Anche la tela può fare dei cartoni animati.


File:
 
Nikolai Semko:


Ecco uno script su MQL5 (non l'ho provato su MT4):


Ho provato su MT4. Il codice funziona anche lì.
Su MT4 si è scoperto che Comment è circa 5 volte più veloce della sua controparte grafica. E si scopre che Comment() è 5-6 volte più lento su MT5 che su MT4. Questa è una sorpresa sgradevole e strana. Quindi la mia domanda è rivolta agli sviluppatori. Come mai? È chiaramente un bug per il 5!!!

 
Nikolai Semko:

È logico, ma non lo è.
E questo è facile da controllare.
Ecco uno script per MQL5 (non l'ho provato su MT4):

Il test mostra che l'output grafico è circa il 10% più veloce. Ma la cosa interessante è che anche se si imposta la dimensione del carattere a 30 (invece di 12), la velocità è ancora maggiore. Per me personalmente è un mistero.


Queste misure non riguardano nulla. Dovremmo eseguire cicli separati di decine di migliaia di passaggi per Comment e Canvas separatamente, allora saremo in grado di giudicare qualcosa. E il testo da stampare dovrebbe cambiare, per esempio far stampare il valore del contatore.

Non si potrebbe rifare in questo modo?

 
Alexey Volchanskiy:

Queste misure non sono niente. Dovremmo fare cicli separati di diverse decine di migliaia di passaggi separatamente per Comment e Canvas, poi possiamo giudicare qualcosa. E il testo da stampare dovrebbe cambiare, per esempio, far stampare il valore del contatore.

Potresti rifarlo in questa forma?


Ho provato anch'io a fare dei loop separati e ho pensato che il risultato fosse piuttosto strano. Stessi risultati. Non fa alcuna differenza se si tratta di un ciclo generale o separatamente. Nel mio esempio il testo cambia ogni volta, mi chiedo perché non sia stato notato. So anche dell'ottimizzazione del compilatore. ))