Полторы минуты разницы между локальным временем и временем свежего тика. Что делать. - страница 3
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
TimeCurrent() - Время последнего тика по символу будет меньше времени задержки, поэтому его можно использовать. Использование локального времени в первой версии было не удачной идеей.
Уоу... дак текущая версия, походу, тоже неудачная.
Читаем определение TimeCurrent():
TimeCurrent
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов.
По одному из значит, что отображается время самого часто меняющегося (для простоты - самого ликвидного). А это не то, что Вам нужно. Вам нужно SymbolInfoInteger( бла-бла, SYMBOL_TIME ). Вроде так.
Уоу... дак текущая версия, походу, тоже неудачная.
Читаем определение TimeCurrent():
По одному из значит, что отображается время самого часто меняющегося (для простоты - самого ликвидного). А это не то, что Вам нужно. Вам нужно SymbolInfoInteger( бла-бла, SYMBOL_TIME ). Вроде так.
Это я так для prostotrader пытался до нести, в чем я вижу проблему. В последний версии я прохожу по всем символам и беру максимальное время последнего полученного тика.
Если же кто-то информацию о тике в 17:59:00 получил в 17:59:01, а я не получил даже в 18:00 - вот это уже большая проблема.
И вот тут вопрос. В чем проблема (и есть ли она)? В сервере брокера, который долго не отдает тик (всем), или в МТ5, который долго его не получает.
С одной стороны среднее время между "TimeCurrent" и временем прихода последнего тика 5 миллисекунд, с другой стороны бывают тики которые приходят с опаданием десятки секунд. Например с 18 25. У далось поймать тик с задержкой 45 секунд. И это на паре десятке не ликвидных символах.
+ к этому проблему термина можно усугубить использованием CopyTicks для получения последнего тика.Она мало того, что медленнее в разы, так ещё и может выполняться на ровном месте полторы секунды.
Ещё удалось понять, что OnBookEvent подходит только, для торговли на одном символе.
Это я так для prostotrader пытался до нести, в чем я вижу проблему. В последний версии я прохожу по всем символам и беру максимальное время последнего полученного тика.
С одной стороны среднее время между "TimeCurrent" и временем прихода последнего тика 5 миллисекунд, с другой стороны бывают тики которые приходят с опаданием десятки секунд. Например с 18 25. У далось поймать тик с задержкой 45 секунд. И это на паре десятке не ликвидных символах.
+ к этому проблему термина можно усугубить использованием CopyTicks для получения последнего тика.Она мало того, что медленнее в разы, так ещё и может выполняться на ровном месте полторы секунды.
Ещё удалось понять, что OnBookEvent подходит только, для торговли на одном символе.
Приплыли. Оказывается, Вы только сейчас смекнули, что стакан формируется для каждой валютной пары отдельный, поэтому торговать по его данным разными парами не получится.
Остается только надеяться, что скоро Вы сообразите, что перебор данных разных стаканов в некоторой, Вами заданной очередности, никак не соответствует очередности поступления данных о новых тиках в стаканы разных валютных пар.
Поэтому, если в Вашей очередности первым проверяется стакан EURUSD, а последним - BTCUSD и между ними есть еще пара десятков символов различной ликвидности, то время поступления тиков вполне может выглядеть как-то так:
18:50:00.000; 18:48:59.018; 18:51:00.001; 18:47:59.000 ну и так далее. Без всякой теории заговора, косяков МТ и брокера. Что запрограммировали, то и получили.
Приплыли. Оказывается, Вы только сейчас смекнули, что стакан формируется для каждой валютной пары отдельный, поэтому торговать по его данным разными парами не получится.
Остается только надеяться, что скоро Вы сообразите, что перебор данных разных стаканов в некоторой, Вами заданной очередности, никак не соответствует очередности поступления данных о новых тиках в стаканы разных валютных пар.
Поэтому, если в Вашей очередности первым проверяется стакан EURUSD, а последним - BTCUSD и между ними есть еще пара десятков символов различной ликвидности, то время поступления тиков вполне может выглядеть как-то так:
18:50:00.000; 18:48:59.018; 18:51:00.001; 18:47:59.000 ну и так далее. Без всякой теории заговора, косяков МТ и брокера. Что запрограммировали, то и получили.
Ловить новые тики через OnBookEvent меня надоумил prostotrade , написав что так "правильней." К самому стакану я вообще не обращаюсь просто подписываюсь на его обновления по всем символам в обзоре рынка. OnBookEven я по сути использую лишь для определения символа по которому обновился стакан. Далее идет проверка на новый тик, а потом смотрю не установил ли советник новые антирекорды. Вот собственно вся функция:
Остается только надеяться, что скоро Вы сообразите, что перебор данных разных стаканов в некоторой, Вами заданной очередности, никак не соответствует очередности поступления данных о новых тиках в стаканы разных валютных пар.
Насколько я понимаю если я не получаю стакан с помощью MarketBookGet, то ничего я не перебираю. Вы наверное мой код со второй страницы просто не смотрели.
Ловить новые тики через OnBookEvent меня надоумил prostotrade , написав что так "правильней." К самому стакану я вообще не обращаюсь просто подписываюсь на его обновления по всем символам в обзоре рынка. OnBookEven я по сути использую лишь для определения символа по которому обновился стакан. Далее идет проверка на новый тик, а потом смотрю не установил ли советник новые антирекорды. Вот собственно вся функция:
Насколько я понимаю если я не получаю стакан с помощью MarketBookGet, то ничего я не перебираю. Вы наверное мой код со второй страницы просто не смотрели.
Сигнал в МТ не обрабатывается, пока не обработан предыдущий сигнал.
Ловить новые тики через OnBookEvent меня надоумил prostotrade , написав что так "правильней." К самому стакану я вообще не обращаюсь просто подписываюсь на его обновления по всем символам в обзоре рынка. OnBookEven я по сути использую лишь для определения символа по которому обновился стакан. Далее идет проверка на новый тик, а потом смотрю не установил ли советник новые антирекорды. Вот собственно вся функция:
Насколько я понимаю если я не получаю стакан с помощью MarketBookGet, то ничего я не перебираю. Вы наверное мой код со второй страницы просто не смотрели.
Не смотрел.
С логикой у вас все ок, не слушайте тех, кто проходит мимо.
1. Попробуйте оставить 3-5 инструментов (один из которых малоликвидный). Воспроизведется?
2. Запустите на чистой машине без другого софта, использующего интернет. Повторится?
3. Попробуйте разнести ловлю задержек в разных советников (1 на инструмент).
Если проблема не в ресурсах (было какое-то ограничение на количество потоков, выделяемых одному терминалу), то баг должны исправить.
С логикой у вас все ок, не слушайте тех, кто проходит мимо.
1. Попробуйте оставить 3-5 инструментов (один из которых малоликвидный). Воспроизведется?
2. Запустите на чистой машине без другого софта, использующего интернет. Повторится?
3. Попробуйте разнести ловлю задержек в разных советников (1 на инструмент).
Если проблема не в ресурсах (было какое-то ограничение на количество потоков, выделяемых одному терминалу), то баг должны исправить.
Спасибо за ответ. Сегодня немного продвинулся в решении этой проблемы. Она лечиться командой Sleep() между вызовами SymbolInfo() . Раньше я просто в цикле по всему обзору рынка проходил без пауз. Я тестировал на 40 символах на вечерке сегодня. Если Sleep(5) то ловился "новый тик" который должен был придти секунды две назад. А вот на Sleep(10) все идеально задержка 400 миллисекунд ( за счет этого Sleep(10) ( 40 символов *10 ) ) . Попробовал протестировать на 4 самых ликвидных на вечерке. Со Sleep(1) никаких задержек нет.... все идеально. Вот я не понимаю как такое может быть, если символ в обзоре мало SymbolInfo можно пользоваться без всяких пауз. А если символов много уже нужно паузы использовать.
Теперь ответы:
1) На ликвидных на вечерке не воспроизводиться.
2) На 40 символах повторяется даже с отключенным софтом.
3) Я не понял, что вы предлагаете. Ловить новые тики сразу из двух советников в одном терминале ?
ЗЫ Сейчас копаю в направлении целесообразности вызов SymbolInfo. Например удалось выяснить, что даже один символ в обзоре рынка не способен отдавать новые тики чаще 3.5 миллисекунд( на вечерке правда дело было).
1) На ликвидных на вечерке не воспроизводиться.
2) На 40 символах повторяется даже с отключенным софтом.
3) Я не понял, что вы предлагаете. Ловить новые тики сразу из двух советников в одном терминале ?
ЗЫ Сейчас копаю в направлении целесообразности вызов SymbolInfo. Например удалось выяснить, что даже один символ в обзоре рынка не способен отдавать новые тики чаще 3.5 миллисекунд( на вечерке правда дело было).
1. Попробуйте добавить один неликвидный
3. Ловить пропуски по одному инструменту из одного советника. И запустить 40 советников.
Спасибо за ответ. Сегодня немного продвинулся в решении этой проблемы. Она лечиться командой Sleep() между вызовами SymbolInfo() . Раньше я просто в цикле по всему обзору рынка проходил без пауз. Я тестировал на 40 символах на вечерке сегодня. Если Sleep(5) то ловился "новый тик" который должен был придти секунды две назад. А вот на Sleep(10) все идеально задержка 400 миллисекунд ( за счет этого Sleep(10) ( 40 символов *10 ) ) . Попробовал протестировать на 4 самых ликвидных на вечерке. Со Sleep(1) никаких задержек нет.... все идеально. Вот я не понимаю как такое может быть, если символ в обзоре мало SymbolInfo можно пользоваться без всяких пауз. А если символов много уже нужно паузы использовать.
Кусок кода приведите пожалуйста, который ловит задержки. Прямо тут, через кнопку вставки кода.