Помогите новичку скопировать данные одного массива в другой.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Serzh_2018
38
Serzh_2018  

Помогите разобраться как скопировать данные одного массива в другой. Что не делаю не чего не помогает. В индикаторе производятся расчеты которые сохраняются в массивах Max_0 и Min_0. Требуется данные из этих массивов передать в массивы Max_1 и Min_1 соответственно. Привожу полный код индикатора:

//+-----------------------------------------------------------------+
//|                                                Trend Levels.mq5 |
//|                                                           Serzh |
//+-----------------------------------------------------------------+
#property copyright "Serzh"
#property version   "1.00" 
//--- Входные параметры 
#property indicator_chart_window            // Индикатор отображается в окне графика
#property indicator_buffers 2               // К-во индикаторных буферов
#property indicator_plots   2               // К-во индикаторных массивов
//--- Инициализация индикаторных буферов
#property indicator_label1  "Maximum_1"     // Название индикаторного буфера
#property indicator_type1   DRAW_ARROW      // Тип линии индикатора
#property indicator_color1  clrDarkGreen    // Цвет линии индикатора
#property indicator_width1  2               // Толщина линии индикатора

#property indicator_label2  "Minimum_1"     // Название индикаторного буфера
#property indicator_type2   DRAW_ARROW      // Тип линии индикатора
#property indicator_color2  clrCrimson      // Цвет линии индикатора
#property indicator_width2  2               // Толщина линии индикатора
//--- Инициализация индикаторных массивов 
double Max_0[],Min_0[],Max_1[],Min_1[];      // Индикаторные массивы
//--- Объявление переменных
int imax_0=0,imin_0=0,imax_1=0,imin_1=0;     // Инициализаторы массивов

int TotalMax_0=0, TotalMin_0=0;              // Всего баров в нулевых массивах
int TotalMax_1=0, TotalMin_1=0;              // Всего баров в массивах 1-го уровня

int CopyMax_1,CopyMin_1;                     // К-во скопированых баров
//+-----------------------------------------------------------------+
//| Функция обработки события OnInit                                |
//+-----------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(_Period);                            // Установка Таймера

   SetIndexBuffer(0,Max_1,INDICATOR_DATA);            // Присвоение индикаторного массива буферу
   SetIndexBuffer(1,Min_1,INDICATOR_DATA);            // Присвоение индикаторного массива буферу

   PlotIndexSetInteger(0,PLOT_ARROW,159);             // Установка кода символа для PLOT_ARROW
   PlotIndexSetInteger(1,PLOT_ARROW,159);             // Установка кода символа для PLOT_ARROW

   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,-10);       // Установка сдвига символа в пикселях
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,10);        // Установка сдвига символа в пикселях

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);          // Установка пустого значения
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);          // Установка пустого значения

   return(INIT_SUCCEEDED);
  }
//+-----------------------------------------------------------------+
//| Функция обработки события OnCalculate                           |
//+-----------------------------------------------------------------+
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[])                  // Спред
  {
//--- Объявление переменных
   int i0;                                              // Индексы
   int Step_0;                                          // Шаги циклов
//--- Расчет 0-го уровня индикатора
   if(prev_calculated<4) Step_0=1;                                              // Если расчетов еще небыло Step=1
   else Step_0=rates_total-3;                                                   // Если расчеты уже были Step=rates_total-3

   for(i0=Step_0;i0<rates_total-2;i0++) // Цикл для расчетов
     {
      if(high[i0+1]<high[i0] &&  high[i0]>=high[i0-1]) Max_0[i0]=high[i0];        // Присвоение значения массиву Max_0
      else Max_0[i0]=0;                                                           // Присвоение 0 значения массиву

      if(low[i0+1]>low[i0] && low[i0]<=low[i0-1]) Min_0[i0]=low[i0];         // Присвоение значения массиву Min_0
      else Min_0[i0]=0;                                                           // Присвоение 0 значения массиву
      //--- Расчет 1-го уровня индикатора 
      if(prev_calculated>0)
        {
         TotalMax_0=ArrayRange(Max_0,imax_0);                // Всего баров в массиве Max_0
         TotalMin_0=ArrayRange(Min_0,imin_0);                // Всего баров в массиве Min_0

         TotalMax_1=ArrayRange(Max_1,imax_1);                // Всего баров в массиве Max_1
         TotalMin_1=ArrayRange(Min_1,imin_1);                // Всего баров в массиве Min_1
        }
      //--- Расчет 1-го уровня индикатора (максимумы)

      if(TotalMax_0>TotalMax_1) CopyMax_1=ArrayCopy(Max_1,Max_0,0,0,WHOLE_ARRAY);      // Копирование массива Max_0 в массив Max_1
      if(TotalMin_0>TotalMin_1) CopyMin_1=ArrayCopy(Min_1,Min_0,0,0,WHOLE_ARRAY);      // Копирование массива Min_0 в массив Min_1
      //--- Расчет 1-го уровня индикатора (минимумы)
     }
   return(rates_total);
  }
//+-----------------------------------------------------------------+
//| Функция обработки события Таймер                                |
//+-----------------------------------------------------------------+
void OnTimer(){}
//+------------------------------------------------------------------+
//| Функция обработки события OnDeinit                               |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();                                                 // Удаление Таймера
   Print(__FUNCTION__,"_Код причины деинициализации = ",reason);     // Причина деинициализации
  }
//+------------------------------------------------------------------+
Файлы:
Vladimir Karputov
Модератор
183485
Vladimir Karputov  
Serzh_2018:

Помогите разобраться как скопировать данные одного массива в другой. Что не делаю не чего не помогает. В индикаторе производятся расчеты которые сохраняются в массивах Max_0 и Min_0. Требуется данные из этих массивов передать в массивы Max_1 и Min_1 соответственно. Привожу полный код индикатора:

Пожалуйста вставляйте код правильно: пользуйтесь кнопкой

Также не забудьте прикрепить файл к сообщению - так удобнее и быстрее можно ознакомиться с Вашим кодом

Vladimir Karputov
Модератор
183485
Vladimir Karputov  

Если Вы работаете с четырьмя массивами

//--- Инициализация индикаторных массивов 
double Max_0[],Min_0[],Max_1[],Min_1[];      // Индикаторные массивы

то нужно и объявлять четыре массива:

#property indicator_buffers 4               // К-во индикаторных буферов

и так как два из них индикаторные, а два для вспомогательных расчётов, то нужно в OnInit() эти расчётные массивы также объявить (при помощи INDICATOR_CALCULATIONS) как вспомогательные.

Serzh_2018
38
Serzh_2018  
Большое спасибо за помощь!
Vladimir Karputov
Модератор
183485
Vladimir Karputov  
Serzh_2018:
Большое спасибо за помощь!

Заработало, что ли :) ?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий