Однократный расчет массива при оптимизации - страница 7

 
forexman77:

Попробовал объявить массив на глобальном уровне (код mql4)

 в ините заполнить его

 при распринтовке в старте выводит дату 1971 года, то есть массив пустой

 Если заполнять массив в старте, то значения появляются. Может причина, в том , что массив по новой инициализирую datetaime, но без него не компилируется код?

Вообщем массив пропадает. Что делаю не правильно? 

Вот придумал, если кому тоже понадобится. Копировал один массив в другой.

datetime T_[];//на глобальном уровне
//////////////////////////////////////////////////////////////////
int init()
  {
   ArraySetAsSeries(T_,true);
   massiv();

   return(0);
  }
/////////////////////////////////////////////////////////////////
int start()
  {
   if(ArraySize(T_)==0)
   massiv();

  return(0);  
  }
////////////////////////////////////////////////////////////////
void massiv()
  {
   datetime T[40]=
   {
   1262731020,1262735700,1262821920,1262903400,1262989740,1263247200,1263339060,1263420000,1263507480,1263595500,
   1265324700,1265407200,1265752980,1265926500,1265930820,1267657200,1267740300,1267826460,1268175840,1268346360,
   1270504920,1270684140,1270768500,1272924180,1273011720,1273097100,1273272240,1273528800,1273617180,1275344100,
   1275516000,1275602400,1275689160,1276034400,1276124580,1276208700,1276211640,1278027960,1278369780,1278373920
   };
   ArraySetAsSeries(T,true);
   ArrayInitialize(T_,0);
   ArrayResize(T_,40);
   ArrayCopy(T_,T,0,0,WHOLE_ARRAY);
   ArrayFree(T);
  }
 
forexman77:

Вот придумал, если кому тоже понадобится. Копировал один массив в другой.

А для чего это?

Изначально вопрос стоял так, чтобы при последующих итерациях оптимизации массив не рассчитывался заново. А теперь он просто заполняется и копируется в другой. Проку от этого не будет. Я так понимаю, что этот массив Т[40] так представлен только для наглядности, а на самом деле должен считаться и заполняться последовательно. При каждом следующем запуске оптимизации этот массив будет заново пересчитываться как и раньше, разница лишь в том что организовано всё по-другому.

 
Alexey Viktorov:

А для чего это?

Изначально вопрос стоял так, чтобы при последующих итерациях оптимизации массив не рассчитывался заново. А теперь он просто заполняется и копируется в другой. Проку от этого не будет. Я так понимаю, что этот массив Т[40] так представлен только для наглядности, а на самом деле должен считаться и заполняться последовательно. При каждом следующем запуске оптимизации этот массив будет заново пересчитываться как и раньше, разница лишь в том что организовано всё по-другому.

Объявляемый фигурными скобками массив не сохранялся, его не получалось объявить на глобальном уровне с последующем заполнением в ините(массив внутри одного прогона не сохранялся).

Между итерациями оптимизации, как я понял массив не сохраняется, то есть программа сбрасывает все, что было.

 
forexman77:

Объявляемый фигурными скобками массив не сохранялся, его не получалось объявить на глобальном уровне с последующем заполнением в ините(массив внутри одного прогона не сохранялся).

Между итерациями оптимизации, как я понял массив не сохраняется, то есть программа сбрасывает все, что было.

Так и в цикле заполнить не долго будет. Другой вопрос если вычисление элементов массива занимает длительное время... Так в этом случае это тебя не спасёт, пересчёт элементов массива будет по-прежнему на каждой итерации. А если массив заполняется так, то и на глобальном уровне можно перечислить все элементы в фигурных скобках. что-то я не понимаю смысла этого колдовства...
 
Alexey Viktorov:
 А если массив заполняется так, то и на глобальном уровне можно перечислить все элементы в фигурных скобках. что-то я не понимаю смысла этого колдовства...
Можно и на глобальном. Но, мне не понравилось наверху там башню из несколько тысяч элементов городить)
 
forexman77:
Можно и на глобальном. Но, мне не понравилось наверху там башню из несколько тысяч элементов городить)

Ну слава Богу что всё получилось в соответствии с хотелкой.

А скорость-то увеличилась?

 
Alexey Viktorov:

Ну слава Богу что всё получилось в соответствии с хотелкой.

А скорость-то увеличилась?

Быстрее получается.
 

Тему новую создавать не стал.

Сейчас пробую сделать следующее: есть массив первое значение дата, второе и третье числа double. Нужно отсортировать массив по значениям даты, но чтобы второе и третье значение были привязаны к дате.

Потом планирую слепить из нескольких массивов один и отсортировать их по дате. 

Пробовал сделать так, но на сколько понимаю сортировка идет по индексу массива, то есть по i.

double m[215][3];
m[i][0]=Data;
m[i][1]=f1;
m[i][2]=f2;
 
forexman77:

Тему новую создавать не стал.

Сейчас пробую сделать следующее: есть массив первое значение дата, второе и третье числа double. Нужно отсортировать массив по значениям даты, но чтобы второе и третье значение были привязаны к дате.

...

Вот здесь посмотрите: https://www.mql5.com/ru/forum/42036
Сортировка двухмерного массива.
Сортировка двухмерного массива.
  • www.mql5.com
Форум трейдеров MQL5.community
 
Anatoli Kazharski:
Вот здесь посмотрите: https://www.mql5.com/ru/forum/42036

Там в основном все на классах, которые для меня темный лес. Но, кое-какие мысли пришли. Сделать массив с датами и числами по отдельности. Только, как получить номер индекса на котором находятся даты после сортировки, то есть получить i, который во втором измерении?

datetime m[215][1];
double d[215][2];

m[0][i]=Dat_DtTm;
d[i][0]=f1;
d[i][1]=f2;
Причина обращения: