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

 
Комментарии, не относящиеся к этой теме, были перенесены в "Помогите с сеточником".
 

В общем порыскал я в кодобазе, пока не нашёл там больших проектов под  MT5.  Но что меня поразило, разделы советников и индикаторов по сути завалены поделками от одного и того же человека.  Причём он их штампует ежедневно по несколько штук на протяжении уже нескольких лет!  Непонятно, откуда такое рвение, и чего ради...  Возможно ему приплачивает MQ за это, хз...  Конечно там всё на одной заготовке штампуется, но меня бы лично уже одно только создание описаний и скриншотов заколебало )

Там у него советники весят около 150-200 кб, но во-первых, код довольно размазан, плюс много повторяющихся фрагментов.  Ну это по моим меркам.  У меня бы оно заняло в несколько раз меньше по объёму.  Так что объём исходников - лишь условный показатель.  Во-вторых, сам код простой, никаких виртуальных функций, шаблонов, а также динамических объектов и указателей.  Т.е. фактически весь код можно заинлайнить.  Компилируется довольно быстро, в районе 600-700 мс.  Ну в общем надо найти реально объёмный и достаточно сложный пример.  А среди моих разработок я лишь тот проект дорабатывал под новый компилятор, все остальные пользую под старым, а тратить время на их корректировку пока не вижу целесообразности, учитывая нынешнюю ситуацию.

 
Alexey Navoykov:

...

Ну в общем надо найти реально объёмный и достаточно сложный пример.  А среди моих разработок я лишь тот проект дорабатывал под новый компилятор, все остальные пользую под старым, а тратить время на их корректировку пока не вижу целесообразности, учитывая нынешнюю ситуацию.

Последняя версия на текущий момент: Графические интерфейсы IX: Элементы "Индикатор выполнения" и "Линейный график" (Глава 2)

 

О, спасибо.  Сам проект кстати шикарный, и по задумке, и по реализации.  В общем первый тестовый эксперт TestLibrary01 скомпилировался у меня за 6.5 секунд.  Шустро.  Хотя конечно надо ещё будет оценить объём реально используемого кода этим советником.  Да и опять же, слово "шустро" будет выглядеть несколько комично, если сравнить со скоростью компиляции в старом билде.  Там она мгновенная.  Вот если кто хочет сам убедиться, прикладываю компилятор версии 1159.  Только переименуйте файл естественно.

Т.е. фактически вывод можно сделать такой:  длительность компиляции конечно может варьироваться в разы, в зависимости от объёма и сложности кода,  но одно остаётся неизменным - в новом компиляторе она на порядок медленнее, чем в старом.   При этом никакого ощутимого выигрыша в скорости работы программы это не даёт - я проверял.  Если кто хочет доказать обратное - флаг в руки.

Файлы:
 
Alexey Navoykov:

О, спасибо.  Сам проект кстати шикарный, и по задумке, и по реализации.  В общем первый тестовый эксперт TestLibrary01 скомпилировался у меня за 6.5 секунд.  Шустро.  Хотя конечно надо ещё будет оценить объём реально используемого кода этим советником.  Да и опять же, слово "шустро" будет выглядеть несколько комично, если сравнить со скоростью компиляции в старом билде.  Там она мгновенная.  Вот если кто хочет сам убедиться, прикладываю компилятор версии 1159.  Только переименуйте файл естественно.

Т.е. фактически вывод можно сделать такой:  длительность компиляции конечно может варьироваться в разы, в зависимости от объёма и сложности кода.  Но одно остаётся неизменным - в старом компиляторе она на порядок быстрее, чем в новых.   При этом никакого ощутимого выигрыша в скорости работы программы это не даёт - я проверял.  Если кто хочет доказать обратное - флаг в руки.

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

Для примера, один и тот же проект. 

MetaTrader 5:

0 error(s), 0 warning(s), compile time: 11054 msec              1       1

//---

MetaTrader 4:

0 error(s), 0 warning(s), compile time: 434 msec                1       1

//---

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

 
Anatoli Kazharski:

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

Для примера, один и тот же проект. 

MetaTrader 5:

//---

MetaTrader 4:

//---

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

У меня есть такое предположение:  из-за того, что МТ4 32-битный, его не постигла печальная участь быть "тотально оптимизированным".  Ведь насколько мне известно, эта горе-оптимизация компилятора была заявлена как якобы улучшающая работу в 64-битной среде.  Надо кстати проверить 32-битную версию МТ5, может с ней всё нормально.   Но у меня сейчас нет такой возможности.

У кого есть 32-битная версия metaeditor для пятёрки, поделитесь плиз.

 
Anatoli Kazharski:

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

Для примера, один и тот же проект. 

MetaTrader 5:

//---

MetaTrader 4:

//---

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

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

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

 
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 - на ошибку не влияет