массив двухмерный

 

есть двухмерный массив arr[3,2] . где хранятся "Символ" - "Дата открытия ордера"

можно выслать пример цикла, в котором перебираются значения массива и в случае отсутствия необходимого символа ,то надо увеличить  первую размерность массива на 1 , то есть уже arr[4,2] будет. и добавить значения символа и дату текущую. 

 
Yerkin Sagandykov:

есть двухмерный массив arr[3,2] . где хранятся "Символ" - "Дата открытия ордера"

можно выслать пример цикла, в котором перебираются значения массива и в случае отсутствия необходимого символа ,то надо увеличить  первую размерность массива на 1 , то есть уже arr[4,2] будет. и добавить значения символа и дату текущую. 

Массив должен быть динамический arr[][2]; Тогда можно будет увеличить размерность в первом измерении.

int  ArrayResize( 
   void&  array[],              // массив, переданный по ссылке 
   int    new_size,             // новый размер массива 
   int    reserve_size=0        // резервное значение размера (избыточное) 
   );
 
Yerkin Sagandykov:

есть двухмерный массив arr[3,2] . где хранятся "Символ" - "Дата открытия ордера"


"Символ" - строка;

"Дата открытия ордера" - дата.

Не может быть такого массива, где элементы разного типа! 

 
string ar[][2];

void OnStart(){


   toAr(ar,"EURUSD");
   toAr(ar,"EURUSD");   
   toAr(ar,"GBPUSD");   
   
   
   Alert("--");
   int r=ArrayRange(ar,0);
   for(int i=0;i<r;i++){
      Alert(ar[i][0]," ",ar[i][1]);
   }
   
  }

void toAr(string & a[][2],string s){
   int r=ArrayRange(a,0);
   for(int i=0;i<r;i++){
      if(a[i][0]==s)return;
   }
   ArrayResize(a,r+1);
   a[r][0]=s;
   a[r][1]=TimeToStr(TimeCurrent());
}
 
PapaYozh #:


"Символ" - строка;

"Дата открытия ордера" - дата.

Не может быть такого массива, где элементы разного типа! 

Человек может вложить свою обработку к примеру символы у него имеют порядковые номера и тогда это просто число. Так-же время можно записать в секундах, и это то-же просто число.
Хотя конечно в данном случае я бы использовал массив структуры.

struct ArrayStruct
    {
     string          symbol;
     datetime        time;
    } Array_Struct[];
 
PapaYozh #:


"Символ" - строка;

"Дата открытия ордера" - дата.

Не может быть такого массива, где элементы разного типа! 

"Дата открытия ордера" - TimeToString(дата) тоже строка.

 

Наиболее логично - сделать массив структур. Как Konstantin Nikitin посоветовал.

Konstantin Nikitin
Konstantin Nikitin
  • 2020.11.29
  • www.mql5.com
Профиль трейдера
 
PapaYozh #:

Наиболее логично - сделать массив структур. Как Konstantin Nikitin посоветовал.

Да. Но вопрос был не об этом.

 
Alexey Viktorov #:

Да. Но вопрос был не об этом.

Человек учится, поэтому и подсказывать ему надо правильно, а хранение даты строкой - костыль.

 

городил у себя вот такую конструкцию для подсчёта активных символов по которым сейчас есть ордера

   for(int i=0; i < OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
        {        
         if((OrderType()==OP_BUY || OrderType()==OP_SELL))
           {
            if(OSymbol[0]==NULL)
              {
               OSymbol[0]=OrderSymbol();
              }
            int f = 0;
            for(int y=0; y < n; y++)
              {
               if(OrderSymbol()!=OSymbol[y])
                 {
                  f++;
                 }
              }

            if(f==n)
              {
               n++;   
               ArrayResize(OSymbol,n);
               ArrayResize(KolSymbolO,n);
               OSymbol[n-1]=OrderSymbol();
              }
            for(int y=0; y < n; y++)
              {
               if(OrderSymbol()==OSymbol[y])
                 {
                  KolSymbolO[y]++; 
                 }
              }
           }
        }
     }
 
PapaYozh #:

Человек учится, поэтому и подсказывать ему надо правильно, а хранение даты строкой - костыль.

Ну какой же костыль? Вы хоть помните когда появились структуры в mql4, или вы до того как, в школу ходили?

Причина обращения: