Ошибки, баги, вопросы - страница 2976

 
Nikolai Semko:
Вы о каких недостатках?
О ресурсоемкости?
Это было ошибочное утверждение. 
Comment кушает ресурсов не меньше.
Формирование и вывод канваса с текстом на все окно занимает 1-3 миллисекунды.
В MT5 вывод comment занимает чуть больше времени. Если Вы собираетесь обновлять текстовую информацию 30 раз в секунду, то все равно не увидите тормозов.

Я подробно не разбирался из-за чего Канвас может быть медленным, но мне кажется, что всё по той же причине... Пиксели в массиве нельзя выборочно  изменить и дать команду на перерисовку. Сначала вносим изменения в массив, а затем обязательно ResourceCreate. Который копирует пиксели один за другим, а потом, аналогично, один за другим их выводит в чарт, а затем еще обновление чарта (ChartRedraw). Сколько ненужных операций... Это по любому добъёт загруженность процессора, когда он занят полезной обработкой данных. В то время как лейблы хоть пикселей занимают меньше (а значит выводится быстрее). И потом, их механизм вывода полностью внутри чарта (не нужно передавать массив). Хоть я достоверно не знаю алгоритм их работы, но мне кажется, они работают быстрее. Я раньше делал панель вывода текста на основе канвы. И при визуальном тестировании эксперта с такой панелью на тестере я не был впечатлён результатом. Помимо нагрузки самого советника работу тормозила перерисовка панели. Постоянно Update (ResourceCreate - ChartRedraw) на каждом тике. В то время как с лейблами я не замечал подобных тормозов.

 

Или я дурак или лыжи не едут? мт4 билд 1320

double LotStep = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);
double Lot=0.7;
PrintFormat("LotStep %f, lot %f, %f, %f %f",LotStep,Lot,Lot/LotStep,MathFloor(Lot/LotStep),(int)double(Lot/LotStep));
//Print
//2021.03.07 23:42:46.507	2021.02.25 07:36:40  EA_CCIcross_v1.0 AUDJPY,M5: LotStep 0.010000, lot 0.070000, 7.000000, 6.000000 6.000000

p/s/ понимаю что 7 это 6,9999, но почему тогда 0,7 делённое на 0,1  Принт выводит как 7,000 а не 6,9999, вводит в заблуждение.
 
Mihail Matkovskij:

Я подробно не разбирался из-за чего Канвас может быть медленным, но мне кажется, что всё по той же причине... Пиксели в массиве нельзя выборочно  изменить и дать команду на перерисовку. Сначала вносим изменения в массив, а затем обязательно ResourceCreate. Который копирует пиксели один за другим, а потом, аналогично, один за другим их выводит в чарт, а затем еще обновление чарта (ChartRedraw). Сколько ненужных операций... Это по любому добъёт загруженность процессора, когда он занят полезной обработкой данных. В то время как лейблы хоть пикселей занимают меньше (а значит выводится быстрее). И потом, их механизм вывода полностью внутри чарта (не нужно передавать массив). Хоть я достоверно не знаю алгоритм их работы, но мне кажется, они работают быстрее. Я раньше делал панель вывода текста на основе канвы. И при визуальном тестировании эксперта с такой панелью на тестере я не был впечатлён результатом. Помимо нагрузки самого советника работу тормозила перерисовка панели. Постоянно Update (ResourceCreate - ChartRedraw) на каждом тике. В то время как с лейблами я не замечал подобных тормозов.

Это Вам только кажется.
Понятное дело, что нет ничего бесплатного, но канвас это самый быстрый способ вывода текста на экран из всех существующих в МТ5, так как канвас это основа, а комменты и лейблы это вторичный от канваса продукт. 
Пользуйтесь распринтовкой, если Вы такой жадный до ресурсов вашего проца...
 
Mihail Matkovskij :

