Как работают функции CopyXXXX в индикаторе и в советнике

 

Часто при использовании в индикаторах и в советниках возникают вопросы по использования функций CopyXXXX. Например такие вопросы:

  1. В индикаторе результаты CopyTime зависят от флага AS_SERIES у массива time[]?
  2. Что возвращает CopyTime в советнике и в индикаторе, если взять все доступные исторические данные времени открытия баров для указанной пары символ-период?
  3. А если запросить только часть данных?
Итак, индикатор. 

Сначала делаем из массива time[] не таймсерию, при этом бар  индексом "0" равен 2016.03.17 18:00:00 - если смотреть на график инструмента - то это самая крайняя дата слева графика:

Индикатор. time[] - не таймсерия

2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        time[] is not series
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        запрашиваем от элемента в позиции "0", количество равное "rates_total"
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        CopyTime(SBRF-12.16,1,0,11707,arr_copy):
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        rates_total: 11707, time[0]: 2016.03.17 18:00:00, time[11706]: 2016.09.15 14:33:00
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        result: 11707, arr_copy[0]: 2016.03.17 18:00:00, arr_copy[11706]: 2016.09.15 14:33:00
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        запрашиваем от элемента в позиции "rates_total/2", количество равное "rates_total/2"
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        CopyTime(SBRF-12.16,1,5853,5853,arr_copy):
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        result: 5853, arr_copy[0]: 2016.03.17 18:02:00, arr_copy[5852]: 2016.09.01 10:17:00
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        запрашиваем от элемента в позиции "0", количество равное "rates_total/2"
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        CopyTime(SBRF-12.16,1,0,5853,arr_copy):
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        result: 5853, arr_copy[0]: 2016.09.01 10:18:00, arr_copy[5852]: 2016.09.15 14:33:00

а теперь сделаем из массива time[] таймсерию, при этом бар  индексом "0" равен 2016.09.15 14:33:00 - если смотреть на график инструмента - то это самый правый бар графика

Индикатор. time[] - таймсерия

и повторим те же запросы исторических данных:

2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        time[] is series
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        запрашиваем от элемента в позиции "0", количество равное "rates_total"
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        CopyTime(SBRF-12.16,1,0,11707,arr_copy):
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        rates_total: 11707, time[0]: 2016.09.15 14:33:00, time[11706]: 2016.03.17 18:00:00
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        result: 11707, arr_copy[0]: 2016.03.17 18:00:00, arr_copy[11706]: 2016.09.15 14:33:00
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        запрашиваем от элемента в позиции "rates_total/2", количество равное "rates_total/2"
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        CopyTime(SBRF-12.16,1,5853,5853,arr_copy):
2016.09.15 14:33:08.156 CopyTime (SBRF-12.16,M1)        result: 5853, arr_copy[0]: 2016.03.17 18:02:00, arr_copy[5852]: 2016.09.01 10:17:00
2016.09.15 14:33:08.157 CopyTime (SBRF-12.16,M1)        
2016.09.15 14:33:08.157 CopyTime (SBRF-12.16,M1)        запрашиваем от элемента в позиции "0", количество равное "rates_total/2"
2016.09.15 14:33:08.157 CopyTime (SBRF-12.16,M1)        CopyTime(SBRF-12.16,1,0,5853,arr_copy):
2016.09.15 14:33:08.157 CopyTime (SBRF-12.16,M1)        result: 5853, arr_copy[0]: 2016.09.01 10:18:00, arr_copy[5852]: 2016.09.15 14:33:00

...

Файлы:
CopyTime.mq5  6 kb
 

А теперь пример работы советника с функцией CopyTime (здесь переменная "rates_total" равна количеству баров в истории по данному инструменту и для данного периода):

2016.09.23 10:00:00   запрашиваем от элемента в позиции "0", количество равное "rates_total"
2016.09.23 10:00:00   CopyTime(SBRF-12.16,1,0,16264,arr_copy):
2016.09.23 10:00:00   rates_total: 16264
2016.09.23 10:00:00   result: 16264, arr_copy[0]: 2016.03.17 18:00:00, arr_copy[16263]: 2016.09.22 23:49:00
2016.09.23 10:00:00   
2016.09.23 10:00:00   запрашиваем от элемента в позиции "rates_total/2", количество равное "rates_total/2"
2016.09.23 10:00:00   CopyTime(SBRF-12.16,1,8132,8132,arr_copy):
2016.09.23 10:00:00   result: 8132, arr_copy[0]: 2016.03.17 18:00:00, arr_copy[8131]: 2016.09.08 12:10:00
2016.09.23 10:00:00   
2016.09.23 10:00:00   запрашиваем от элемента в позиции "0", количество равное "rates_total/2"
2016.09.23 10:00:00   CopyTime(SBRF-12.16,1,0,8132,arr_copy):
2016.09.23 10:00:00   result: 8132, arr_copy[0]: 2016.09.08 12:11:00, arr_copy[8131]: 2016.09.22 23:49:00
2016.09.23 10:00:00   

 

То есть работа советника с функциями CopyXXXX идентична работе индикатора с функциями CopyXXXX, когда в индикаторе копируемый массив не является серией.

Файлы:
Причина обращения: