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

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:

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

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

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

Artyom Trishkin:

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

Это мнимая защита, потому что в общем случае count - переменная и её значение не известно в момент компиляции

Там и в некоторых других(!) функциях использование по умолчанию WHOLE_ARRAY сомнительно

логичнее

int  ArrayMaximum( const void& array[], int start=0, int count=0 )
{
    if ( count < 0 )
        return -1;
//...
}

потому что проверка проще, а сейчас результат:

        Print(ArrayMaximum(Array, 0, -5 ));

аномальный, как будто минуса и нет вовсе

Опять же.... эта не одна функция, а их несколько там таких