Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Третий вариант от даты до даты, st объявлена как datetime.
Тогда даты перепутаны, нужно так - Поскольку явно начальная дата не может быть текущая, а конечная в 1970 году!
PS
При третьем варианте вызова первым параметром в датах идет начальная дата, меньшая по значению (обратите внимание на справку).
По этому st (которая 0 - начальная дата), при этом нужно перед копирование в буфер проверить даты на корректность. К примеру по ">/<"
Тогда даты перепутаны, нужно так - Поскольку явно начальная дата не может быть текущая, а конечная в 1970 году!
PS
При третьем варианте вызова первым параметром в датах идет начальная дата, меньшая по значению (обратите внимание на справку).
По этому st (которая 0 - начальная дата), при этом нужно перед копирование в буфер проверить даты на корректность. К примеру по ">/<"
Это вопрос интересный, перепутано или нет. Во-первых CopyBuffer() работает с "перепутаными" датами. Налицо нессоответствие в работе функций CopyBuffer() и остальных Copy... Во вторых, первый параметр, определяющий диапазон, определяет начальную точку. Копируются данные расположенные левее начальной точки. Если первая дата меньше второй, значит копируются данные расположенные правее начальной точки - как-то несоответственно.
При третьем варианте вызова первым параметром в датах идет начальная дата, меньшая по значению (обратите внимание на справку).
На какое место справки надо обратить внимание, если в справке на картинке показана стартовая точка?
Это вопрос интересный, перепутано или нет. Во-первых CopyBuffer() работает с "перепутаными" датами. Налицо нессоответствие в работе функций CopyBuffer() и остальных Copy... Во вторых, первый параметр, определяющий диапазон, определяет начальную точку. Копируются данные расположенные левее начальной точки. Если первая дата меньше второй, значит копируются данные расположенные правее начальной точки - как-то несоответственно.
А левее или правей науке неизвестно (серийность то буфера как я понимаю точно никто не указывал). А автоматом она не додумала что и как эксперт требует.
если вести речь о том что внутри функции разработчики должны вставить проверку, то да - в сервис деск.
Хотя тут скорей всего просто будет переворот дат (что программер и сам может прекрасно на стадии чека).
На счет индивидуальности CopyBuffer() то и она на тестах ошибку выдавала (хотя реже чем КопиТайм). Да и если бы не выдавала не известно содержит она или нет внутри себя контроль ОТ ДУРАКА (уж извиняйте за сленг).
PS
Кроме того, даже если CopyBuffer() и возвращала бы результат при таком подходе без ошибок кто проверял что там данные копировались с права -> лево, а не как положено (прямое указания на серийность для конечных буферов я в коде не припомню)?
1. А левее или правей науке неизвестно (серийность то буфера как я понимаю точно никто не указывал). А автоматом она не додумала что и как эксперт требует.
2. если вести речь о том что внутри функции разработчики должны вставить проверку, то да - в сервис деск.
3. Хотя тут скорей всего просто будет переворот дат (что программер и сам может прекрасно на стадии чека).
4. На счет индивидуальности CopyBuffer() то и она на тестах ошибку выдавала (хотя реже чем КопиТайм). Да и если бы не выдавала не известно содержит она или нет внутри себя контроль ОТ ДУРАКА (уж извиняйте за сленг).
PS
5. Кроме того, даже если CopyBuffer() и возвращала бы результат при таком подходе без ошибок кто проверял что там данные копировались с права -> лево, а не как положено (прямое указания на серийность для конечных буферов я в коде не припомню)?
1. Причем тут серийность? Каким боком она относится к этому вопросу? К тому же, как видим, CopyBuffer() сама "додумывает". От сейрийности буфера зависит в каком порядке данные будут располагаться в буфере, а не то, какие даные будут копироваться.
2. Как минимум должно быть соответствие в работе CopyBuffer() и всех остальных Copy...
3. Так и будем жить нараскаряку? Глядя на работу CopyBuffer() и на справку, как-то не уверен в возможности сделать однозначный вывод, чтоже правильно. Подстраиваться под баги... тоже вариант... подстроился - функции Copy... не используются вообще, используется индикатор с ценами.
4. Как видим есть у CopyBuffer(), толькто что правильно а что неправилно пока как-то не очень известно.
5. См. п.1.
На какое место справки надо обратить внимание, если в справке на картинке показана стартовая точка?
1.Не смотрите на картинку, насколько я помню дефаултное направление буферов менялось.
Попробуйте вызвать эту функцию без указания серийности конечного буфера (у Вас в эксперте этого нет как я помню).
Вернется массив где 0 значением будет самая древняя дата. таким образом без всяких указаний на серийность копируем с лева на права (как бы в справку изменения забыли внести соответствующие).
2. В описании третьего варианта четко указано - первая дата стартовая. По логике вещей всегда меньше (об обратном в справке ни слова!).
1.Не смотрите на картинку, насколько я помню дефаултное направление буферов менялось.
Попробуйте вызвать эту функцию без указания серийности конечного буфера (у Вас в эксперте этого нет как я помню).
Вернется массив где 0 значением будет самая древняя дата. таким образом без всяких указаний на серийность копируем с лева на права (как бы в справку изменения забыли внести соответствующие).
2. В описании третьего варианта четко указано - первая дата стартовая. По логике вещей всегда меньше (об обратном в справке ни слова!).
1. А куда смотреть, на потолок или в окно?
Сериность буфера, ну причем тут серийность буфера?
2. Тогда по "логике вещей" в первом и втором варианте стартовый бар должен быть слева, а не справа как нарисовано. Определен контекст, потому "логика вещей" отменяется, а следует руководствоваться логикой определенной в контексте - стартовая дата, это дата от которой начинается отсчет, вторая дата определяет количество копируемых элементов, в данном случае левый край на графике. Еще раз напомню, о несоответствии в работе CopyBuffer и остальных Copy...
В чем заключается несоответствие? В документации все правильно сказано и рисунок верно описывает процесс копирования данных из индикаторного буфера в массив.
CopyBuffer() :
Получает в массив buffer данные указанного буфера указанного индикатора в указанном количестве.
Отсчет элементов копируемых данных (индикаторный буфер с индексом buffer_num) от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар (значение индикатора для текущего бара).
При копировании заранее неизвестного количества данных в качестве массива-приемника buffer[] желательно использовать динамический массив, так как функция CopyBuffer() старается распределить размер принимающего массива под размер копируемых данных. Если в качестве принимающего массива buffer[] выступает индикаторный буфер (массив, предварительно назначенный под хранение значений индикатора функцией SetIndexBufer()), то допускается частичное копирование. Пример можно посмотреть в пользовательском индикаторе Awesome_Oscillator.mq5 из стандартной поставки терминала.
Если необходимо произвести частичное копирование значений индикатора в другой массив (не индикаторный буфер), то для этих целей необходимо использовать промежуточный массив, в который копируется требуемое количество. И уже из этого массива-посредника произвести поэлементное копирование нужного количества значений в нужные места принимающего массива.
Если необходимо копировать заранее известное количество данных, то лучше это делать в статически выделенный буфер, чтобы избежать излишнего перевыделения памяти.
Неважно, какое свойство имеет приемный массив - as_series=true или as_series=false, данные будут скопированы таким образом, что самый старый по времени элемент будет в начале физической памяти, отведенной под массив. Существует 3 варианта функции.
В чем заключается несоответствие? В документации все правильно сказано и рисунок верно описывает процесс копирования данных из индикаторного буфера в массив.
CopyBuffer() :
1.1 В CopyBuffer() второй параметр TimeCurrent(), третий переменная datetime со значением 0 - работает.
1.2 В CopyTime() второй параметр TimeCurrent(), третий переменная datetime со значением 0 - не работает.
2.1 В CopyBuffer() второй параметр переменная datetime со значением 0, трейтий параметр параметр TimeCurrent() - работает.
2.2 В CopyTime() второй параметр переменная datetime со значением 0, трейтий параметр параметр TimeCurrent() - работает.
Насчет справки не писал, что неправильно, как раз по справке второй параметр определяет start_pose, копируются данные расположенные левее start_pos, значит при третьем варианте использования функий Copy значение втрого параметра должно быть меньше значения третьего параметра, значит правильными вариантами будут 1.2 и 2.2, однако 1.2 - не работает. Если же правильные варианты 1.2 и 2.2 - тогда несоответствие со справкой - копирование данных расположенных правее start_pos.
1.1 В CopyBuffer() второй параметр TimeCurrent(), третий переменная datetime со значением 0 - работает.
1.2 В CopyTime() второй параметр TimeCurrent(), третий переменная datetime со значением 0 - не работает.
Давайте по частям. Функция CopyBuffer(), третий вариант с датой начала и датой конца:
Обращение по начальной и конечной датам требуемого интервала времени
Тут никак не подходит Ваше описание, У Вас ошибка в передаче параметров.