Тестирование нового компилятора MQL5 для x64 платформ - ускорение расчетов от 2 до 10 раз! - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Например, межтерминальные коммуникации.
Ну, если так извращаться, то конечно, ДЛЛ - нужная фича...
Но лично я вот как раз для такой задачи решил, что мне для этого ДЛЛ не больно-то нужен. Как раз сейчас обдумываю советника, который будет брать котировки в одном ДЦ - а отправлять сигналы на торговлю мало того, что другому ДЦ, так еще и на котором МетаТрейдера нет. (ДукаКопи, между прочим, интересно, договорятся МетаКвоты с этим почтенным брокером ?).
Думал в сторону ДЛЛ. Но решил, что общие файлы - куда безопаснее и разумнее. Пусть МетаТрейдер пишет в файл сигналы. А другой МетаТрейдер (или 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 запуска):
Результаты времени работы программы, скомпилированной в новой версии компилятора (4 запуска):
*Второй и последующие запуски программы осуществлялись на прогретом кэше - как видно прогретый кэш увеличивает производительность на 15-30%.
Как видно результаты работы в номом компиляторе лучше: разбор более 20000 сделок и ордеров занял в первом случае ~6.4 секунды, во втором ~5.4 секунды, т.е. улучшение производительности на 15-20%.
Улучшение производительности могло бы быть и больше, однако большую часть времени занимают вызовы системных функций.
Новый компилятор не выявил ошибок в проекте общим объемом более 20 000 строк исходного кода. Это замечательный результат, учитывая что данный проект создавался под старую версию компилятора.
Однако новый компилятор выдал несколько warning-сообщений связанных с некорректным отображением файловых путей (требование экранирования слэша):
Это вполне справедливое требование, которое можно легко выполнить сделав несколько незначительных изменений.
Таким образом, можно сделать вывод, что даже большие проекты на MQL5 готовы к новому компилятору и переход на него не составит труда профессиональным разработчикам.
...
Получаю "code generation error 1 1"
...
Основной выигрыш на математике и собственных расчетах.
Все равно хорошо, ибо можно создать собственное окружение с минимальным вызовом системных функций.
(копируем окружение один раз в свои классы и работаем с ним напрямую)
Ну, если так извращаться, то конечно, ДЛЛ - нужная фича...
Но лично я вот как раз для такой задачи решил, что мне для этого ДЛЛ не больно-то нужен. Как раз сейчас обдумываю советника, который будет брать котировки в одном ДЦ - а отправлять сигналы на торговлю мало того, что другому ДЦ, так еще и на котором МетаТрейдера нет. (ДукаКопи, между прочим, интересно, договорятся МетаКвоты с этим почтенным брокером ?).
Думал в сторону ДЛЛ. Но решил, что общие файлы - куда безопаснее и разумнее. Пусть МетаТрейдер пишет в файл сигналы. А другой МетаТрейдер (или JForex, или кто-то еще) - пусть их читает и исполняет.
есть вариант с именованными каналами, но тут нужен промежуточный сервер,
как сделать, есть примеры на форуме. можно сказать даже рабочий вариант.
Например, межтерминальные коммуникации.
есть вариант с именованными каналами, но тут нужен промежуточный сервер,
как сделать, есть примеры на форуме. можно сказать даже рабочий вариант.
Не нужно никаких именованных каналов! Ждем добавление поддержки SQL. Обмен данными через таблицу. SQL - это встроенная поддержка многопоточных высоконагрузочных систем.