Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Rosh:
Давайте по частям. Функция CopyBuffer(), третий вариант с датой начала и датой конца:
Тут никак не подходит Ваше описание, У Вас ошибка в передаче параметров.
Не второй и третий, а третий и четвертый. Да и не важно, тот который с меньшим числом это первый параметр, а тот, который с большим - второй, из параметров определяющих копируемый диапазон.
Здесь это демонстрируется - https://www.mql5.com/ru/forum/3854/page3#comment_67702.
Если поменять TimeCurrent() и st местами, то обе функции работают, но тогда несоответствие со справкой.
Не второй и третий, а третий и четвертый. Да и не важно, тот который с меньшим числом это первый параметр, а тот, который с большим - второй, из параметров определяющих копируемый диапазон.
Здесь это демонстрируется - https://www.mql5.com/ru/forum/3854/page3#comment_67702.
Если поменять TimeCurrent() и st местами, то обе функции работают, но тогда несоответствие со справкой.
Да появляется там эта самая ошибка №2. Причем довольно часто.
Даже если бы не появлялась совсем, то это не означает что вазвращается то что нужно или то что внутри функции отсутствует ЗАЩИТА (кем-то предусмотрительно туда воткнутая).
Проверить что и как возвращается ведь можно только проверив начнику буфера. Верно? А в примере есть проверка только на -1 (что не очень показательно на мой взгляд).
Да появляется там эта самая ошибка №2. Причем довольно часто.
Даже если бы не появлялась совсем, то это не означает что вазвращается то что нужно или то что внутри функции отсутствует ЗАЩИТА (кем-то предусмотрительно туда воткнутая).
Проверить что и как возвращается ведь можно только проверив начнику буфера. Верно? А в примере есть проверка только на -1 (что не очень показательно на мой взгляд).
Будьте джентельменом, поверьте наслово - с содержимым буфера все нормально. Честное слово, оно уже давно сдано в эусплуатацию, работает, замечаний нет. А тут вот пользуясь случаем... поведал об особенностях работы функций Copy.
Будьте джентельменом, поверьте наслово - с содержимым буфера все нормально.
Вам видней, мне не очень хочется по косточкам там анатомию разбирать и содержание буферов.
Одно могу сказать что если стартовая дата меньше то все и везде работает на ура. Если обратное указано то "Ошибка 2" в оригинальном примере сейчас не появляется (что странно, поскольку раньше была).
Даже если предположить, что разница действительно есть (а я своим глазам пока верю) - Думается мне что там в третьем варианте либо проверка стоит либо он обрабатывается не как 3-й вариант.
PS
КопиБуфер могли писать отдельно (или поздней), что объяснит скажем защиты на корректность дат. Что касается всех остальных CopyXXX могли быстренько по шаблону сделать (совсем не думая что кто-то будет без проверки даты туда отсылать)...
Если бы в скопированном буфере что-то было неправильно, это было бы сразу видно, эти данные потом отображаются на графике, можно сравнить с копируемым индикатором.
Если бы в скопированном буфере что-то было неправильно, это было бы сразу видно, эти данные потом отображаются на графике, можно сравнить с копируемым индикатором.
Если внутри CopyBuffer стоит проверка переворачивающие даты, то разницу в результате можно и не почувствовать.
К примеру - Хотим мы получить данные с 1970 по 2011 (будем считать что это правильно). Так вернется буфер с этими данными,как и предполагали разработчики.
А если передадим с 2011 по 1970 функция перевернет даты и конечный результат не пострадает.
PS
Другое дело если мы хотим получить определенное количество баров от конкретной даты, скажем укажите начало текущей датой и попросите вернуть 100-200 баров.
Integer:
Если поменять TimeCurrent() и st местами, то обе функции работают, но тогда несоответствие со справкой.
Со справкой там полное соответствие, только нужен переводчик с клингонского :)
Верней к этому разделу справки нужна либо еще одна справка, либо статья, объясняющие что там было задумано разработчиками...
Для большего понимания что происходит нужно обратиться к общему разделу по работе с таймсериями и индюками.
Для нас будут интересны две вещи, приведенный текст и картинка
1. Функции для работы с таймсериями и индикаторами. Таймсерия отличается от обычного массива тем, что индексация элементов таймсерии производится от конца массива к началу (от самых свежих данных к самым старым). Для копирования значений таймсерий и индикаторов рекомендуется использовать только динамические массивы, так как функции копирования самостоятельно распределяют необходимый размер массивов-приемников значений.
2. При использовании функций доступа к таймсериям и значениям индикаторов необходимо учитывать направление индексации, это подробно описано в разделе Направление индексации в массивах и таймсериях.
3. Исторически сложилось так, что доступ к данным в ценовом массиве производился с конца данных. Физически новые данные всегда дописываются в конец массива, но индекс этого массива всегда равен нулю. Индекс 0 в массиве-таймсерии означает данные текущего бара, то есть бара, который соответствует незавершенному промежутку времени на данном таймфрейме.
PS
Уже который раз разработчикам намекаю об отсутствии перекрестных ссылок и нормальных примеров (тем более к таким хитрым разделам справки).
1.1 В CopyBuffer() второй параметр TimeCurrent(), третий переменная datetime со значением 0 - работает.
2.1 В CopyBuffer() второй параметр переменная datetime со значением 0, трейтий параметр параметр TimeCurrent() - работает.
Не воспроизводится, выдает ошибку 4003. Проверьте сами этот индикатор:
Результат:
Не воспроизводится, выдает ошибку 4003. Проверьте сами этот индикатор:
Результат:
В первом случае выполняется вызов по второму типу - указывается ноль копируемых элементов, наверно поэтому ошибка.
Надо так же, как и втором случае, указать, что 0 это время, а не количество:
Если указать, что это время, то оба варианта работают, но только у CopyBuffer().