Я подробно не разбирался из-за чего Канвас может быть медленным, но мне кажется, что всё по той же причине... Пиксели в массиве нельзя выборочно  изменить и дать команду на перерисовку. Сначала вносим изменения в массив, а затем обязательно ResourceCreate. Который копирует пиксели один за другим, а потом, аналогично, один за другим их выводит в чарт, а затем еще обновление чарта (ChartRedraw). Сколько ненужных операций... Это по любому добъёт загруженность процессора, когда он занят полезной обработкой данных. В то время как лейблы хоть пикселей занимают меньше (а значит выводится быстрее). И потом, их механизм вывода полностью внутри чарта (не нужно передавать массив ). Хоть я  достоверно  не знаю алгоритм их работы, но мне кажется, они работают быстрее. Я раньше делал панель вывода текста на основе канвы. И при визуальном тестировании эксперта с такой панелью на тестере я не был впечатлён результатом. Помимо нагрузки самого советника работу тормозила перерисовка панели. Постоянно Update ( ResourceCreate -  ChartRedraw ) на каждом тике. В то время как с лейблами я не замечал подобных тормозов.

Пожалуйста, не говорите о том, чего вы не знаете. @Nikolai Semko абсолютно прав, и Canvas работает быстро и без каких-либо проблем или недостатков.
 

@Ilyas

Compiler bug ? Build 2817.

   const ushort AN_USHORT_CONSTANT = 1;
//---
   ushort avariable = 1;

   switch(avariable)
     {
      case AN_USHORT_CONSTANT :
         Print("Compiler bug ?");
         break;
     }


 
Nikolai Semko:
Это Вам только кажется.
Понятное дело, что нет ничего бесплатного, но канвас это самый быстрый способ вывода текста на экран из всех существующих в МТ5, так как канвас это основа, а комменты и лейблы это вторичный от канваса продукт. 
Пользуйтесь распринтовкой, если Вы такой жадный до ресурсов вашего проца...

Интересно, как это Вы определили, что лейблы созданы на основе канвы, если сама канва, это надстройка над OBJ_BITMAP_LABEL, а лейбл, это OBJ_LABEL?

Пока я общался здесь на форуме, то уже набросал панель вывода на лейблах, с любым заданным количеством строк и колонок. А для канвы у меня есть другие задачи, в других моих приложениях. И она там тоже очень хорошо работает.

Alain Verleyen:
Пожалуйста, не говорите о том, чего вы не знаете. @Nikolai Semko абсолютно прав, и Canvas работает быстро и без каких-либо проблем или недостатков.

Значит, вероятно, Вы всё знаете? Тогда, может поделитесь знаниями или ссылками, где можно почитать о графике в MetaTrader, чтобы и я знал то, что Вы знаете? :)

 
Alain Verleyen:

@Ilyas

Compiler bug ? Build 2817.

В MQL const это и не const вовсе. Фактически const только через макрос можно записать

//const ushort AN_USHORT_CONSTANT      = 1; //(*)
#define        AN_USHORT_CONSTANT ushort(1) //(**)
void main()
{
        int i[AN_USHORT_CONSTANT];      //(1) нормально
        ushort avariable = 1;
        switch(avariable) {
        case AN_USHORT_CONSTANT:        //(2) нормально
                break;
        }
}
void f( int = AN_USHORT_CONSTANT ) {}   //(3) нормально
enum { e = AN_USHORT_CONSTANT };        //(4) нормально    
 
A100 :

В MQL const это и не const вовсе. Фактически const только через макрос  можно записать

Да так это ошибка :-D
 
Alain Verleyen:
Да так это ошибка :-D

Обратите внимание, что это не в одном случае, а во всех (1) (2) (3) (4) так задумано: со (*) будет ошибка, а с (**) нормально. Т.е. константы отсутствуют как сущность

 
A100 :

Обратите внимание, что это не в одном случае, а во всех (1) (2) (3) (4) так задумано: со (*) будет ошибка, а с (**) нормально. Т.е. константы отсутствуют как сущность

Я знаю. Поэтому я прошу разработчиков исправить это.
Причина обращения: