Новая версия платформы MetaTrader 5 build 2170: Области видимости в MQL5, глобальное обновление тестера стратегий и встроенного хостинга - страница 4

 
Ivan Titov:

Вот тут и надо ругаться компилятору, т.к. сигнатура совпадает. Повторяю 4 раз - сигнатура разная.

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

 
Баг

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Вопрос знатокам ООП.

Igor Makanu, 2019.10.06 14:23

в МТ4 работает до сих пор, а в МТ5 уже не работает

typedef void(*TFuncvoidPTR)(void);
//+------------------------------------------------------------------+
void OnStart()
{  TFuncvoidPTR arrPTR[3];
   arrPTR[0]=f1;
   arrPTR[1]=f2;
   arrPTR[2]=f3;
   for(int i=0; i<3; i++)
      arrPTR[i]();			// ' ) ' - expression expected

}
//_______________________________________________________________________
void f1() { Print("1"); }
void f2() { Print("2"); }
void f3() { Print("3"); }
//+------------------------------------------------------------------+

2019.10.06 16:22:44.202 tst EURUSD,H1: 3

2019.10.06 16:22:44.202 tst EURUSD,H1: 2

2019.10.06 16:22:44.202 tst EURUSD,H1: 1

будет работать, если так сделать
      TFuncvoidPTR q = arrPTR[i];
      q();
 

"input group" работает оригинально, в тестере отделяет, а в самом советнике при добавлении на валютную пару  нет

Пример в тестере так 

а при добавлении советника на график так


еще мне непонятно зачем обрезать по длине строки в настройках ....

интеграция с питоном работает только в 32 битном клиенте и на типовом примере дает ошибку

[2, 'RoboForex-MetaTrader 5', '***********']

[500, 2170, '4 Oct 2019']

Traceback (most recent call last):

  File "D:\temp\Pyton\mt.py", line 18, in <module>

    euraud_ticks = MT5CopyTicksFrom("EURAUD", datetime(2019,4,1,0), 1000, MT5_COPY_TICKS_ALL)

RuntimeError: IPC call failed

 
fxsaber:

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

Нет, пока получается, что кто-то выложил компилятор, который сломал то, что раньше работало.

 
Ivan Titov:

Нет, пока получается, что кто-то выложил компилятор, который сломал то, что раньше работало.

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

Это ненормально, что библиотеки могут переставать работать из-за безобидных действий пользователя. В MT4 сейчас именно так.
 
fxsaber:

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

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

Жаль, что так и не удалось послушать начальника транспортного цеха узнать, какое все это имеет отношение к случаю, когда сигнатуры (в частности параметры функции) отличаются.

 

Кратко:

  1. MQL5 компилятор постоянно развивался и развивается

    Его задача делать код защищеннее и глубже анализировать проблемные места. Поэтому с каждой версией все больше "грязного" кода ловится и не пропускается.

    Вспомните последние годы - постоянно были жалобы "мой код перестал компилироваться, почему предупреждения вылезают". В итоге код роботов становился только лучше.

  2. Делать одинаковые сигнатуры и потом доказывать что это нормально - это глубоко ошибочная тактика и даже смысла нет обсуждать такие заблуждения

  3. В релизе 2170 мы открыли полноценные namespaces

    Это дало нам возможность закрутить гайки и включить более жесткий контроль сигнатур и перекрытий имен.

  4. Авторам библиотек два пути - правильный полноценный нейминг функций и/или защита через классы

    Кто использует generic naming - это просто сам себе вредит. И никакие идеи "пусть компиляторы мусор разгребают сказочным образом" не работают. Компиляторы (в первую очередь C++) с каждой версией все больше работают церберами, чтобы показать и не допустить максимум мусорных и откровенно ошибочных конструкций.

  5. Этот релиз был последний, у кого вышла 32 битная версия

    Мы еще следующие 6 месяцев будем распространять 32 битную сборку 2170 билда в инсталляторах, а потом прекратим.

  6. Со следующей недели мы начнем удалять поддержку 32 битного кода из компилятора и терминала MetaTrader 5

    Это даст нам возможность реализовать точный x64 профайлер с минимальными искажениями, а также нативный x64 отладчик.
 
Ivan Titov:

Какой билд у metaeditor64.exe? Заменил на 2085 от старой версии - тоже стал компилить.

Попробуйте еще добавить такой код и скомпилить:

Если добавить дополнение кода - то да не компилится.

 

Renat Fatkhullin

Делать одинаковые сигнатуры и потом доказывать что это нормально - это глубоко ошибочная тактика и даже смысла нет обсуждать такие заблуждения 

Никто не спорит. Только если сигнатуры разные, то и явно указывать нет необходимости.

Renat Fatkhullin:

 И никакие идеи "пусть компиляторы мусор разгребают сказочным образом" не работают. 

Работают. В  C# например требуется явное указание namespace только если сигнатуры совпадают.

 

Обновился рабочий терминал - потребление памяти перевалило за 4 гигабайта!

Ранее потребление было в разы меньше.

Причина обращения: