Библиотеки: Easy Canvas - страница 7

 
Nikolai Semko:

Переименовать не сложно. Благо есть Ctrl+H

Но я согласен с Андреем. Ищите у себя #define T или  #include <Canvas\iCanvas.mqh>   поставьте самым первым в проекте

Благо поиск по файлам автоматический ) Ни в одном файле в папке MQL5 нету #define T

Удалось выяснить, что конфликт с чем-то в TypeToBytes.mqh из TradeTransactions https://www.mql5.com/ru/code/22166

Эта библиотека давно не менялась, так что скорее всего в одном из новых билдов появилось какое-то нововведение или баг )

 
Oleksii Chepurnyi:

Удалось выяснить, что конфликт с чем-то в TypeToBytes.mqh из TradeTransactions https://www.mql5.com/ru/code/22166

Эта библиотека давно не менялась, так что скорее всего в одном из новых билдов появилось какое-то нововведение или баг )

Это баг компилятора.

#include <TypeToBytes.mqh> // https://www.mql5.com/ru/code/16282

class CLASS
{
  void Method()
  {
    datetime T[1];
    
    T[0] = 0; // '[' - name expected
  };
};

void OnStart()
{
  datetime T[1];
  
  T[0] = 0; // OK
}
 
Понял. Спасибо. Тогда исправлю конечно. 
 

Ура, нашли! )


@fxsaber, отслеживаете ветки по "своим" ключевым словам чем-то автоматическим, или просто листаете все ветки регулярно? Уж очень оперативно отвечаете на "таргетированные" вопросы.

 
Andrey Khatimlianskii:

@fxsaber, отслеживаете ветки по "своим" ключевым словам чем-то автоматическим, или просто листаете все ветки регулярно? Уж очень оперативно отвечаете на "таргетированные" вопросы.

Случайно выходит.

 

Хочу прояснить заинтерисованным программистам важным момент работы канваса в режиме тестера. 
Ко мне обратился один известный программист в этом сообществе с таким вопросом:

 - Почему в режиме тестера панель, созданная на объектах перерисовывается на порядок быстрее, чем реализованная на канвасе, тогда как в обычном режиме со скоростью канваса все в порядке?

Разобравшись, понял причину и решение данной проблемы.

Дело в том, что при объектах перерисовка происходит вместе с перерисовкой всего экрана, а экран в тестере перерисовывается не чаще, чем 30 кадров с секунду.

Объекты - это в конечном счете тот же канвас (внутренний), но когда вы изменяете своиства объекта, то канвас объекта не формируется(не пересчитывается), а формируется лишь в момент обновления экрана (ChartRedraw), что происходит в тестере (да и в обычном режиме тоже) не чаще, чем способен различить изменения наш глаз, т.е. не чаще ~ 32 кадров в секунду.

Допустим панель меняется каждый тик. Тогда и в тестере по умолчанию канвас будет пересчитываться каждый тик, но перерисовка в тестере происходит все равно не чаще ~30 милисекунд (~30 кадров в секунду).

Другими словами канвас будет пересчитываться гораздо чаще, чем будет происходить реальный вывод его на экран, поэтому и происходит несоразмерный перерасход ресурсов.

Решением данной проблемы будет контроль пересчета и перерисовывания канваса не чаще, чем раз в 15-30 милисекунд компьютерного времени, тогда и не будет лишних циклов пустых персчетов.

Например так:

void OnTick()
  {
  static uint lastCalc=0;
  uint cur=GetTickCount();
  if (cur-lastCalc>15) {
    ReDrawMyCanvas();
    lastCalc=cur;
   }
  }
 

Добрый день.

   if(width==0) {width=W.Width;   FullWinCanvW=true; Xpos=0;} else FullWinCanvW=false;
   if(height==0){height=W.height[SubWin]; FullWinCanvH=true; Ypos=0;} else FullWinCanvH=false;
   Name+=IntegerToString(rand())+IntegerToString(rand());
   Handle=ChartGetInteger(chart_id,CHART_WINDOW_HANDLE,SubWin);
   if(!CreateBitmapLabel(chart_id,SubWin,Name,Xpos,Ypos,width,height,formatCF))
      Print("Error creating canvas: ",GetLastError());

Вот эта строчка в конструкторе, зачем?

В CCanvas тоже много добавляется в имя, в том числе и rand. Бывает, имя такое уже, что превышает допустимую длину )

 
Oleksii Chepurnyi:

Добрый день.

Вот эта строчка в конструкторе, зачем?

В CCanvas тоже много добавляется в имя, в том числе и rand. Бывает, имя такое уже, что превышает допустимую длину )

Да, согласен.
В моей версии iCanvas я уже это исправил, а здесь видно забыл.

 
Версия 1.40
Исправлены некоторые ошибки. 
В частности, исправлена ошибка: не менялся автоматически размер объекта iCanvas по вертикали, если объектов было более одного.
 
Будет ли библиотека работать в Тестере стратегий? Хочу попробовать ручное тестирование в тестере стратегий.
Причина обращения: