Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5 - страница 38

 
User_mt5:

Билд 1947

2. И попутно. Посмотрите эксперт:

Sleep() после ExpertRemove() работает не так, как ожидается. Такое впечатление, что не в милли-, а в микро-секундах.

ExpertRemove() выставляет эксперту стоп-флаг.

При выставленном стоп-флаге Sleep не работает. Заходит, проверяет стоп-флаг и тут же выходит.

 
User_mt5:

Билд 1947

1. Как выяснилось, проблема затрагивает и все другие окна (Вид/Символы, Справка и т.д). 


Какая проблема и как затрагивает?

 
ArrayMaximum выдает неверное значение
void OnStart()
{
  int Array[] = {1, 2, 3};
  
  Print(ArrayMaximum(Array, 0, 0)); // 2
}
Должен выдавать в такой ситуации -1. WHOLE_ARRAY не равен нулю.
 
Slava:

ExpertRemove() выставляет эксперту стоп-флаг.

При выставленном стоп-флаге Sleep не работает. Заходит, проверяет стоп-флаг и тут же выходит.

Принято, спасибо.
 
Slava:

Какая проблема и как затрагивает?

Затрагивает, в смысле у всех (может и не всех, но наверное, у всех) окон есть ID.

Я наткнулся на это при переборе ID чартов. При незатейливом программировании эксперт пытается удалить несанкционированные окна.

Выглядит затрагивание прибл. так: трейдер работает себе с экспертом и тут ему  захотелось посмотреть окно Справка. Он тычет мышкой в меню, окно открывается и тут же эксперт его закрывает :)

Насколько я знаю, этот момент (ID) не описан в документации. Как-то надо отличать чарты от всех остальных окон. Мне бы хватило одного дополнительного признака окна, например, пустого символа. 

Если Вы хотя бы здесь скажете, какой именно признак использовать, я буду счастлив. Спасибо.

 
fxsaber:
ArrayMaximum выдает неверное значениеДолжен выдавать в такой ситуации -1. WHOLE_ARRAY не равен нулю.

А компилятор не должен ли написать об ошибочном запросе в функцию? Так было бы удобнее - запрашиваем нулевой размер, и получаем в ответ от компилытора, что как бы не корректно сиё действо.

 

По какой причине в профилировании этого кода возникает столь медленный ArrayFree?

input int inPeriod = 20;

double GetHigh( const int iPeriod )
{  
  double Highs[]; // Добавив static ускорюсь заметно?

  CopyHigh(_Symbol, PERIOD_CURRENT, 0, iPeriod, Highs);
  
  return(Highs[ArrayMaximum(Highs)]);
}

void OnTick()
{
  GetHigh(inPeriod);
}
 
Странная ситуация с профилировщиком. Он показывает, что Func1 быстрее Func2 в два раза. А во время Оптимизации получается ровно наоборот.
 
User_mt5:

Затрагивает, в смысле у всех (может и не всех, но наверное, у всех) окон есть ID.

Я наткнулся на это при переборе ID чартов. При незатейливом программировании эксперт пытается удалить несанкционированные окна.

Выглядит затрагивание прибл. так: трейдер работает себе с экспертом и тут ему  захотелось посмотреть окно Справка. Он тычет мышкой в меню, окно открывается и тут же эксперт его закрывает :)

Насколько я знаю, этот момент (ID) не описан в документации. Как-то надо отличать чарты от всех остальных окон. Мне бы хватило одного дополнительного признака окна, например, пустого символа. 

Если Вы хотя бы здесь скажете, какой именно признак использовать, я буду счастлив. Спасибо.

Пример кода и шаги по воспроизведению можете показать?

 
Slava:

Пример кода и шаги по воспроизведению можете показать?

К сожалению, код я уже переписал.

Восстановить попробую, но не обещаю. Завтра.