Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нет, я воспроизвел Ваш способ: на двух терминалах. Результат скомпоновал из логов этих терминалов.
Исходники приведены. Вы можете повторить и посмотреть логи буквально через пять минут работы.
В моем способе было два индикатора, а не советник и индикатор. Советник будет реагировать на все тики, если скорость выполнения одной итерации советника выше, чем частота поступления тиков. Очевидно, что приведенный советник - "легкий", что не вызывает в нем существенных задержек выполнения. Кроме того, Вам не попались промежутки с высокой частотой поступления тиков. Добавьте в советник торговые операции и увидите пропуск тиков.
Как видно, все отлично может работать, если захотеть.
Ну не хотят они, разве непонятно? ))) Зачем людям душу бередить, заставляя делать то, чего они не хотят? Уже неоднократно разработчики говорили об этом. Все, проехали. Захотят (или увидят целесообразность) - сделают. Такое уже не раз бывало: сначала отказывались, доказывали, что это не нужно, а потом делали.
MetaQuotes умеют признавать свои ошибки. Дайте возможность этому процессу пройти эволюционный путь, а не революционный. Нужно понимать, что для осознания ошибки требуется время и зачастую немалое.
Ну не хотят они, разве непонятно? ))) Зачем людям душу бередить, заставляя делать то, чего они не хотят?
Благими намеряниями дорога... садизм, короче.
MetaQuotes умеют признавать свои ошибки.
Чтобы собирать тики, советник использовать нельзя. Только индикатор.
Таких программ (сборщиков тиков) великое множество. На моем сайте есть такой в исходном коде. Также бесплатно прилагается история тиков по трем брокерам и 24-м парам более чем за год.
Kir_7:
Смотрите, Вы в своем сборщике используете функцию OnCalculate. Вот здесь https://www.mql5.com/ru/forum/14794/page2 человек написал: "у индикаторов MQL5, в отличие от их MQL4 собратьев, стало большесобытий, приводящих к запуску функции индикатора. Ведь даже самоназвание функции поменялось (OnCalculate, а не start)".
То есть, кроме прихода нового тика в MQL5 функция OnCalculate может сработать и по другой причине, спровоцировав при этом запись ложного нового тика. Ваш код я посмотрел, но не обнаружил там какого-нибудь фильтра на такие ложные тики (в принципе, посмотрел не очень внимательно). Что можете сказать по этому поводу ? Или в MQL4 все не так ?
Насколько я понял, этот человек - я ))
По этой фразе уже есть уточнение в справке - событие Calculate. Как видно, это событие происходит в двух случаях: сразу после OnInit и при любом изменении ценовых данных. К таковым изменениям также относится полностью идентичный старому новый тик, но с другим временем. Поэтому ложных тиков, кроме первого вызова индикатора, не будет.
И просветите тёмного, есть ли какая-нибудь разница между функциями OnCalculate и Start, используемых в индикаторах ?
Насколько я понял, этот человек - я ))
По этой фразе уже есть уточнение в справке - событие Calculate. Как видно, это событие происходит в двух случаях: сразу после OnInit и при любом изменении ценовых данных. К таковым изменениям также относится полностью идентичный старому новый тик, но с другим временем. Поэтому ложных тиков, кроме первого вызова индикатора, не будет.
К сожалению, не могу сказать точно, какая между ними разница. Скорее всего, никакой. Пишу через OnCalculate, т. к. этот стиль единый для MQL4 и MQL5, что облегчает переносимость кода.1. При любом изменении ценовых данных. В том числе - исторических.
2. Что такое поток кто-нибудь помнит?
3. Тик не знает времени.
1. При любом изменении ценовых данных. В том числе - исторических.
Верно. Это учтено. Смотрите фразу: "кроме первого вызова".
2. Что такое поток кто-нибудь помнит?
Не совсем понятно, к чему здесь это. Если это намек на разделение потоков при выполнении программ, то в таком случае мимо: индикатор выполняется в интерфейсном потоке терминала. Если индикатор не будет отдавать управление терминалу, то терминал зависнет. Да, при этом терминал будет продолжать получение котировок. Только никто об этом не узнает.
3. Тик не знает времени.
1. При любом изменении ценовых данных. В том числе - исторических.
Что Вы имеете в виду ?
Простите мне мою дотошность, просто у индикаторов основная задача - это индицировать. То, что на их основе люди разрабатывают сборщики тиков, мне кажется, это не совсем правильно, но выбора-то нет! Поэтому хочется разобраться, чтобы полученные массивы тиков были без ошибок.
Что Вы имеете в виду ?
Простите мне мою дотошность, просто у индикаторов основная задача - это индицировать. То, что на их основе люди разрабатывают сборщики тиков, мне кажется, это не совсем правильно, но выбора-то нет! Поэтому хочется разобраться, чтобы полученные массивы тиков были без ошибок.
Не понял, почему нет выбора? Запускаем в скрипте бесконечный цикл с задержкой Sleep(11) (реальная задержка будет все равно 16 мс). На каждом проходе для всех нужных символов считываем текущие аск и бид NewBid = MarketInfo(Symb,MODE_BID). Если оба ненулевые и хоть один отличается от предыдущего своего значения, значит, "обновились". Пишем в файл все обновленные тики разных инстументов сразу. Терминал выполняет этот скрипт в отдельном потоке, и отвлечений на перевывод графиков, окон, как в интерфейсном потоке, нет. Параллельно в другом потоке советник, торгуя, может простаивать в ожидании ответов сервера на торговые запросы сколько угодно, может и долго считать что-нибудь, тики продолжают приниматься без задержек.
А вот что такое "массивы тиков без ошибок", пусть и не связанных с простоями в их приеме, вопрос сложный. У меня это: контроль бид<=аск; реальности самих значений бид и аск; игнорирование шпилек высотой, например, больше 80 спредов; контроль неубывания времени при корректировках системного таймера на сервере или на компьютере с терминалом (игнорирование тиков, пришедших после сдвига времени до достижения отметки времени, имевшейся до этого сдвига). Совсем не представляю, как бороться с тем, что последовательность тиков меняется из-за разных маршрутов и продолжительности интернет-доставки пакетов с тиками от сервера. Это обычно неважно в случае 4-разрядного котирования, где тики по одному инструменту появляются в среднем через 3 секунды. Но для 5-разрядного, на новостях, не знаю, как оно выходит.