Тестирование нового компилятора MQL5 для x64 платформ - ускорение расчетов от 2 до 10 раз! - страница 2

 
Yury Kulikov:
Например, межтерминальные коммуникации.

Ну, если так извращаться, то конечно, ДЛЛ - нужная фича...

Но лично я вот как раз для такой задачи решил, что мне для этого ДЛЛ не больно-то нужен.  Как раз сейчас обдумываю советника, который будет брать котировки в одном ДЦ - а отправлять сигналы на торговлю мало того, что другому ДЦ, так еще и на котором МетаТрейдера нет. (ДукаКопи, между прочим, интересно, договорятся МетаКвоты с этим почтенным брокером ?).

Думал в сторону ДЛЛ. Но решил, что общие файлы - куда безопаснее и разумнее. Пусть МетаТрейдер пишет в файл сигналы. А другой МетаТрейдер (или JForex, или кто-то еще) - пусть их читает и исполняет.

 

Кстати, думал тут над ссылками на массивы...

Ренат, вношу предложение:

Раз уж у нас есть Стандартная Библиотека, не следует ли добавить вариант функции OnCalculate() со следующим прототипом:

int OnCalculate (const int rates_total,      // размер входных таймсерий
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const СiTime* ptTime,     // Time
                 const CiOpen* poOpen,       // Open
                 const CiHigh* phHigh,       // High
                 const CiLow* plLow,        // Low
                 const CiClose* pcClose,      // Close
                 const CiTickVolume* ptvTickVolume,  // Tick Volume
                 const CiRealVolume* prvRealVolume,       // Real Volume
                 const CiSpread* psSpread         // Spread
   );

?

На мой взгляд, это потребует очень небольших изменений в МетаТрейдере, но зато - функция сразу предоставляет просто указатели на массивы, которые можно передавать в классы-обработчики без копирования. Да и популяризуется идея самой Стандартой Библиотеки.

 

Получил первые результаты сравнения производительности старого и нового компилятора на примере реального большого проекта (~ 20 000 строк исходного кода).

 Результаты времени работы программы, скомпилированной в старой версии компилятора (4 запуска):

2015.05.02 13:48:46.641 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.443 sec. 116MB RAM used.
2015.05.02 13:48:27.879 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.427 sec. 116MB RAM used.
2015.05.02 13:48:12.067 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.287 sec. 116MB RAM used.
2015.05.02 13:47:49.719 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 8.751 sec. 116MB RAM used.

 Результаты  времени работы программы, скомпилированной в новой версии компилятора (4 запуска):

2015.05.02 13:54:18.638 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.475 sec. 116MB RAM used.
2015.05.02 13:54:01.995 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.616 sec. 116MB RAM used.
2015.05.02 13:53:43.853 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.444 sec. 116MB RAM used.
2015.05.02 13:53:25.809 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.147 sec. 116MB RAM used.

*Второй и последующие запуски программы осуществлялись на прогретом кэше - как видно прогретый кэш увеличивает производительность на 15-30%.

Как видно результаты работы в номом компиляторе лучше: разбор более 20000 сделок и ордеров занял в первом случае ~6.4 секунды, во втором ~5.4 секунды, т.е. улучшение производительности на 15-20%

Улучшение производительности могло бы быть и больше,  однако большую часть времени занимают вызовы системных функций.

 

 

Новый компилятор не выявил ошибок в проекте общим объемом более 20 000 строк исходного кода. Это замечательный результат, учитывая что данный проект создавался под старую версию компилятора.

Однако новый компилятор выдал несколько warning-сообщений связанных с некорректным отображением файловых путей (требование экранирования слэша):

 

 

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

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

 
Sergey Eremin:
...
Получаю "code generation error        1    1"

...

Также получаю такую ошибку. 
 
Основной выигрыш на математике и собственных расчетах.

Если основной обьем тяжелой работы в системных вызовах, то ускорение будет малым.
 
Renat Fatkhullin:
Основной выигрыш на математике и собственных расчетах.

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

Все равно хорошо, ибо можно создать собственное окружение с минимальным вызовом системных функций.

(копируем окружение один раз в свои классы и работаем с ним напрямую) 

 
George Merts:

Ну, если так извращаться, то конечно, ДЛЛ - нужная фича...

Но лично я вот как раз для такой задачи решил, что мне для этого ДЛЛ не больно-то нужен.  Как раз сейчас обдумываю советника, который будет брать котировки в одном ДЦ - а отправлять сигналы на торговлю мало того, что другому ДЦ, так еще и на котором МетаТрейдера нет. (ДукаКопи, между прочим, интересно, договорятся МетаКвоты с этим почтенным брокером ?).

Думал в сторону ДЛЛ. Но решил, что общие файлы - куда безопаснее и разумнее. Пусть МетаТрейдер пишет в файл сигналы. А другой МетаТрейдер (или JForex, или кто-то еще) - пусть их читает и исполняет.

есть вариант с именованными каналами, но тут нужен промежуточный сервер,

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

 
Yury Kulikov:
Например, межтерминальные коммуникации.

Alexandr Bryzgalov:

есть вариант с именованными каналами, но тут нужен промежуточный сервер,

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

Не нужно никаких именованных каналов! Ждем добавление поддержки SQL. Обмен данными через таблицу. SQL - это встроенная поддержка многопоточных высоконагрузочных систем.
 
Vasiliy Sokolov:

Не нужно никаких именованных каналов! Ждем добавление поддержки SQL. Обмен данными через таблицу. SQL - это встроенная поддержка многопоточных высоконагрузочных систем.
говорил о том что есть, будет sql можно будет говорить и о нём )
Причина обращения: