Кто-нибудь знает, как разработать мультивалютный индикатор? - страница 2

 

При первом вызове ACR вы получите ошибку 4066. Это все. Вызовите его снова, и вы получите правильный счет, но никаких данных в массивах нет. Доступ к массивам не приводит к выходу за пределы диапазона.

 
WHRoeder:

При первом вызове 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", он бы выдал ошибку индекса массива (и привел бы к остановке выполнения) во время первых итераций первого запуска, когда данных не было. Поэтому я остаюсь при своем мнении, что нужно проверять код возврата и размер массива, но согласен, что тест времени может предложить последующий уровень проверки после выполнения других условий.

Файлы:
testacr.zip  217 kb
 
Странно, что с момента начала этой темы не было ни одного комментария от первоначального плаката. Он вообще следит за этим?
 
FMIC:
  • Во время первых 73607 итераций (которые длились примерно 516 мс) "ArrayCopyRates" всегда возвращал значение -1 и выдавал ошибку 4073 (Error 4073 - No history data). Во время этих итераций размер массива всегда был равен 0.
  • Наконец, на 73608-й итерации он вернул счет 512, и размер массива также был установлен на 512, а время для 0-го элемента имело действительное время (а не 0), и никаких ошибок не возникало.
Это прямо противоположное поведение, чем в версии до сборки 600.
Это то, чего я изначально ожидал, но оказалось, что я ошибался.
Наконец-то они сделали все правильно, и я приму это к сведению на будущее.
 
FMIC:


EDIT: Если бы я использовал только тест "pair[0].time == 0", он бы выдал ошибку индекса массива (и привел бы к остановке выполнения) во время первых итераций первого запуска, когда не было данных. Поэтому я остаюсь при своем мнении, что необходимо проверять код возврата и размер массива, но согласен, что тест времени может предложить последующий уровень проверки после выполнения других условий.


Все это очень полезно, спасибо за исследование и результаты.

 
FMIC:
Странно, что с момента начала этой темы не было ни одного комментария от первоначального автора. Он вообще следит за этим?

Почему он/она должен следить за этим сообщением, последующие сообщения вышли далеко за пределы уровня понимания большинства людей на этом форуме.

Как насчет того, чтобы попытаться просто ответить на вопрос простым и точным образом!

Теперь, чтобы ответить на первоначальный вопрос, на всякий случай, если есть небольшой шанс, что автор сообщения все еще здесь, Google - ваш друг.

 
4x_Gypsy:

Как насчет того, чтобы попытаться просто и точно ответить на вопрос!

Мы ответили на вопрос, который по сути был следующим:"Я хочу выбрать от 1 до 10 различных валют и 5 баров для каждой валюты."

Поскольку он не предоставил ни примера кода, ни более подробной информации, мы не смогли дать простой и точный ответ. Все, что мы могли сделать, это дать общие ответы и понять, с какими проблемами он может столкнуться. Мы ответили, что ему следует использовать"ArrayCopyRates()" или использовать"iFunctions()", и что ему нужно будет следить за присущей задержкой и ошибками, которые он, очевидно, получит. Затем мы дополнили информацию, обсудив подводные камни и проблемы, такие как отсутствие функции sleep в индикаторах и различное поведение между сборками до 600 и после.

Если вы говорите, что все это было ему не по зубам, все, что ему нужно было сделать, это написать что-то вроде: "Извините, я не понимаю! Не могли бы вы упростить это для меня!". Но поскольку такого сообщения (или любого другого, если уж на то пошло) так и не было, дискуссия продолжалась в уверенности, что он и другие были в состоянии следовать ей.

Теперь, как вы написали, он может воспользоваться Google и найти множество индикаторов с несколькими временными рамками, но если он не знает, КАК это работает, он не сможет далеко продвинуться в том, чтобы заставить свой индикатор работать так, как он хочет.

EDIT: PS! NB! Подумав об этом еще раз, WHRoeder действительно предоставил скелетный код в качестве решения проблемы. Нельзя добиться большей простоты и точности, чем это, учитывая отсутствие деталей в исходном вопросе.

 
FMIC:

Мы ответили на вопрос, суть которого заключалась в следующем:"Я хочу выбрать от 1 до 10 различных валют и 5 баров для каждой валюты."

Поскольку он не предоставил ни примера кода, ни более подробной информации, мы не смогли дать простой и точный ответ. Все, что мы могли сделать, это дать общие ответы и понять, с какими проблемами он может столкнуться. Мы ответили, что ему следует использовать"ArrayCopyRates()" или использовать"iFunctions()", и что ему нужно будет следить за присущей задержкой и ошибками, которые он, очевидно, получит. Затем мы дополнили информацию, обсудив подводные камни и проблемы, такие как отсутствие функции сна в индикаторах и различное поведение между сборками до 600 и после.

Если вы скажете, что все это было ему не по зубам, все, что ему нужно было сделать, это написать что-то вроде: "Извините, я не понимаю! Вы можете упростить это для меня!". Но поскольку такого сообщения (или любого другого, если уж на то пошло) не было, дискуссия продолжалась в уверенности, что он и другие были в состоянии следовать ей.

Теперь, как вы написали, он может воспользоваться Google и найти там множество индикаторов с несколькими временными рамками, но если он все еще не знает, КАК это работает, он не сможет далеко продвинуться в том, чтобы заставить свой индикатор работать так, как он хочет.

EDIT: PS! NB! Подумав об этом еще раз, WHRoeder действительно предоставил скелетный код в качестве решения проблемы. Вы не можете быть более простым и точным, чем это, учитывая отсутствие деталей в исходном вопросе.

Вопрос звучал так: "Кто-нибудь знает, как разработать мультивалютный индикатор?".

Очевидным ответом было "Да, мы (FMIC и WHRoeder) знаем, просто посмотрите, как мы это обсуждаем", не спрашивая и не ожидая подробностей о том, что на самом деле нужно ОП.

Что он/она хотел сделать с этим индикатором: "Я хочу выбрать от 1 до 10 различных валют и 5 баров для каждой валюты."

Да, примеры были предоставлены. Но они были предоставлены скорее как соревнование между вами двумя. Интересная дискуссия? Да. Я узнал кое-что, чего не знал. Был ли пример предоставлен таким образом, чтобы новичок мог понять? Не очень. Люди приходят на этот форум из-за отсутствия помощи и обучающих материалов от MetaTrader. Большинство людей, которые здесь пишут, имеют минимальное представление о том, что они хотят сделать, и когда обсуждение заходит слишком далеко от их понимания, они уходят. Что является абсолютным позором.

Большой подсказкой было "Но я не знаю, как это сделать".

Отсутствие какого-либо ответа от ОП является признаком того, что что-то не так. Я предполагаю, что ОП разочаровался из-за отсутствия понимания и забросил тему. Было время много лет назад, когда я делал то же самое. Я узнал больше на разных сайтах/форумах, чем на этом, потому что никто не тратил время на то, чтобы понять, насколько я новичок, и постоянно приводил примеры и вел дискуссии, которые были совершенно выше моего понимания в то время.

Но все это больше не имеет значения, так как ОП исчез.

И снова это позор, кто знает, может быть этот человек станет следующим гуру, в котором так нуждается этот и другие форумы.

 
4x_Gypsy:

Большой подсказкой было "Но я не знаю, как это сделать".

Отсутствие какого-либо ответа от ОП является признаком того, что что-то не так. Мое "предположение" заключается в том, что ОП разочаровался из-за отсутствия понимания и забросил тему. Было время много лет назад, когда я делал то же самое. Я узнал больше на разных сайтах/форумах, чем на этом, потому что никто не тратил время на то, чтобы понять, насколько я новичок, и постоянно приводил примеры и вел дискуссии, которые были совершенно выше моего понимания в то время.

С вашей точки зрения вы, возможно, правы, с другой стороны, я видел много вопросов, на которые просто давались ответы, если рискнуть заглянуть в документацию, и я действительно чувствую себя дураком, отвечая на такие вопросы снова и снова.

Кроме того, здесь есть Google и возможность поиска. Если я не знаю, как что-то сделать, это будет моим следующим шагом в попытке решить проблему самостоятельно.

Теперь к теме этой темы: "...как разработать мультивалютную систему". Это звучит для меня как "научи меня кодировать бесплатно", что довольно близко к "можешь ли ты закодировать это для меня". Все это не совсем серьезно.

Поскольку существует так много кода, доступного бесплатно, мой ответ на это был бы таким: "Используйте google или поиск здесь, чтобы найти бесплатный код и измените его!".

Если люди обижаются на это, я думаю, это их проблема.

Причина обращения: