Как сделать вывод на чарт моноширинным шрифтом? - страница 3

 
Victor Ziborov:

На этапе тестирования и оптимизации параметров вывод в Comment и вывод на Label можно отключить, а вот, когда пришло время использовать Советник в реальной жизни, вывод в Comment, и вывод на Label следует опять включить.


спасибо, кэп )))))) мы не знали

 
Victor Ziborov:

На этапе тестирования и оптимизации параметров вывод в Comment и вывод на Label можно отключить, а вот, когда пришло время использовать Советник в реальной жизни, вывод в Comment, и вывод на Label следует опять включить.

Ну это вообще автоматически делается:

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

Далее по коду при необходимости вывода Comment или совершения любых графических построений проверяем bIsComment. В итоге не нужно ничего переключать вручную.

 
Ihor Herasko:

Ну это вообще автоматически делается:

Далее по коду при необходимости вывода Comment или совершения любых графических построений проверяем bIsComment. В итоге не нужно ничего переключать вручную.


А где говорилось, что надо вручную? Я что-то пропустил?

 
Yury Kirillov:

А где говорилось, что надо вручную? Я что-то пропустил?


Отвечал на этот пост. Там, в принципе, двусмысленно. Но как-то больше похоже, что "отключить" и "включить" - это настроечный параметр, который изменяется пользователем в зависимости от способа запуска программы. Просто уточнил, что такой параметр не нужен.

 
Artem Virskiy:

Можно померить ширину каждого символа в пискелях (их будет несколько групп с одинаковой шириной). Написать функцию, которая будет дополнять любую строку пробелами до достижения заданной ширины. Потом из этих подстрок собирать комментарий.

Если сделаете такую функцию, выкладывайте её в кодобазу, многие будут благодарны. И я тоже. А самому заморачиваться лень.

В этом случае будет полезен символ \x200A - пробел минимальной ширины, для точной подгонки. И пробелы обычные заменить символом /1 - широкий пробел (все таки длинна комментария ограничена). Может быть другие есть пробелы полезные. но я их не знаю.


Спасибо за идею!

 
Yury Kirillov:
Comment работает существенно быстрее графических шрифтов.

Это логично, но это не так.
И это легко проверить. 
Вот вам скрипт на MQL5 (на 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("");

}

Тест показывает, что графический вывод работает приблизительно на 10% быстрее. При этом графический способ вывода сглаживает шрифт в отличии от Comment.  Но самое интересно в том, что если даже размер шрифта установить 30 (вместо 12), то скорость все равно выше. Лично для меня это загадка.

Файлы:
 
Alexey Volchanskiy:

Так я мультики 60к/сек не делаю, вывел и ок

Канвас с мультиками тоже справится.


Файлы:
 
Nikolai Semko:


Вот вам скрипт на MQL5 (на MT4 не пробовал):


Попробовал на МТ4. Код работает и на нем. 
На МТ4 оказалось Comment где-то  в 5 раз быстрее графического аналога. Причем, получается что в MT5 Comment() работает в 5-6 раз медленнее, чем в MT4. А вот это уже неприятная неожиданность и странность. Тогда вопрос к разработчикам. Как так? Ведь это явный баг для пятерки!!! 

 
Nikolai Semko:

Это логично, но это не так.
И это легко проверить. 
Вот вам скрипт на MQL5 (на MT4 не пробовал):

Тест показывает, что графический вывод работает приблизительно на 10% быстрее. При этом графический способ вывода сглаживает шрифт в отличии от Comment.  Но самое интересно в том, что если даже размер шрифта установить 30 (вместо 12), то скорость все равно выше. Лично для меня это загадка.


Эти измерения не о чем. Надо делать отдельные циклы по несколько десятков тысяч проходов отдельно для Comment и Canvas, тогда можно о чем-то судить. И чтобы выводимый текст менялся, например пусть выводится значение счетчика.

Не могли бы переделать в таком виде?

 
Alexey Volchanskiy:

Эти измерения не о чем. Надо делать отдельные циклы по несколько десятков тысяч проходов отдельно для Comment и Canvas, тогда можно о чем-то судить. И чтобы выводимый текст менялся, например пусть выводится значение счетчика.

Не могли бы переделать в таком виде?


Делал и отдельно циклы, тоже думал, что результат какой-то странный.  Все тоже самое. Те же результаты. Разницы нет, общий цикл или по отдельности. В моем примере текст меняется каждый раз, странно почему этого не заметили. Я тоже знаю о оптимизации компилятора. ))