Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не будет больше тиков с последним известным временем.
Миллисекундный OnTimer гарантирует, что прошли все тики ДО этого таймерного события. Т.е. по всем символам тики актуальны.
Если речь о том, что индикатор-шпион может по каким-то техническим причинам задержать "старый" тик и прислать его после более нового по другому инструменту, то вероятно это может случиться. Иначе не вижу проблем непосредственно в коде.
Не думаю, что таймер что-то гарантирует в большей степени, чтобы прошли все тики ДО нового "события" (отсчета единицы времени). Таймер работает в локальном времени, а таймстемпы в тиках содержат серверное время. Поэтому лучше на таймер не опираться для синхронизации инструментов.
Хорошо, для тиков такое приемлемо, ввиду сложности синхронизации, хотя мы можем ввести миллисекундный таймфрейм и подогнать тики по времени.
Но ведь по ценам открытия тоже самое, хотя время открытия по всем символам одинаковое.
И из-за такого поведения ряд систем невозможно нормально тестировать.
Демонстрация проблемы.
На скрине все данные для воспроизведения на MetaQuotes-Demo. Хорошо видно, что через OnTick тики не синхронизированы, а через OnTimer (жутко тормозной) - синхронизированы.
через OnTick тики не синхронизированы, а через OnTimer (жутко тормозной) - синхронизированы.
Похоже, единственный способ ускорить расчеты в синхронизированном режиме - мат. режим по подобию EAToMath.
Или же заранее записать в файл эти данные одиночного прохода.
И в своем советнике использовать данные этого файла для синхронизации в OnTick. Будет работать быстро и правильно.
Демонстрация проблемы.
На скрине все данные для воспроизведения на MetaQuotes-Demo. Хорошо видно, что через OnTick тики не синхронизированы, а через OnTimer (жутко тормозной) - синхронизированы.
Ну так Вы взяли свой код с условием вхождения в сделку по ==. Я выше написал, что условие должно быть на строго >, без равно. Чтобы совершить синхронные сделки по последним ценам известным до 2025.10.01 01:00:00.081 по всем инструментам, Вы должны начать мониторинг тиков до этого времени, т.е. взять в качестве демонстрационной константы, например, >1759280400080. Под каждый алгоритм нужно модифицировать логику - просто подменить один тип обработчика на другой не выйдет.
PS. Я под синхронизацией имею в виду торговлю по последним известным ценам. Для синхронизации по равенству миллисекунд нужны конечно доп.проверки, но вероятность таких ситуаций (совпадение мс тиков разных инструментов) - мала, что означает пропуск потенциальных сигналов. Не уверен, что такая синхронизация имеет практический интерес.
Чтобы совершить синхронные сделки по последним ценам известным до 2025.10.01 01:00:00.081 по всем инструментам, Вы должны начать мониторинг тиков до этого времени, т.е. взять в качестве демонстрационной константы, например, >1759280400080.
Самый простой способ синхронизации - создать множество из времени тиков используемых символов.
На ходу, в 1 проход сделать синхронизацию сложно.
Сложность в неопределенности отставания. Какой символ будет ведущим неизвестно.
Готов посмотреть Ваш вариант в коде.
Для полноценного тесткейса мне бы понять практическую задачу - торгуем только по тикам, у которых совпало время с точностью до миллисекунды?
Для искусственного примера с одной единственной сделкой для заранее известного момента с синхронными тиками по всем инструментам - можно придумывать искусственный оптимальный алгоритм, но зачем?
Но ведь по ценам открытия тоже самое, хотя время открытия по всем символам одинаковое.
Надо бы уточнить задачу. По ценам открытия, если алгоритм требует наличия баров всех символов, дожидаемся когда iTime(,,0) у всех символов совпадет. Для баров в таком подходе обычно нет логической проблемы, потому что бары (даже M1) редко отсутствуют, а вот для секунд и более мелких отсчетов провалы в синхронизации могут быть частыми. Что в такие моменты делать?
Я полагаю, что на практике в качестве синхронизации следует рассматривать наличие любой цены не старше некоторого заданного таймаута, а не строгое равенство таймстемпов тиков.
Надо бы уточнить задачу. По ценам открытия, если алгоритм требует наличия баров всех символов, дожидаемся когда iTime(,,0) у всех символов совпадет. Для баров в таком подходе обычно нет логической проблемы, потому что бары (даже M1) редко отсутствуют
Имееся в виду режим тестера по ценам открытия.
для секунд и более мелких отсчетов провалы в синхронизации могут быть частыми. Что в такие моменты делать?
Подавать последнее известное значение.