Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Возможно, есть вариант быстрее. Но шаг влево в условии того, что нужно посчитать, и логику, возможно, придется значительно менять. Непросто, в общем.
Это не кэширование, а индекс. Вот кэшировани (часть кода):
Код писался на скорую руку и есть что доработать, учитывая частые ArrayResize, но он именно обновляет кэш, отсортированный по Closed. Хотите потом искать - используйте свой индекс. Но обновлять вам придется только немногую часть каждый раз.
Я не помню, зачем там "12*3600", вроде не все сделки выдавались мне.
Это не кэширование, а индекс.
Читайте внимательнее.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MT5 и скорость в боевом исполнении
fxsaber, 2020.08.28 21:10
Чистый MQL5 в 100 раз медленнее частичного (только HistorySelectByPosition) кеширования.
Вот кэшировани (часть кода):
Код писался на скорую руку и есть что доработать, учитывая частые ArrayResize, но он именно обновляет кэш, отсортированный по Closed. Хотите потом искать - используйте свой индекс. Но обновлять вам придется только немногую часть каждый раз.
Это как раз пример лобового сохранения истории без приколов реала. Даже в MT4Orders частичное кеширование делается с пятисекундным запасом...
Я не помню, зачем там "12*3600", вроде не все сделки выдавались мне.
Ставьте всегда INT_MAX.
Архитектурно делать полное кеширование - надо хорошо думать. Подводных камней много.
На самом деле там ничего сложного нет. Можете делать выборку с запасом часов, например, под все ордера, которые могут появиться в истории задним числом (что очень странно, кстати).
Это как раз пример лобового сохранения истории без приколов реала. Даже в MT4Orders частичное кеширование делается с пятисекундным запасом...
Ставьте всегда INT_MAX.
Я не понимаю смысла в сдвиге. Как бы есть текущий таймстамп, относительно него хочу и получить и странно, что надо указывать время, которого не существует. Хочется как бы логичного объяснения.
Мой кэш, кстати, работает на реальных счетах с 10к+ сделок.
И основные тормоза в коде пока что - это сетевые функции.
В последней бете 2588 функция HistorySelect очень хорошо кешируется и почти всегда(кроме первого раза) обходится бесплатно.
Скорее всего к релизу внесем еще ряд улучшений.
Как я объяснял ранее, в МТ5 нет дополнительных расходов на автоматическом создании снепшотов рынка для каждого эксперта перед каждым эвентом, как это делалось в МТ4. Это снижает задержки и позволяет роботам работать быстрее. Каждый разработчик запрашивает ровно то, что ему нужно.
Поэтому нужно четко понимать, что подход "вызову HistorySelect на всю историю, а потом сразу еще сделаю выборку HistorySelectByPosition" будет убивать ранее созданные кеши истории. Это выстрел себе в ногу.
После релиза мы начнем большую работу по добавлению новых более эффективных MQL5 функций и откроем нативные структуры данных ордеров/сделок, чтобы можно было упростить и ускорить алготрейдинг.
В последней бете 2588 функция HistorySelect очень хорошо кешируется и почти всегда(кроме первого раза) обходится бесплатно.
Результат.
На каждом тике проблема.
ЗЫ Установил Win10, LatencyMon показывает, что все отлично.
После релиза мы начнем большую работу по добавлению новых более эффективных MQL5 функций и откроем нативные структуры данных ордеров/сделок, чтобы можно было упростить и ускорить алготрейдинг.
MqlDeal, MqlOrder и MqlPosition - было бы замечательно. Возможно, даже станет проще.
На данный момент вижу, что в 99% случаев нужно использовать только HistorySelect(0, INT_MAX). Остальные варианты стараться не использовать.
Если у меня в истории сотни тысяч ордеров это будет тоже быстрее, чем брать историю за последние минуты?
Ну и потом что, мне всю это историю перебирать что-ли? Бред какой то.
Если у меня в истории сотни тысяч ордеров это будет тоже быстрее, чем брать историю за последние минуты?
В боевых роботах оставил только 0-INT_MAX-вариант. Тормоза прекратил замечать.