Ошибки, баги, вопросы - страница 3416
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вопрос банальный, поведение неожиданное (от мт4 такого явно не ожидал).
Подскажите, пожалуйста, вызываю iTime уже 09.11.23 в 3:00 по времени ПК, это 2:00 по времени сервера дилера. Получаю время открытия свечи предыдущего дня, а не текущего. Как такое возможно? В тестере все замечательно. Тики нового дня уже были, т.к. смог открыть позицию.
Но в 11:14 по времени пк и 10:14 по времени сервера получаю корректное время
Вопрос банальный, поведение неожиданное (от мт4 такого явно не ожидал).
Подскажите, пожалуйста, вызываю iTime уже 09.11.23 в 3:00 по времени ПК, это 2:00 по времени сервера дилера. Получаю время открытия свечи предыдущего дня, а не текущего. Как такое возможно? В тестере все замечательно. Тики нового дня уже были, т.к. смог открыть позицию.
Если график Д1 не открыт, первый запрос вернет устаревшие данные.
Можно дергать все ТФ каждую минуту, чтобы поддерживать все данные в актуальном состоянии. В МТ4 так было всегда.
Если график Д1 не открыт, первый запрос вернет устаревшие данные.
Можно дергать все ТФ каждую минуту, чтобы поддерживать все данные в актуальном состоянии. В МТ4 так было всегда.
Понял, спасибо вам
Вопрос банальный, поведение неожиданное (от мт4 такого явно не ожидал).
Подскажите, пожалуйста, вызываю iTime уже 09.11.23 в 3:00 по времени ПК, это 2:00 по времени сервера дилера. Получаю время открытия свечи предыдущего дня, а не текущего. Как такое возможно? В тестере все замечательно. Тики нового дня уже были, т.к. смог открыть позицию.
Если вы вызываете функцию iTime() в своем роботе или скрипте на платформе MetaTrader 4 (MT4), то получение времени может зависеть от настроек временной зоны вашего сервера дилера и вашей локальной временной зоны на компьютере.
Функция iTime() возвращает время открытия свечи для заданного индекса бара. Индекс бара 0 соответствует самому последнему закрытому бару. Предположим, что вы вызываете iTime(0) для получения времени открытия последнего бара дня. Если ваш сервер дилера использует временную зону, отличную от вашей локальной временной зоны, то могут возникнуть несоответствия.
Например, если ваш сервер дилера работает в часовой зоне GMT+2, а ваша локальная временная зона GMT+3, то при вызове iTime(0) в 3:00 по вашему локальному времени (GMT+3) вы получите время открытия свечи, соответствующей 2:00 по времени сервера дилера (GMT+2). Это происходит из-за разницы во временных зонах между вашим компьютером и сервером дилера.
Если вы хотите получить время открытия текущего бара, установите индекс бара в значение 1: iTime(1) . Это вернет время открытия текущего бара на вашем сервере дилера в соответствии с его временной зоной.
Проверьте также настройки временных зон на платформе MT4 и убедитесь, что они соответствуют временным зонам вашего сервера дилера и локального компьютера. Если проблема сохраняется, обратитесь к поставщику услуг или технической поддержке платформы MT4 для получения более подробной информации и помощи.
Справка также недостаточно информативна, имхо.
Код, который вы предоставили, выполняет вставку нового элемента в двусвязный список на заданной позиции. Однако вы правильно заметили, что есть несколько проблем с текущей реализацией.
if(index>m_data_total || index<0) return(-1); : Эта строка проверяет, что индекс находится в правильных границах. Если индекс меньше нуля или больше общего количества элементов в списке, возвращается -1. Вполне верно, что на практике часто используют возможность вставки элемента в конец списка по индексу -1, но в вашей реализации так делать нельзя из-за этой проверки.
if(index==-1) ... : Этот блок кода должен позволить вставить элемент в конец списка, если указан индекс -1. Но, как вы правильно заметили, до этого места кода выполнение не дойдет из-за предыдущей проверки.
В остальных строках обрабатываются остающиеся случаи: вставка элемента перед текущим узлом ( m_curr_node ) или добавление элемента в конец списка, если указанного индекса не существует.
Хорошо подмечено, что в этом коде есть противоречия/баги, которые не позволяют ему работать должным образом. Это могут быть ошибки, сделанные программистом. Если вы хотите изменить этот код, чтобы он позволил вставлять элемент в конец списка по индексу -1, вы можете изменить проверку индекса следующим образом:
if(index > m_data_total || index < -1) return(-1);
Такой код позволит пропускать индекс -1.
Под Wine файлы в UTF-8 не пишутся. Файл нулевой длины, и ошибки тоже нет.
Если сделать так
пишется в UTF-16
Под Wine файлы в UTF-8 не пишутся. Файл нулевой длины, и ошибки тоже нет.
Если сделать так
пишется в UTF-16
Проблема может быть связана с тем, что в MetaEditor (который, вероятно, используется для написания торговых советников на платформе MetaTrader) функция FileWriteString с параметром FILE_WRITE|FILE_UNICODE|FILE_TXT использует UTF-16 кодировку, как вы правильно заметили.
Если вы хотите записать файл в формате UTF-8, вам следует использовать параметры FILE_WRITE|FILE_ANSI|FILE_TXT и просто убедиться, что ваш текст предварительно преобразован в UTF-8. В вашем первом примере кода, убедитесь, что ваш текст сохранен в кодировке UTF-8. Вот исправленный фрагмент кода:
Убедитесь, что ваш редактор текста сохраняет файл в UTF-8 перед его запуском.
Проблема может быть связана с тем, что в MetaEditor (который, вероятно, используется для написания торговых советников на платформе MetaTrader) функция FileWriteString с параметром FILE_WRITE|FILE_UNICODE|FILE_TXT использует UTF-16 кодировку, как вы правильно заметили.
Если вы хотите записать файл в формате UTF-8, вам следует использовать параметры FILE_WRITE|FILE_ANSI|FILE_TXT и просто убедиться, что ваш текст предварительно преобразован в UTF-8. В вашем первом примере кода, убедитесь, что ваш текст сохранен в кодировке UTF-8. Вот исправленный фрагмент кода:
Убедитесь, что ваш редактор текста сохраняет файл в UTF-8 перед его запуском.
Файл сохранён в UTF-8.
Независимо от того, запускаю я ME5 и MT5 в локали ru_RU.CP1251 или ru_RU.UTF-8,
пишет 1251 и в файл пишет в CP1251, если указать только FILE_ANSI и не указывать CP_UTF8.
Если указать и FILE_ANSI, и CP_UTF8, получаем файл нулевой длины и не получаем кода ошибки.
и для
поведение такое же.
Под Wine файлы в UTF-8 не пишутся. Файл нулевой длины, и ошибки тоже нет.
Если сделать так
пишется в UTF-16
это copy-paste исходника или вы по памяти перепечатали ?
просто там ошибки
это copy-paste исходника или вы по памяти перепечатали ?
просто там ошибки
Это демонстрационный пример, только закомментированные строки выкинул.
Какие ошибки?