Наличие MQL5 библиотек в исходном коде, что позволяет нативно инлайнить их код прямо в место вызова и максимально использовать const окружение вызываемого места.
Будут ли многие стандартные фукции так же вынесены в библиотеки для инлайнинга?
Под вайном, да еще 32 бита. Для 32 битов МТ5 используется старый компилятор, аналогичный MT4. Он в пару десятков раз медленнее 64 битного кода, который создает новый компилер специально для 64 битной версии МТ5. Отчет по сравнению скорости 32 и 64 битных MQL5 программ мы публиковали.
Каждая MQL5 программа на самом деле содержит две копии скомпилированного кода: 32 битная для старых систем ради совместимости и 64 битная для новых.
Мы полностью отказались от развития 32 битных компиляторов, так как это не имеет никакого смысла и будущего.
Поэтому надо использовать только 64 битные версии MetaTrader 5, если хотите получить максимум производительности.
Кстати, информация для тех, кто сидит на MT4 - там тоже скорость исполнения MQL4 кода в пару десятков раз медленнее, чем в 64 битном Метатрейдер 5.
Неожиданно... Для меня действительно серьезная причина наконец пересмотреть привычки и перейти на МТ5. Раньше как то не видел большого смысла...
Будут ли многие стандартные фукции так же вынесены в библиотеки для инлайнинга?
Именно.
В ближайшие пару билдов к этому придем. Будем на лету во время компиляции дополнять программы исходниками функций, что даст возможность оптимизатору сработать в полную силу.
Для нас критически важно минимизировать количество обращений к ядру платформы.
Реter Konow: Неожиданно... Для меня действительно серьезная причина наконец пересмотреть привычки и перейти на МТ5. Раньше как то не видел большого смысла...
Если вы глубоко покопаете латенси внутренних процессов МТ4 и МТ5, включая трейдинг, то вобще сбежите с МТ4. Там пропасть в качестве и зализанности процессов.
Мы не зря так фанатично занимаемся производительностью и оптимизацией МТ5. Это огромное технологическое преимущество.
В R бралось минимальное время за множество запусков, а не первый запуск и максимальное время.
Так что нет, "холодный старт" тут не объясняет. Да еще в условиях, когда весь код библиотек в DLL. Разогревать практически нечего.
А вот что объясняет:
Отсутствие оверхеда на динамических объектах как в R за счет работы с чисто типизированными данными double
Жутко эффективный компилятор в MQL5. Реально страшно смотреть на результирующий asm код.
Наличие MQL5 библиотек в исходном коде, что позволяет нативно инлайнить их код прямо в место вызова и максимально использовать const окружение вызываемого места.
Вот где компилятору раздолье по сравнению с фактически неоптимизированными реализациями в DLL, которые не имеют шанса узнать окружение и подстроиться под него.
А что вообще тут измеряют ? напоминает холивары С++ vs Lisp - прямо один-в-один, благо что один из "сравнентов" почти ++ а второй обросшая Schema :-) Это просто принципиально разные вещи...
Если вы глубоко покопаете латенси внутренних процессов МТ4 и МТ5, включая трейдинг, то вобще сбежите с МТ4. Там пропасть в качестве и зализанности процессов.
Мы не зря так фанатично занимаемся производительностью и оптимизацией МТ5. Это огромное технологическое преимущество.
Теперь буду знать. Конечно перенос всего кода будет нелегким делом даже при достаточной совместимости языков, но полагаю результат будет стоить того. Я всегда ориентирован на большую эффективность и вопрос разницы производительности и скорости всегда очень интересовал. Если бы знал об этой разнице ранее, давно забыл бы о менее быстрой платформе. Спасибо за информацию.
Maxim Kuznetsov: А что вообще тут измеряют ? напоминает холивары С++ vs Lisp - прямо один-в-один, благо что один "сравнентов" почти ++ а второй обросшая Schema :-) Это просто принципиально разные вещи...
Это просто чистое доказательство на практике и в теории ошибочности позиции, которую высказывали некоторые трейдеры в теме https://www.mql5.com/ru/forum/96176/page10 (где-то было упоминание):
в R все библиотеки оптимизированы и максимально быстры
в R много оптимизаций, включая Intel Threading Building Blocks и тд
Оказалось, что это не так. В самой простой функции получился слив и MQL5 эффективнее. Причем, почему быстрее, я обосновал еще и теоретически. В дополнение к практическим результатам.
Если вы глубоко покопаете латенси внутренних процессов МТ4 и МТ5, включая трейдинг, то вобще сбежите с МТ4. Там пропасть в качестве и зализанности процессов.
MT5-OrderSend НЕ полностью синхронизирован - с торговым окружением синхронизации нет. Это значит, что показания истории не соответствуют реальному положению вещей.
Ни о каком timeout и речи быть не может. Надежного решения проблемы нет, т.к. вопросами синхронизации приходится заниматься на уровне терминала, а не сервера.
Фактически, MT5-пользователи столкнулись с тем, с чем сталкивались разработчики бриджей на MT4.
Если отправляется OrderSend, то надо ЗАПОМНИТЬ (вот здесь потенциальная уязвимость), что это сделано. Далее не обращать внимание на текущую историю (торговое окружение), пока не придет соответствующее сообщение в OnTrade. Как только оно прийдет, ЗАПОМНЕННОЕ нужно ЗАБЫТЬ.
Когда нет ЗАПОМНЕННЫХ данных, можно доверять истории, как в MT4.
MT4-OrderSend ПОЛНОСТЬЮ синхронизирован.
Да и с остальным, гораздо более простым, как оказалось, проблемы
Вы путаете асинхронность процессов с желанием увидеть синхронность.
Задача OrderSend максимально быстро выставить заявку и получить подтверждение. И с этим система отлично справляется.
А вот получить заполненную транзакцию/сделку, положить ее в историю и потом выдать вам под запрос - это другой процесс и он не имеет права тормозить работу OrderSend.
Поэтому все верно - транзакцию исполнили быстро, а потом через миллисекунду (а на самом деле раньше) в соседнем пакете получаете обновление тикета и работаете с ним.
Да и с остальным, гораздо более простым, как оказалось, проблемы
Написание компилятора, а в особенности реализация злобных С++ шаблонов - это простые вещи???
В любом случае, большое спасибо за терпение A100 - он очень помог в отлове багов.
Но это оффтоп, если хотите обсуждать указанные вопросы, делайте это в родных ветках. Тут про R.
Будут ли многие стандартные фукции так же вынесены в библиотеки для инлайнинга?
Это не серьезно.
Под вайном, да еще 32 бита. Для 32 битов МТ5 используется старый компилятор, аналогичный MT4. Он в пару десятков раз медленнее 64 битного кода, который создает новый компилер специально для 64 битной версии МТ5. Отчет по сравнению скорости 32 и 64 битных MQL5 программ мы публиковали.
Каждая MQL5 программа на самом деле содержит две копии скомпилированного кода: 32 битная для старых систем ради совместимости и 64 битная для новых.
Мы полностью отказались от развития 32 битных компиляторов, так как это не имеет никакого смысла и будущего.
Поэтому надо использовать только 64 битные версии MetaTrader 5, если хотите получить максимум производительности.
Кстати, информация для тех, кто сидит на MT4 - там тоже скорость исполнения MQL4 кода в пару десятков раз медленнее, чем в 64 битном Метатрейдер 5.
Будут ли многие стандартные фукции так же вынесены в библиотеки для инлайнинга?
Именно.
В ближайшие пару билдов к этому придем. Будем на лету во время компиляции дополнять программы исходниками функций, что даст возможность оптимизатору сработать в полную силу.
Для нас критически важно минимизировать количество обращений к ядру платформы.
Неожиданно... Для меня действительно серьезная причина наконец пересмотреть привычки и перейти на МТ5. Раньше как то не видел большого смысла...
Если вы глубоко покопаете латенси внутренних процессов МТ4 и МТ5, включая трейдинг, то вобще сбежите с МТ4. Там пропасть в качестве и зализанности процессов.
Мы не зря так фанатично занимаемся производительностью и оптимизацией МТ5. Это огромное технологическое преимущество.
В R бралось минимальное время за множество запусков, а не первый запуск и максимальное время.
Так что нет, "холодный старт" тут не объясняет. Да еще в условиях, когда весь код библиотек в DLL. Разогревать практически нечего.
А вот что объясняет:
Вот где компилятору раздолье по сравнению с фактически неоптимизированными реализациями в DLL, которые не имеют шанса узнать окружение и подстроиться под него.
Если вы глубоко покопаете латенси внутренних процессов МТ4 и МТ5, включая трейдинг, то вобще сбежите с МТ4. Там пропасть в качестве и зализанности процессов.
Мы не зря так фанатично занимаемся производительностью и оптимизацией МТ5. Это огромное технологическое преимущество.
А что вообще тут измеряют ? напоминает холивары С++ vs Lisp - прямо один-в-один, благо что один "сравнентов" почти ++ а второй обросшая Schema :-) Это просто принципиально разные вещи...
Это просто чистое доказательство на практике и в теории ошибочности позиции, которую высказывали некоторые трейдеры в теме https://www.mql5.com/ru/forum/96176/page10 (где-то было упоминание):
Оказалось, что это не так. В самой простой функции получился слив и MQL5 эффективнее. Причем, почему быстрее, я обосновал еще и теоретически. В дополнение к практическим результатам.
Если вы глубоко покопаете латенси внутренних процессов МТ4 и МТ5, включая трейдинг, то вобще сбежите с МТ4. Там пропасть в качестве и зализанности процессов.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2016.10.09 09:39
MT5-OrderSend НЕ полностью синхронизирован - с торговым окружением синхронизации нет. Это значит, что показания истории не соответствуют реальному положению вещей.
Ни о каком timeout и речи быть не может. Надежного решения проблемы нет, т.к. вопросами синхронизации приходится заниматься на уровне терминала, а не сервера.
Фактически, MT5-пользователи столкнулись с тем, с чем сталкивались разработчики бриджей на MT4.
Если отправляется OrderSend, то надо ЗАПОМНИТЬ (вот здесь потенциальная уязвимость), что это сделано. Далее не обращать внимание на текущую историю (торговое окружение), пока не придет соответствующее сообщение в OnTrade. Как только оно прийдет, ЗАПОМНЕННОЕ нужно ЗАБЫТЬ.
Когда нет ЗАПОМНЕННЫХ данных, можно доверять истории, как в MT4.
MT4-OrderSend ПОЛНОСТЬЮ синхронизирован.Да и с остальным, гораздо более простым, как оказалось, проблемы
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
A100, 2016.10.09 23:09
Не могу по причине на которую вы сами указывали https://www.mql5.com/ru/forum/1111/page1743#comment_2877482.
Про трейдинг как-то забывается
Вы путаете асинхронность процессов с желанием увидеть синхронность.
Задача OrderSend максимально быстро выставить заявку и получить подтверждение. И с этим система отлично справляется.
А вот получить заполненную транзакцию/сделку, положить ее в историю и потом выдать вам под запрос - это другой процесс и он не имеет права тормозить работу OrderSend.
Поэтому все верно - транзакцию исполнили быстро, а потом через миллисекунду (а на самом деле раньше) в соседнем пакете получаете обновление тикета и работаете с ним.
Да и с остальным, гораздо более простым, как оказалось, проблемы
Написание компилятора, а в особенности реализация злобных С++ шаблонов - это простые вещи???
В любом случае, большое спасибо за терпение A100 - он очень помог в отлове багов.
Но это оффтоп, если хотите обсуждать указанные вопросы, делайте это в родных ветках. Тут про R.