При первом вызове ACR вы получите ошибку 4066. Это все. Вызовите его снова, и вы получите правильный счет, но никаких данных в массивах нет. Доступ к массивам не приводит к выходу за пределы диапазона.
При первом вызове ACR вы получаете ошибку 4066. Это все. При повторном вызове вы получаете правильный счет, но никаких данных в массивах нет. Доступ к массивам не приводит к выходу за пределы диапазона.
Я вынужден не согласиться, поскольку я не вижу того, что вы только что описали. Однако это может быть связано с тем, что большую часть времени при использовании Real Live все данные обычно доступны, а в моей демонстрационной/тестовой среде я генерировал ".hst" и ".fxt" из внешних данных.
Я попробую воссоздать условия "чистого листа" без локальных данных и посмотрю, смогу ли я воспроизвести то, что вы описываете.
Я заново создал условия "чистого листа" и написал небольшой скрипт для проверки этого в непрерывном цикле без функции сна. Я запустил скрипт дважды на графике "EURUSD", но код запросил данные по "NZDCAD", которые никогда не загружались ранее.
Результаты первого запуска следующие.
Во время первых 73607 итераций (которые длились примерно 516 мс) "ArrayCopyRates" всегда возвращал значение -1 и выдавал ошибку 4073 (Error 4073 - No history data). Во время этих итераций размер массива всегда был равен 0.
Наконец, на 73608-й итерации он вернул счетчик 512, размер массива также был установлен на 512, и время для 0-го элемента имело действительное время (а не 0), и ошибок не возникало.
Затем я выполнил второй запуск сценария, поскольку данные уже были загружены, и вот результаты:
Во время первой и единственной итерации "ArrayCopyRates" вернул счетчик 2048, но выдал ошибку 4066, хотя возвращаемый счетчик был действительным (Error 4066 - Requested history data is in updating state). Размер массива также был 2048, и время для 0-го элемента было действительным (а не 0).
Я
приложил ZIP-файл с тестовым скриптом, а также результирующие файлы журнала.
Оставляю вам возможность сделать собственные выводы!
PS! Мой вывод - объединить все тесты, прежде чем продолжать. (т.е. проверить код возврата "ArrayCopyRates", проверить коды ошибок, проверить размер массива MqlRates и (для надежности, как предлагает WHRoeder ) также проверить достоверность даты элементов массива.
EDIT: Если бы я использовал только тест "pair[0].time == 0", он бы выдал ошибку индекса массива (и привел бы к остановке выполнения) во время первых итераций первого запуска, когда данных не было. Поэтому я остаюсь при своем мнении, что нужно проверять код возврата и размер массива, но согласен, что тест времени может предложить последующий уровень проверки после выполнения других условий.
Во время первых 73607 итераций (которые длились примерно 516 мс) "ArrayCopyRates" всегда возвращал значение -1 и выдавал ошибку 4073 (Error 4073 - No history data). Во время этих итераций размер массива всегда был равен 0.
Наконец, на 73608-й итерации он вернул счет 512, и размер массива также был установлен на 512, а время для 0-го элемента имело действительное время (а не 0), и никаких ошибок не возникало.
Это прямо противоположное поведение, чем в версии до сборки 600. Это то, чего я изначально ожидал, но оказалось, что я ошибался. Наконец-то они сделали все правильно, и я приму это к сведению на будущее.
EDIT: Если бы я использовал только тест "pair[0].time == 0", он бы выдал ошибку индекса массива (и привел бы к остановке выполнения) во время первых итераций первого запуска, когда не было данных. Поэтому я остаюсь при своем мнении, что необходимо проверять код возврата и размер массива, но согласен, что тест времени может предложить последующий уровень проверки после выполнения других условий.
Все это очень полезно, спасибо за исследование и результаты.
Как насчет того, чтобы попытаться просто и точно ответить на вопрос!
Мы ответили на вопрос, который по сути был следующим:"Я хочу выбрать от 1 до 10 различных валют и 5 баров для каждой валюты."
Поскольку он не предоставил ни примера кода, ни более подробной информации, мы не смогли дать простой и точный ответ. Все, что мы могли сделать, это дать общие ответы и понять, с какими проблемами он может столкнуться. Мы ответили, что ему следует использовать"ArrayCopyRates()" или использовать"iFunctions()", и что ему нужно будет следить за присущей задержкой и ошибками, которые он, очевидно, получит. Затем мы дополнили информацию, обсудив подводные камни и проблемы, такие как отсутствие функции sleep в индикаторах и различное поведение между сборками до 600 и после.
Если вы говорите, что все это было ему не по зубам, все, что ему нужно было сделать, это написать что-то вроде: "Извините, я не понимаю! Не могли бы вы упростить это для меня!". Но поскольку такого сообщения (или любого другого, если уж на то пошло) так и не было, дискуссия продолжалась в уверенности, что он и другие были в состоянии следовать ей.
Теперь, как вы написали, он может воспользоваться Google и найти множество индикаторов с несколькими временными рамками, но если он не знает, КАК это работает, он не сможет далеко продвинуться в том, чтобы заставить свой индикатор работать так, как он хочет.
EDIT: PS! NB! Подумав об этом еще раз, WHRoeder действительно предоставил скелетный код в качестве решения проблемы. Нельзя добиться большей простоты и точности, чем это, учитывая отсутствие деталей в исходном вопросе.
Мы ответили на вопрос, суть которого заключалась в следующем:"Я хочу выбрать от 1 до 10 различных валют и 5 баров для каждой валюты."
Поскольку он не предоставил ни примера кода, ни более подробной информации, мы не смогли дать простой и точный ответ. Все, что мы могли сделать, это дать общие ответы и понять, с какими проблемами он может столкнуться. Мы ответили, что ему следует использовать"ArrayCopyRates()" или использовать"iFunctions()", и что ему нужно будет следить за присущей задержкой и ошибками, которые он, очевидно, получит. Затем мы дополнили информацию, обсудив подводные камни и проблемы, такие как отсутствие функции сна в индикаторах и различное поведение между сборками до 600 и после.
Если вы скажете, что все это было ему не по зубам, все, что ему нужно было сделать, это написать что-то вроде: "Извините, я не понимаю! Вы можете упростить это для меня!". Но поскольку такого сообщения (или любого другого, если уж на то пошло) не было, дискуссия продолжалась в уверенности, что он и другие были в состоянии следовать ей.
Теперь, как вы написали, он может воспользоваться Google и найти там множество индикаторов с несколькими временными рамками, но если он все еще не знает, КАК это работает, он не сможет далеко продвинуться в том, чтобы заставить свой индикатор работать так, как он хочет.
EDIT: PS! NB! Подумав об этом еще раз, WHRoeder действительно предоставил скелетный код в качестве решения проблемы. Вы не можете быть более простым и точным, чем это, учитывая отсутствие деталей в исходном вопросе.
Очевидным ответом было "Да, мы (FMIC и WHRoeder) знаем, просто посмотрите, как мы это обсуждаем", не спрашивая и не ожидая подробностей о том, что на самом деле нужно ОП.
Что он/она хотел сделать с этим индикатором: "Я хочу выбрать от 1 до 10 различных валют и 5 баров для каждой валюты."
Да, примеры были предоставлены. Но они были предоставлены скорее как соревнование между вами двумя. Интересная дискуссия? Да. Я узнал кое-что, чего не знал. Был ли пример предоставлен таким образом, чтобы новичок мог понять? Не очень. Люди приходят на этот форум из-за отсутствия помощи и обучающих материалов от MetaTrader. Большинство людей, которые здесь пишут, имеют минимальное представление о том, что они хотят сделать, и когда обсуждение заходит слишком далеко от их понимания, они уходят. Что является абсолютным позором.
Большой подсказкой было "Но я не знаю, как это сделать".
Отсутствие какого-либо ответа от ОП является признаком того, что что-то не так. Я предполагаю, что ОП разочаровался из-за отсутствия понимания и забросил тему. Было время много лет назад, когда я делал то же самое. Я узнал больше на разных сайтах/форумах, чем на этом, потому что никто не тратил время на то, чтобы понять, насколько я новичок, и постоянно приводил примеры и вел дискуссии, которые были совершенно выше моего понимания в то время.
Но все это больше не имеет значения, так как ОП исчез.
И снова это позор, кто знает, может быть этот человек станет следующим гуру, в котором так нуждается этот и другие форумы.
Большой подсказкой было "Но я не знаю, как это сделать".
Отсутствие какого-либо ответа от ОП является признаком того, что что-то не так. Мое "предположение" заключается в том, что ОП разочаровался из-за отсутствия понимания и забросил тему. Было время много лет назад, когда я делал то же самое. Я узнал больше на разных сайтах/форумах, чем на этом, потому что никто не тратил время на то, чтобы понять, насколько я новичок, и постоянно приводил примеры и вел дискуссии, которые были совершенно выше моего понимания в то время.
С вашей точки зрения вы, возможно, правы, с другой стороны, я видел много вопросов, на которые просто давались ответы, если рискнуть заглянуть в документацию, и я действительно чувствую себя дураком, отвечая на такие вопросы снова и снова.
Кроме того, здесь есть Google и возможность поиска. Если я не знаю, как что-то сделать, это будет моим следующим шагом в попытке решить проблему самостоятельно.
Теперь к теме этой темы: "...как разработать мультивалютную систему". Это звучит для меня как "научи меня кодировать бесплатно", что довольно близко к "можешь ли ты закодировать это для меня". Все это не совсем серьезно.
Поскольку существует так много кода, доступного бесплатно, мой ответ на это был бы таким: "Используйте google или поиск здесь, чтобы найти бесплатный код и измените его!".
Если люди обижаются на это, я думаю, это их проблема.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
При первом вызове ACR вы получите ошибку 4066. Это все. Вызовите его снова, и вы получите правильный счет, но никаких данных в массивах нет. Доступ к массивам не приводит к выходу за пределы диапазона.
При первом вызове ACR вы получаете ошибку 4066. Это все. При повторном вызове вы получаете правильный счет, но никаких данных в массивах нет. Доступ к массивам не приводит к выходу за пределы диапазона.
Я вынужден не согласиться, поскольку я не вижу того, что вы только что описали. Однако это может быть связано с тем, что большую часть времени при использовании Real Live все данные обычно доступны, а в моей демонстрационной/тестовой среде я генерировал ".hst" и ".fxt" из внешних данных.
Я попробую воссоздать условия "чистого листа" без локальных данных и посмотрю, смогу ли я воспроизвести то, что вы описываете.
Я заново создал условия "чистого листа" и написал небольшой скрипт для проверки этого в непрерывном цикле без функции сна. Я запустил скрипт дважды на графике "EURUSD", но код запросил данные по "NZDCAD", которые никогда не загружались ранее.
приложил ZIP-файл с тестовым скриптом, а также результирующие файлы журнала.Оставляю вам возможность сделать собственные выводы!
PS! Мой вывод - объединить все тесты, прежде чем продолжать. (т.е. проверить код возврата "ArrayCopyRates", проверить коды ошибок, проверить размер массива MqlRates и (для надежности, как предлагает WHRoeder ) также проверить достоверность даты элементов массива.
EDIT: Если бы я использовал только тест "pair[0].time == 0", он бы выдал ошибку индекса массива (и привел бы к остановке выполнения) во время первых итераций первого запуска, когда данных не было. Поэтому я остаюсь при своем мнении, что нужно проверять код возврата и размер массива, но согласен, что тест времени может предложить последующий уровень проверки после выполнения других условий.
Это то, чего я изначально ожидал, но оказалось, что я ошибался.
Наконец-то они сделали все правильно, и я приму это к сведению на будущее.
EDIT: Если бы я использовал только тест "pair[0].time == 0", он бы выдал ошибку индекса массива (и привел бы к остановке выполнения) во время первых итераций первого запуска, когда не было данных. Поэтому я остаюсь при своем мнении, что необходимо проверять код возврата и размер массива, но согласен, что тест времени может предложить последующий уровень проверки после выполнения других условий.
Все это очень полезно, спасибо за исследование и результаты.
Странно, что с момента начала этой темы не было ни одного комментария от первоначального автора. Он вообще следит за этим?
Почему он/она должен следить за этим сообщением, последующие сообщения вышли далеко за пределы уровня понимания большинства людей на этом форуме.
Как насчет того, чтобы попытаться просто ответить на вопрос простым и точным образом!
Теперь, чтобы ответить на первоначальный вопрос, на всякий случай, если есть небольшой шанс, что автор сообщения все еще здесь, Google - ваш друг.
Как насчет того, чтобы попытаться просто и точно ответить на вопрос!
Мы ответили на вопрос, который по сути был следующим:"Я хочу выбрать от 1 до 10 различных валют и 5 баров для каждой валюты."
Поскольку он не предоставил ни примера кода, ни более подробной информации, мы не смогли дать простой и точный ответ. Все, что мы могли сделать, это дать общие ответы и понять, с какими проблемами он может столкнуться. Мы ответили, что ему следует использовать"ArrayCopyRates()" или использовать"iFunctions()", и что ему нужно будет следить за присущей задержкой и ошибками, которые он, очевидно, получит. Затем мы дополнили информацию, обсудив подводные камни и проблемы, такие как отсутствие функции sleep в индикаторах и различное поведение между сборками до 600 и после.
Если вы говорите, что все это было ему не по зубам, все, что ему нужно было сделать, это написать что-то вроде: "Извините, я не понимаю! Не могли бы вы упростить это для меня!". Но поскольку такого сообщения (или любого другого, если уж на то пошло) так и не было, дискуссия продолжалась в уверенности, что он и другие были в состоянии следовать ей.
Теперь, как вы написали, он может воспользоваться Google и найти множество индикаторов с несколькими временными рамками, но если он не знает, КАК это работает, он не сможет далеко продвинуться в том, чтобы заставить свой индикатор работать так, как он хочет.
EDIT: PS! NB! Подумав об этом еще раз, WHRoeder действительно предоставил скелетный код в качестве решения проблемы. Нельзя добиться большей простоты и точности, чем это, учитывая отсутствие деталей в исходном вопросе.
Мы ответили на вопрос, суть которого заключалась в следующем:"Я хочу выбрать от 1 до 10 различных валют и 5 баров для каждой валюты."
Поскольку он не предоставил ни примера кода, ни более подробной информации, мы не смогли дать простой и точный ответ. Все, что мы могли сделать, это дать общие ответы и понять, с какими проблемами он может столкнуться. Мы ответили, что ему следует использовать"ArrayCopyRates()" или использовать"iFunctions()", и что ему нужно будет следить за присущей задержкой и ошибками, которые он, очевидно, получит. Затем мы дополнили информацию, обсудив подводные камни и проблемы, такие как отсутствие функции сна в индикаторах и различное поведение между сборками до 600 и после.
Если вы скажете, что все это было ему не по зубам, все, что ему нужно было сделать, это написать что-то вроде: "Извините, я не понимаю! Вы можете упростить это для меня!". Но поскольку такого сообщения (или любого другого, если уж на то пошло) не было, дискуссия продолжалась в уверенности, что он и другие были в состоянии следовать ей.
Теперь, как вы написали, он может воспользоваться Google и найти там множество индикаторов с несколькими временными рамками, но если он все еще не знает, КАК это работает, он не сможет далеко продвинуться в том, чтобы заставить свой индикатор работать так, как он хочет.
EDIT: PS! NB! Подумав об этом еще раз, WHRoeder действительно предоставил скелетный код в качестве решения проблемы. Вы не можете быть более простым и точным, чем это, учитывая отсутствие деталей в исходном вопросе.
Вопрос звучал так: "Кто-нибудь знает, как разработать мультивалютный индикатор?".
Очевидным ответом было "Да, мы (FMIC и WHRoeder) знаем, просто посмотрите, как мы это обсуждаем", не спрашивая и не ожидая подробностей о том, что на самом деле нужно ОП.
Что он/она хотел сделать с этим индикатором: "Я хочу выбрать от 1 до 10 различных валют и 5 баров для каждой валюты."
Да, примеры были предоставлены. Но они были предоставлены скорее как соревнование между вами двумя. Интересная дискуссия? Да. Я узнал кое-что, чего не знал. Был ли пример предоставлен таким образом, чтобы новичок мог понять? Не очень. Люди приходят на этот форум из-за отсутствия помощи и обучающих материалов от MetaTrader. Большинство людей, которые здесь пишут, имеют минимальное представление о том, что они хотят сделать, и когда обсуждение заходит слишком далеко от их понимания, они уходят. Что является абсолютным позором.
Большой подсказкой было "Но я не знаю, как это сделать".
Отсутствие какого-либо ответа от ОП является признаком того, что что-то не так. Я предполагаю, что ОП разочаровался из-за отсутствия понимания и забросил тему. Было время много лет назад, когда я делал то же самое. Я узнал больше на разных сайтах/форумах, чем на этом, потому что никто не тратил время на то, чтобы понять, насколько я новичок, и постоянно приводил примеры и вел дискуссии, которые были совершенно выше моего понимания в то время.
Но все это больше не имеет значения, так как ОП исчез.
И снова это позор, кто знает, может быть этот человек станет следующим гуру, в котором так нуждается этот и другие форумы.
Большой подсказкой было "Но я не знаю, как это сделать".
Отсутствие какого-либо ответа от ОП является признаком того, что что-то не так. Мое "предположение" заключается в том, что ОП разочаровался из-за отсутствия понимания и забросил тему. Было время много лет назад, когда я делал то же самое. Я узнал больше на разных сайтах/форумах, чем на этом, потому что никто не тратил время на то, чтобы понять, насколько я новичок, и постоянно приводил примеры и вел дискуссии, которые были совершенно выше моего понимания в то время.
С вашей точки зрения вы, возможно, правы, с другой стороны, я видел много вопросов, на которые просто давались ответы, если рискнуть заглянуть в документацию, и я действительно чувствую себя дураком, отвечая на такие вопросы снова и снова.
Кроме того, здесь есть Google и возможность поиска. Если я не знаю, как что-то сделать, это будет моим следующим шагом в попытке решить проблему самостоятельно.
Теперь к теме этой темы: "...как разработать мультивалютную систему". Это звучит для меня как "научи меня кодировать бесплатно", что довольно близко к "можешь ли ты закодировать это для меня". Все это не совсем серьезно.
Поскольку существует так много кода, доступного бесплатно, мой ответ на это был бы таким: "Используйте google или поиск здесь, чтобы найти бесплатный код и измените его!".
Если люди обижаются на это, я думаю, это их проблема.