Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Я думаю, что проблема в том, что первый вызов start() для индикатора может не быть результатом нового тика ... в этом случае TimeCurrent() будет сообщать неправильное время. Я не проверял это...
В этом случае я бы просто проигнорировал первый тик ... и продолжил бы нормально со второго тика и далее.
Paul_B:
I'm plotting certain times on a chart which match to GMT, so it matters a great deal when trying to get the offset between MT4 server time and GMT.
<g> Мне кажется, вы еще не освоились с культурой этого форума. Последовательность ответов модераторов и других пользователей форума с большим стажем всегда такова: "Вы делаете что-то не так", а затем "Зачем вам это нужно?", когда выясняется, что вы не делаете что-то не так.
На вашем месте я бы просто выходил из вызовов start(), если IsConnected() ложно. Или вы могли бы хранить счетчик тиков в статической переменной и игнорировать тик #1, но это неоправданно задержит запуск при нормальных обстоятельствах.
Я поддерживаю предложение RaptorUK, для индикатора Игнорировать первый тик и обновлять все бары на втором.
Это также не совсем неожиданно. Поскольку индикаторы не могут спать, если советник загружает индикатор в init через iCustom, вызов не может вернуть значение буфера, пока индикатор не выполнит init и start.
Спасибо за информацию cyclops993, в настоящее время у меня это работает, но то, что у меня есть, не кажется идеальным решением или особенно надежным. Я буду исследовать IsConnected() немного дальше.
Я не думаю, что у вас есть большой выбор. MT4 генерирует фиктивный вызов start() для того, чтобы индикаторы отображались на автономных графиках, и потому, что в целом он хочет, чтобы индикаторы (повторно) появлялись на графиках сразу после загрузки MT4, не дожидаясь установления соединения.
Если вы хотите повысить уверенность в том, что есть правильно установленное соединение и действительный TimeCurrent(), то вы также можете искать AccountNumber() != 0 и AccountBalance() > 0. Или вы можете просто ждать второго тика, ценой многосекундных задержек на символах с низкой ликвидностью.
Спасибо, ребята, я запрограммирую индикатор на ожидание второго тика.
Кстати, только что проверил возможность IsConnected(), но я все равно получал "неправильный" TimeCurrent() даже когда IsConnected() сообщал true.
<g> Мне кажется, вы еще не освоились с культурой этого форума. Последовательность ответов модераторов и других пользователей форума с большим стажем всегда такова: "Вы делаете что-то не так", а затем "Зачем вам это нужно?", когда выясняется, что вы не делаете что-то не так.
На вашем месте я бы просто выходил из вызовов start(), если IsConnected() ложно. Или вы могли бы хранить счетчик тиков в статической переменной и игнорировать тик #1, но это неоправданно задержит запуск при нормальных обстоятельствах.
Если пользователь не предоставляет тестовый код для демонстрации проблемы [...].
В ОП не было ничего неправильного или отсутствующего. Было ясно, что Paul_B совершенно обоснованно предположил, исходя из документации MT4, что start() вызывается только в ответ на новые тики.(Почему он хотел проверить TimeCurrent(), не имеет значения, и вообще-то это не наше дело).
Ваш ответ был, по сути, хорошей версией RTFM, несмотря на то, что руководство явно не хватает в этой области [что, подчеркну, необычно; качество документации MT4 довольно хорошее]. В ответ Angevoyageur назвал это шумихой, что, похоже, является частью паттерна патологически чувствительных реакций на любую критику MT4, какой бы мягкой она ни была. Затем WHRoeder вклинился со словами "вы не хотите этого делать", после чего скопировал и вставил какой-то код, который явно не имел отношения к делу, потому что Paul_B явно уже знал, как рассчитать смещение GMT.