Ошибки, баги, вопросы - страница 1628

 
HistoryOrderGetInteger(OrderTicket, ORDER_TIME_DONE_MSC) - возвращает ноль в тестере!
 

Ошибка открытия экспертом файла. А если например

1. убрать "некий код не имеющий отношения к делу" (см.ниже)

2. или убрать ::Sleep(1000)

то ошибки не возникает

//Test.mq5
#import "Test001.ex5"
        string f( string file );
#import
string __Period() { return StringSubstr( EnumToString((ENUM_TIMEFRAMES)Period()), 7 ); }
void OnInit()
{
        Print( Symbol(), ",", __Period(), ", результат=", f( "test.txt" ));
}

Последовательность действий:

1. Создать новый профиль (например "Тест")

2. Открыть два новых графика, прикрепив к обоим графикам эксперт Test.ex5  (см.рисунок)

4. Выбрать любой другой существующий профиль

5. Выбрать профиль "Тест"

результат:

при том, что Test001.mq5 выглядит так:

//Test001.mq5
#property library
//---
//здесь некий код не имеющий отношения к делу
//---
string f( string file ) export
{
        ::ResetLastError();
        int hFile = ::FileOpen( file, FILE_READ | FILE_SHARE_READ | FILE_TXT | FILE_ANSI | FILE_COMMON );
        if ( hFile == INVALID_HANDLE )
                return ::StringFormat( "Error(%d): Не был открыт файл: %s", ::GetLastError(), file );
        ::Sleep( 1000 );
        ::FileClose( hFile );
        return "OK";
}
Файлы:
Test001.ex5  16 kb
 

Сам файл test.txt к сообщению не прикрепляется, но выглядит так

Дополнительные сведения: местоположение открываемого файла в смысле FILE_COMMON - на ошибку не влияет

 
Andrey Barinov:

Это оптимизация кода.

Если в metaeditor.ini в поле [Experts] прописать OPTIMIZE=0 то скорость компиляции будет как в 4-ке. У меня некоторые проекты компилятся по 20 сек, а некоторые входят в бесконечный цикл оптимизации :)

Вау, спасибо, дружище! Где ж ты раньше был! ) А мы тут мучаемся... Самое странное что разработчики об этой опции молчали
 
Alexey Navoykov:
Вау, спасибо, дружище! Где ж ты раньше был! ) А мы тут мучаемся... Самое странное что разработчики об этой опции молчали

Не молчали. На форуме есть топик в 18 страниц, где эта опция как раз описывалась.

Кстати, оптимизация не включается при компиляции под отладку.

 
Andrey Barinov:

Это оптимизация кода.

Если в metaeditor.ini в поле [Experts] прописать OPTIMIZE=0 то скорость компиляции будет как в 4-ке. У меня некоторые проекты компилятся по 20 сек, а некоторые входят в бесконечный цикл оптимизации :)

Точно! При этом я сам когда-то и поставил значение 1 и просто забыл об этом. ))

Alexey Navoykov:
... А мы тут мучаемся... Самое странное что разработчики об этой опции молчали

Тема была и подробно обсуждалась: Тестирование нового компилятора MQL5 для x64 платформ - ускорение расчетов от 2 до 10 раз! >>> 

Это я просто забыл. ) 

У меня даже сначала эта оптимизация не работала. То есть компиляция в некоторых случаях заканчивалась ошибкой. Но потом удалось найти причину. Затем её исправили и я в одном из терминалов установил параметр на 1 и забыл об этом. А вчера сижу и думаю, почему в одном редакторе MT5 компиляция проходит значительно быстрее, чем в другом редакторе MT5. 

 

//---

Теперь, если поставить на 0, то компиляция проходит в ~25 раз быстрее.

0 error(s), 0 warning(s), compile time: 668 msec                1       1
 
Anatoli Kazharski:

Самые сложные из моих проектов в MetaTrader 5 конечно тоже долго компилируются. Доходит даже до 11 секунд. Точно такие же версии, но в MetaTrader 4 бывает до 25 раз быстрее.

В МТ5 компилятор более продвинутый, он оптимизирует код так, что тот работает до 10 раз быстрее чем в МТ5. Об этом мы писали и объясняли раньше.

Компилятор MQL5 вынужден создавать для совместимости две копии кода - для старой 32 битной версии (без полной оптимизации) и максимально оптимизированный вариант для 64 битов. Вся сила MQL5 раскрывается только в 64 битах.

 
Renat Fatkhullin:

В МТ5 компилятор более продвинутый, он оптимизирует код так, что тот работает до 10 раз быстрее чем в МТ5.

Кроме того, компилятор вынужден создавать для совместимости две копии кода - для старой 32 битной версии (без полной оптимизации) и максимально оптимизированный вариант для 64 битов. Вся сила MQL5 раскрывается только в 64 битах.

Спасибо. Я уже освежил память по ветке, где обсуждалось всё это.

На время разработки буду ставить значение 0, так как бывает очень часто нужно проводить компиляцию и ждать по 10 секунд утомительно. А для готового продукта перед финальной компиляцией, буду ставить 1.

 
Renat Fatkhullin:

В МТ5 компилятор более продвинутый, он оптимизирует код так, что тот работает до 10 раз быстрее чем в МТ5. Об этом мы писали и объясняли раньше.

Компилятор MQL5 вынужден создавать для совместимости две копии кода - для старой 32 битной версии (без полной оптимизации) и максимально оптимизированный вариант для 64 битов. Вся сила MQL5 раскрывается только в 64 битах.

если при запущенном MetaEditor изменить параметр OPTIMIZE, то нужно ли его перегрузить для принятия настроек или нет?
 
coderex:
если при запущенном MetaEditor изменить параметр OPTIMIZE, то нужно ли его перегрузить для принятия настроек или нет?
Быстрее попробовать самому. Вот только что протестировал. Перезагружать редактор необязательно.