Выпущен MetaTrader 4 Client Terminal build 600 с обновленным языком MQL4 и Маркетом приложений - страница 66

 
Henry_White:

MT4 билд 604

Использую:

#import "kernel32.dll"
int GetLastError(void);
...
#import

Вызовы типа kernel32::GetLastError() проходят успешно, а вот на обычные вызовы встроенной функции приводят к ошибке:

'GetLastError' - ambiguous call to overloaded function with the same parameters
Кто-нибудь сталкивался с этим?

Неоднозначный вызов перегруженной функции с теми же параметрами
Сигнатуру другую укажите. Авось, поможет :-)
 

Господа! Вопрос о возникших лагах с историей и бедой с оффлайн тестированием задавался на этой ветке разными людьми не менее четырёх раз.

Ответа нет, поэтому вынужден задать его в пятый раз.

РАЗРАБОТЧИКИ УСЛЫШЬТЕ ЖЕ, НАКОНЕЦ !!!!!

Новая версия билда не подгружает историю по меньшей мере с Вашего крупнейшего клиента в РФ брокера альпари, при этом

СО СТАРОЙ ИСТОРИЕЙ ТЕРМИНАЛ РАБОТАЕТ С ОШИБКАМИ !!!!!!

Лично у меня история сохранилась случайно на втором "счётном" компьютере! Поэтому я её перекидываю в папку history и сколько-то тестов проходит нормально, но затем терминал начинает эту историю "портить".

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

При этом терминал время от времени требует обновления, после которого (через некоторое время) опять начинаются ошибки с рассогласованием!

Что интересно! Я тестирую на 2008-2013 гг. Истории котировок за 2008-2013 гг. на серваках альпари больше нет (или она не грузится, тк они просто не прописали адрес, или она не переведена в новые форматы - хз).

Там есть история за 2014 год. А я на 2014 г. ничего не тестирую!!!! Как это вообще может происходить?!

Если повторить фокус с очисткой папки history и записью туда старой истории, всё опять начинает ( на некоторое время) работать более или менее нормально.

Всё-таки прошу разработчиков дать алгоритм работы оффлайн в новом билде! Вы же сами написали, что ФОРМАТ КОТИРОВОК НОВЫЙ! Тогда почему вообще читается старый формат?! Означает ли это, что всю историю на серверах нужно теперь приводить в новый формат?

Кто и когда это будет делать? Можно ли решить эту проблему самостоятельно?

PS

Господа, я понимаю, что за эти крики души капслоком, я рискую получит бан, но что мне ещё остаётся делать?!

В Альпари плохо понимают, зачем нужна история. На письма и звонки отвечают на уровне "Ой, што правда сервера лежат?! Ой... гляди ка и правда! "

Надежда только на Вас! Наверняка же проблема решается как-то просто: что-то где-то прописать, снести какой-либо файлик (чтобы отбить желание обновляться) и заниматься оффлайном на каком-либо другом сервере (например не альпари, а Вашем или каком-ещё!)

Ну... должно же быть решение!

PPS

Прилагаю два результата тестирования советника (он ещё в работе) который на одной и той же исторической базе даёт разные результаты и те самые ошибки рассогласования! Сначала ошибок нет, а потом их ни много ни мало 16 345 839 (16 млн. да да!)

 
Zhunko:
Неоднозначный вызов перегруженной функции с теми же параметрами
Сигнатуру другую укажите. Авось, поможет :-)



Спасибо за отзыв. Но мне не понятен ответ. Что значит сигнатура? Или Вы имеете ввиду имя_контекста?

Попробовал поставить перед базовой функцией операцию разрешения контекста ( :: ) без указания базового класса. Вроде прокатило, но нет уверенности что код правильно скомпилируется...

 
Henry_White:


Спасибо за отзыв. Но мне не понятен ответ. Что значит сигнатура? Или Вы имеете ввиду имя_контекста?

Попробовал поставить перед базовой функцией операцию разрешения контекста ( :: ) без указания базового класса. Вроде прокатило, но нет уверенности что код правильно скомпилируется...

:-)) У функции GetLastError() нет параметров. Не получится перегрузить.

Зачем это надо?

Есть такая функция - RtlGetLastWin32Error().

 

Не компилируется эксперт! Раньше в старых билдах всё прекрасно работало!!!!!!!!

Теперь что за свои деньги всё переделывать? Я не программист!!!!!!!!!!

Зачем такое нужно было делать???????

Также не компилируются ещё 3-4 моих рабочих индикаторов!!!!!!!

Файлы:
4indis_plus.mq4  16 kb
 
alex1978:

Не компилируется эксперт! Раньше в старых билдах всё прекрасно работало!!!!!!!!

Теперь что за свои деньги всё переделывать? Я не программист!!!!!!!!!!

Зачем такое нужно было делать???????

Также не компилируются ещё 3-4 моих рабочих индикаторов!!!!!!!

Этот код и в 509-ом не должен компилироваться по причине наличия переменных из декомпилированного кода:

string gs_unused_216 = "Closure of ATR";
int gi_224 = 0;
int gi_228 = 6;
string gs_unused_232 = "Closure of МА";
int gi_240 = 0;
int gi_244 = 0;
все вопросы к разработчику.
 
И тем не менее, именно в 509 билде он работает!!!!!!!!!
 
http://s020.radikal.ru/i722/1402/f5/fb9b8a11f0bb.jpg
 
Zhunko:

:-)) У функции GetLastError() нет параметров. Не получится перегрузить.

Зачем это надо?

Есть такая функция - RtlGetLastWin32Error().

Ну вообще-то это не совсем так. Можно обойтись и без перегрузки, если явно указывать контекст (https://www.mql5.com/ru/docs/basis/operations/other предпоследний параграф). Вопрос в том, что в MQL5 это работает, а в MQL4-6xx - нет. Тут либо разработчики ошиблись при реализации "приближения" к MQL5, либо MQL4-6xx не настолько "приближен".

Про функцию RtlGetLastWin32Error я слышал, но смутил тот факт, что в текущем хелпе по MSDN о ней ни слова.

 
Henry_White:

Ну вообще-то это не совсем так. Можно обойтись и без перегрузки, если явно указывать контекст (https://www.mql5.com/ru/docs/basis/operations/other предпоследний параграф). Вопрос в том, что в MQL5 это работает, а в MQL4-6xx - нет. Тут либо разработчики ошиблись при реализации "приближения" к MQL5, либо MQL4-6xx не настолько "приближен".

Про функцию RtlGetLastWin32Error я слышал, но смутил тот факт, что в текущем хелпе по MSDN о ней ни слова.

:-) Особенно эта запись порадовала:

::Print("kernel32 GetLastError", kernel32::GetLastError());

До такого не додумаешься без справки :-)

Наверно в MQL4 нельзя или ещё не сделали.

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