Полторы минуты разницы между локальным временем и временем свежего тика. Что делать. - страница 2
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Есть исходный код с комментариями.
Лень посмотреть? Или что-то не понятно?
Посмотрел. Идею я и без кода понял. Не понятно почему вы мне советуете :
Нужно добавить в Обзор рынка самые ликвидные инструменты.
Затем, добавить стаканы этих инструментов.
И, при срабатывании OnBookEvent(), копировать 1 тик (последний) там будет время и тут же брать локальное время и сравнивать.
Чем ваш метод лучше ?
Посмотрел. Идею я и без кода понял. Не понятно почему вы мне советуете :
Чем ваш метод лучше ?
Потому что он правильный!
Я ошибся, не локальное время, а время сервера.
1. Тики приходят в терминал пакетами.
2. Каждый последующий пакет может содержать тики, которые не были "уложены" в предыдущий пакет, но имеют время совпадающее с предыдущим.
3. OnBookEvent() срабатывает по приходу любого тика (Изменение цены, объёма ) т.е каждого тика. (вы запускаете таймер - уже плохо).
4. Вы используете локальное время компа, что вообще не нужно!
Вот, собственно, все что нужно для торговли (проверка торгового времени сессий)
Добавлено
Если нужна миллисекундная точность, то так
Добавлено
Но все это не даст желаемого результата (границы торгового времени), потому что
тиков может и не быть в торговую сессию, а время не останавливается.
Допустим, кто-то убрал свой отложенный ордер, стакан изменился,
есть сигнал, а там "старая" корировка (время не текущее).
Терминал не транслирует точное время сервера.
Вы меня не понимаете. Давайте с самого начала.
1) В программе вы вызываете функцию TimeCurrent() и получаете время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.
Пусть это будет 18:00:00
2) Следующей командой вы получаете время последнего тика по SBER.
Пусть это будет 17:58:00
3) Проходит немного времени и вы опять запрашиваете время последнего тика по SBER.
Пусть это будут 17:59:00
Внимание вопрос: Считаете ли вы нормальным в 18:00:00 по TimeCurrent() не знать о тике со временем 17:59:00 ?
Вы меня не понимаете. Давайте с самого начала.
1) В программе вы вызываете функцию TimeCurrent() и получаете время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.
Пусть это будет 18:00:00
2) Следующей командой вы получаете время последнего тика по SBER.
Пусть это будет 17:58:00
3) Проходит немного времени и вы опять запрашиваете время последнего тика по SBER.
Пусть это будут 17:59:00
Внимание вопрос: Считаете ли вы нормальным в 18:00:00 по TimeCurrent() не знать о тике со временем 17:59:00 ?
В коде, который я привел можно учитывать все тике (не проблема)
В последнем коде используется не TineCurrent(), а TimeTradeServer() - это мремя нужно лишь для того,
чтобы проверить тик с точностью до ДНЯ и ВСЁ!
Давайте начнем сначала.
Вообще что Вы хотите сделать, узнать?
Для чего Вы стали сравнивать время тика с локальным временем.
Какова изначальная цель?
Теперь покажу, как это проблема выглянет на практике. Я полностью переделал советника. Сделал возможность как ловить новые тики в OnTimer так и в OnBookEvent.
В обзоре рынка 45 символов. Большинство не ликвидные.
Вот результат с ловлей новых тиков в OnBookEvent:
Т.е в 18:50 по TimeCurrent был пойман новый тик по символу SNGR-3.19 с временем 18:41.
Дальше идут замеры локального времени компьютера в момент:
1) получения нового тика т.е в момент последнего вызова CopyTick (или SymbolInfo в зависимости от настроек )
2) В момент ПРЕДпоследнего вызова.
Т.е в данном случае проблема произошла из-за того, функция получения нового просто не вызывалась 10 минут.... А это произошло из-за того, что событие OnBookEvent для символа SNGR-3.19 не генерировалось 10 минут.
Наверное терминал ставил его в очередь событий, оно каким то образом исчезло из этой очереди. С OnTimer таких косяков нет. Да бывает придет тик с задержкой в секунд в 20.
Какова Ваша изначальная цель?
Для чего Вам нужно сравнивать время тивов с локальным временем?
Какова Ваша изначальная цель?
Для чего Вам нужно сравнивать время тивов с локальным временем?
Хочу знать максимальную задержку между моментом возникновения тика на сервере и временем когда он придет в терминал. И как это время можно минимизировать.
Это знание можно использовать при написании своего тестера. А может даже получиться озадачить разработчиков большими задержками.
TimeCurrent() - Время последнего тика по символу будет меньше времени задержки, поэтому его можно использовать. Использование локального времени в первой версии было не удачной идеей.
Хочу знать максимальную задержку между моментом возникновения тика на сервере и временем когда он придет в терминал. И как это время можно минимизировать.
Это знание можно использовать при написании своего тестера. А может даже получиться озадачить разработчиков большими задержками.
Понятно. Продолжайте... Без меня.
А для других участников форума
Внимание вопрос: Считаете ли вы нормальным в 18:00:00 по TimeCurrent() не знать о тике со временем 17:59:00 ?
Считаю, что вопрос спорный. Хочется, чтобы тиковая последовательность удовлетворяла как минимум следующим критериям:
1. Была последовательной, т.е. время каждого последующего тика >= времени предыдущего тика;
2. Актуальность. Т.е. время последнего пришедшего тика как можно ближе к текущему моменту;
Похоже, что проблема у Вас именно со вторым пунктом.
Спорность п.2 заключается в следующем: хочется, чтобы время от формирования тика на сервере до получения его мною (лаг) было минимальным, дабы я смог быстрее других его обработать и принять торговое решение. Но! Если лаг одинаков для всех участников торгов - тогда проблем нет (насколько я это понимаю). Т.е. проблема у сервера брокера, но все в равных условиях. Если же кто-то информацию о тике в 17:59:00 получил в 17:59:01, а я не получил даже в 18:00 - вот это уже большая проблема.
И вот тут вопрос. В чем проблема (и есть ли она)? В сервере брокера, который долго не отдает тик (всем), или в МТ5, который долго его не получает.