Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее" - страница 5

 
Renat Fatkhullin:
  1. Наличие MQL5 библиотек в исходном коде, что позволяет нативно инлайнить их код прямо в место вызова и максимально использовать const окружение вызываемого места.

Будут ли многие стандартные фукции так же вынесены в библиотеки для инлайнинга?

 
Renat Fatkhullin:

Это не серьезно.

Под вайном, да еще 32 бита. Для 32 битов МТ5 используется старый компилятор, аналогичный MT4. Он в пару десятков раз медленнее 64 битного кода, который создает новый компилер специально для 64 битной версии МТ5. Отчет по сравнению скорости 32 и 64 битных MQL5 программ мы публиковали.

Каждая MQL5 программа на самом деле содержит две копии скомпилированного кода: 32 битная для старых систем ради совместимости и 64 битная для новых.

Мы полностью отказались от развития 32 битных компиляторов, так как это не имеет никакого смысла и будущего.

Поэтому надо использовать только 64 битные версии MetaTrader 5, если хотите получить максимум производительности.


Кстати, информация для тех, кто сидит на MT4 - там тоже скорость исполнения MQL4 кода в пару десятков раз медленнее, чем в 64 битном Метатрейдер 5.

Неожиданно...  Для меня действительно серьезная причина наконец пересмотреть привычки и перейти на МТ5. Раньше как то не видел большого смысла...
 
fxsaber:

Будут ли многие стандартные фукции так же вынесены в библиотеки для инлайнинга?

Именно.

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

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

 
Реter Konow:
Неожиданно...  Для меня действительно серьезная причина наконец пересмотреть привычки и перейти на МТ5. Раньше как то не видел большого смысла...

Если вы глубоко покопаете латенси внутренних процессов МТ4 и МТ5, включая трейдинг, то вобще сбежите с МТ4. Там пропасть в качестве и зализанности процессов.

Мы не зря так фанатично занимаемся производительностью и оптимизацией МТ5. Это огромное технологическое преимущество.

 
Renat Fatkhullin:

В R бралось минимальное время за множество запусков, а не первый запуск и максимальное время.

Так что нет, "холодный старт" тут не объясняет. Да еще в условиях, когда весь код библиотек в DLL. Разогревать практически нечего.

А вот что объясняет:

  1. Отсутствие оверхеда на динамических объектах как в R за счет работы с чисто типизированными данными double
  2. Жутко эффективный компилятор в MQL5. Реально страшно смотреть на результирующий asm код.
  3. Наличие MQL5 библиотек в исходном коде, что позволяет нативно инлайнить их код прямо в место вызова и максимально использовать const окружение вызываемого места.

    Вот где компилятору раздолье по сравнению с фактически неоптимизированными реализациями в DLL, которые не имеют шанса узнать окружение и подстроиться под него.

А что вообще тут измеряют ? напоминает холивары С++ vs Lisp - прямо один-в-один, благо что один из "сравнентов" почти ++ а второй обросшая Schema :-) Это просто принципиально разные вещи...
 
Renat Fatkhullin:

Если вы глубоко покопаете латенси внутренних процессов МТ4 и МТ5, включая трейдинг, то вобще сбежите с МТ4. Там пропасть в качестве и зализанности процессов.

Мы не зря так фанатично занимаемся производительностью и оптимизацией МТ5. Это огромное технологическое преимущество.

Теперь буду знать. Конечно перенос всего кода будет нелегким делом даже при достаточной совместимости языков, но полагаю результат будет стоить того. Я всегда ориентирован на большую эффективность и вопрос разницы производительности и скорости всегда очень интересовал. Если бы знал об этой разнице ранее, давно забыл бы о менее быстрой платформе. Спасибо за информацию.
 
Maxim Kuznetsov:
А что вообще тут измеряют ? напоминает холивары С++ vs Lisp - прямо один-в-один, благо что один "сравнентов" почти ++ а второй обросшая Schema :-) Это просто принципиально разные вещи...

Это просто чистое доказательство на практике и в теории ошибочности позиции, которую высказывали некоторые трейдеры в теме https://www.mql5.com/ru/forum/96176/page10 (где-то было упоминание):

  • в R все библиотеки оптимизированы и максимально быстры
  • в R много оптимизаций, включая Intel Threading Building Blocks и тд


Оказалось, что это не так. В самой простой функции получился слив и MQL5 эффективнее. Причем, почему быстрее, я обосновал еще и теоретически. В дополнение к практическим результатам.

Используете ли вы CExpert при создании роботов?
Используете ли вы CExpert при создании роботов?
  • www.mql5.com
Да Нет, пишу класс робота с нуля Нет, у меня есть свой базовый класс робота Нет, я не использую ООП Хочу посмотреть результат...
 
Renat Fatkhullin:

Если вы глубоко покопаете латенси внутренних процессов МТ4 и МТ5, включая трейдинг, то вобще сбежите с МТ4. Там пропасть в качестве и зализанности процессов.

Про трейдинг как-то забывается

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2016.10.09 09:39

MT5-OrderSend НЕ полностью синхронизирован - с торговым окружением синхронизации нет. Это значит, что показания истории не соответствуют реальному положению вещей.

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

Фактически, MT5-пользователи столкнулись с тем, с чем сталкивались разработчики бриджей на MT4.

Если отправляется OrderSend, то надо ЗАПОМНИТЬ (вот здесь потенциальная уязвимость), что это сделано. Далее не обращать внимание на текущую историю (торговое окружение), пока не придет соответствующее сообщение в OnTrade. Как только оно прийдет, ЗАПОМНЕННОЕ нужно ЗАБЫТЬ.

Когда нет ЗАПОМНЕННЫХ данных, можно доверять истории, как в MT4. 

MT4-OrderSend ПОЛНОСТЬЮ синхронизирован.

Да и с остальным, гораздо более простым, как оказалось, проблемы

 
fxsaber:

Про трейдинг как-то забывается

Вы путаете асинхронность процессов с желанием увидеть синхронность.

Задача OrderSend максимально быстро выставить заявку и получить подтверждение. И с этим система отлично справляется.

А вот получить заполненную транзакцию/сделку, положить ее в историю и потом выдать вам под запрос - это другой процесс и он не имеет права тормозить работу OrderSend.

Поэтому все верно - транзакцию исполнили быстро, а потом через миллисекунду (а на самом деле раньше) в соседнем пакете получаете обновление тикета и работаете с ним.


Да и с остальным, гораздо более простым, как оказалось, проблемы

Написание компилятора, а в особенности реализация злобных С++ шаблонов - это простые вещи???

В любом случае, большое спасибо за терпение A100 - он очень помог в отлове багов.


Но это оффтоп, если хотите обсуждать указанные вопросы, делайте это в родных ветках. Тут про R.
 
Комментарии, не относящиеся к этой теме, были перенесены в "Как правильно работать в MT5 с OrderSend".