Код?
Все-таки нужно видеть, как происходит вызов обоих вариантов. Ведь со временем там много нюансов. К примеру, время указывает в середину бара. Тогда данные этого бара не будут скопированы. При указании индексов такой проблемы нет.
Код?
Может будет вечером. Скорее утром.
Все-таки нужно видеть, как происходит вызов обоих вариантов. Ведь со временем там много нюансов. К примеру, время указывает в середину бара. Тогда данные этого бара не будут скопированы. При указании индексов такой проблемы нет.
Что видеть-то? если один метод пихает скопированное в начало массива, а второй метод пихает скопированное в конец массива.
Что видеть-то? если один метод пихает скопированное в начало массива, а второй метод пихает скопированное в конец массива.
Не факт. Данные в принципе разные. К тому же в первом варианте в начале массива есть подозрительные значения в виде "+0.00000". Это говорит о том, что там не ноль.
Может будет вечером. Скорее утром.
Что видеть-то? если один метод пихает скопированное в начало массива, а второй метод пихает скопированное в конец массива.
А индексация массивов не разная ли для 1го и 3го типов вызовов?
Может будет вечером. Скорее утром.
Что видеть-то? если один метод пихает скопированное в начало массива, а второй метод пихает скопированное в конец массива.
Владимир, ты же знаешь: код - это первое что у тебя спросят. Без него даже и говорить не будут
Владимир, ты же знаешь: код - это первое что у тебя спросят. Без него даже и говорить не будут
Знаю :)
Код.
ВНИМАНИЕ! Запускать на W1 или MN! Так как распечатываются индикаторные буферы ПОЛНОСТЬЮ!
//+------------------------------------------------------------------+ //| TestCopyBuffer_1_2_3.mq5 | //| Copyright © 2017, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2017, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.000" #property description "Тест функции CopyBuffer: вариант 1, вариант 2 и вариан 3" #property indicator_chart_window #property indicator_buffers 3 #property indicator_plots 0 //--- An indicator buffers for the plot double FractalsCopyBuffer_1[]; double FractalsCopyBuffer_2[]; double FractalsCopyBuffer_3[]; //--- Fractals handles int handle_iFractals; // variable for storing the handle of the iFractals indicator //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,FractalsCopyBuffer_1,INDICATOR_CALCULATIONS); SetIndexBuffer(1,FractalsCopyBuffer_2,INDICATOR_CALCULATIONS); SetIndexBuffer(2,FractalsCopyBuffer_3,INDICATOR_CALCULATIONS); //--- Set as an empty value PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE); //--- create handle of the indicator iFractals handle_iFractals=iFractals(Symbol(),Period()); //--- if the handle is not created if(handle_iFractals==INVALID_HANDLE) { //--- tell about the failure and output the error code PrintFormat("Failed to create handle of the iFractals indicator for the symbol %s/%s, error code %d", Symbol(), EnumToString(Period()), GetLastError()); //--- the indicator is stopped early return(INIT_FAILED); } //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { static long counter=0; if(counter!=0) return(rates_total); ArrayInitialize(FractalsCopyBuffer_1,0.0); ArrayInitialize(FractalsCopyBuffer_2,0.0); ArrayInitialize(FractalsCopyBuffer_3,0.0); counter++; //--- test CopyBuffer #1 /* Обращение по начальной позиции и количеству требуемых элементов int CopyBuffer( int indicator_handle, // handle индикатора int buffer_num, // номер буфера индикатора int start_pos, // откуда начнем int count, // сколько копируем double buffer[] // массив, куда будут скопированы данные ); */ int copy_1=CopyBuffer(handle_iFractals,1,0,10,FractalsCopyBuffer_1); Print("CopyBuffer #1:"); ArrayPrint(FractalsCopyBuffer_1); //--- test CopyBuffer #2 /* Обращение по начальной дате и количеству требуемых элементов int CopyBuffer( int indicator_handle, // handle индикатора int buffer_num, // номер буфера индикатора datetime start_time, // с какой даты int count, // сколько копируем double buffer[] // массив, куда будут скопированы данные ); */ int copy_2=CopyBuffer(handle_iFractals,1,time[rates_total-1],10,FractalsCopyBuffer_2); Print("CopyBuffer #2:"); ArrayPrint(FractalsCopyBuffer_2); //--- test CopyBuffer #3 /* Обращение по начальной и конечной датам требуемого интервала времени int CopyBuffer( int indicator_handle, // handle индикатора int buffer_num, // номер буфера индикатора datetime start_time, // с какой даты datetime stop_time, // по какую дату double buffer[] // массив, куда будут скопированы данные ); */ int copy_3=CopyBuffer(handle_iFractals,1,time[rates_total-1],time[rates_total-1-10],FractalsCopyBuffer_3); Print("CopyBuffer #3:"); ArrayPrint(FractalsCopyBuffer_3); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| Deinit | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+
ds
И результат:
AUDUSD,Weekly: testing of Indicators\MyInd\Copyxxxx\TestCopyBuffer_1_2_3.ex5 from 2017.06.06 00:00 to 2017.10.08 00:00 started 2017.06.06 00:00:00 CopyBuffer #1: 2017.06.06 00:00:00 [ 0] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 16] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 32] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 48] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 64] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 80] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 96] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [112] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2E+308 2E+308 2E+308 2E+308 2E+308 0.73285 2E+308 2E+308 2E+308 2E+308 2017.06.06 00:00:00 CopyBuffer #2: 2017.06.06 00:00:00 [ 0] 2E+308 2E+308 2E+308 2E+308 2E+308 0.73285 2E+308 2E+308 2E+308 2E+308 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 16] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 32] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 48] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 64] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 80] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 96] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [112] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 CopyBuffer #3: 2017.06.06 00:00:00 [ 0] 2E+308 2E+308 2E+308 2E+308 2E+308 2E+308 0.73285 2E+308 2E+308 2E+308 2E+308 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 16] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 32] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 48] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 64] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 80] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [ 96] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 2017.06.06 00:00:00 [112] 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000
ds
И результат:
ds
1. Вывести на печать все copy_N
2. Вывести самому без ArrayPrint() значения массивов
3. Вывести
time[rates_total-1]
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Ложная тревога. @o_o помог найти ошибку.
У CopyBuffer есть три варианта:
Обращение по начальной позиции и количеству требуемых элементов
int CopyBuffer(
int indicator_handle, // handle индикатора
int buffer_num, // номер буфера индикатора
int start_pos, // откуда начнем
int count, // сколько копируем
double buffer[] // массив, куда будут скопированы данные
);
Обращение по начальной дате и количеству требуемых элементов
int CopyBuffer(
int indicator_handle, // handle индикатора
int buffer_num, // номер буфера индикатора
datetime start_time, // с какой даты
int count, // сколько копируем
double buffer[] // массив, куда будут скопированы данные
);
Обращение по начальной и конечной датам требуемого интервала времени
int CopyBuffer(
int indicator_handle, // handle индикатора
int buffer_num, // номер буфера индикатора
datetime start_time, // с какой даты
datetime stop_time, // по какую дату
double buffer[] // массив, куда будут скопированы данные
);
Параметры
Массив из 128 элементов, копирование 10-ти элементов, но разными вариантами функции CopyBuffer:
Копирование при помощи 1-го варианта даёт такой результат:
Копирование при помощи 3-го варианта даёт такой результат:
Обратите внимание куда пишутся элементы при 1-м и при 3-м варианте.