Как зафиксировать дату открытия самого первого ордера?

 
Мне нужно определить дату открытия самого первого ордера (ордера открыты по разным валютным парам). Попробовал воспользоваться массивами. Данные записываються в массив коректно. При поиске элемента с максимальным значением функция ArrayMaximum() возвращает позицию максимального элемента в массиве тоже правельно. Но вот функция ArrayMinimum() возвращает -1... Почему так? Пробовал вставлять в массив значения более меньшие чем те которые выдаёт OrderOpenTime(), да функция ArrayMinimum() начинает работать коректно, но почему тогда функция ArrayMaximum() работает с большими цифрами, а функция ArrayMinimum()  не хочет? И как же мне зафиксировать дату открытия первого ордера?
//+------------------------------------------------------------------+
//|                                                     Проверка.mq4 |
//|                                                           Сергей |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Сергей"
#property link      ""
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
  datetime date[];
  int TotalOrders=OrdersTotal();
  ArrayResize(date,TotalOrders);
 
  for(int pos=TotalOrders-1;pos>=0;pos--)
    {
    if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
      {
      date[pos]=OrderOpenTime();Print("Массив date[",pos,"] ",date[pos]);
      }
    else Print("Ошибка ",GetLastError());
    }
//---- 
  int mindate=ArrayMinimum(date);
  Print("MinDataOpen ",mindate,"   ",date[mindate]); 
  int maxdate=ArrayMaximum(date);
  Print("MaxDataOpen ",maxdate,"   ",date[maxdate]);
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
Как фиксировать дату первого ордера я догодался:

//+------------------------------------------------------------------+
//|                                                   Проверка 2.mq4 |
//|                                                           Сергей |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Сергей"
#property link      ""
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
datetime date;int ord;string symbol;
  for(int pos=OrdersTotal()-1;pos>=0;pos--)
    {
    if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
      {
      Print("date ",TimeToStr(OrderOpenTime(),TIME_DATE|TIME_MINUTES),"  ",pos,"  ",OrderSymbol());
      if(date>OrderOpenTime() || date==0)
        {
        date=OrderOpenTime();ord=pos;symbol=OrderSymbol();
        }
      }
    else Print("Ошибка ",GetLastError());
    }
Print("DATEOPEN ",TimeToStr(date,TIME_DATE|TIME_MINUTES),"  ",ord,"  ",symbol);    
//----
   return(0);
  }
//+------------------------------------------------------------------+


Но появился новый парадокс. На сколько я знаю при просчёте счётчиком ордера "выстраиваються" по алфавиту:



При счётчике в таком виде
for(int pos=OrdersTotal()-1;pos>=0;pos--)
Print() выдаёт вот это :



Счётчик в противоположную сторону

for(int pos=0;pos<OrdersTotal();pos++)
результаты принт выдаёт правельно:



КАК ЭТО ПОНЯТЬ ???  Вчём у меня ошибка, или что я не могу понять? И вопрос по массивам тоже не снимаеться.


 
Ну всё я вобще не чего не понемаю??????????? Стоило перезагрузить терминал и счётчик
for(int pos=OrdersTotal()-1;pos>=0;pos--)
стал тоже правельно считать.....
 
По-моему, дело в том, что номер позиции будет зависеть от типа сортировки в окне терминала по различным полям. По крайней мере, для истории счета такое наблюдается. Для терминала не проверял, но думаю там организованно все по такому же принципу.
 
Scriptong:
По-моему, дело в том, что номер позиции будет зависеть от типа сортировки в окне терминала по различным полям. По крайней мере, для истории счета такое наблюдается. Для терминала не проверял, но думаю там организованно все по такому же принципу.
Тоесть, если я вас правельно понял, то отсортировав в терменале по какому-то из полей например по "Времени" или по "Символу", счётчик также будет просчитывать... Нет я это проверял, просчёт идёт по алфавиту, и если попадаються ордера с одинаковыми парами их он раставляет по времени.
Сегодня я опять запускал и в ту и в другую сторону, просчёт ведёться правельно, вчера скорей всего был просто глюк. 
Но вот с МАССИВАМИ у меня вопрос так и не разрешился............... может кто то подскажет, в чём проблема?
 
Я тут кое что дописал в код для проверки... вот что получилось:
//+------------------------------------------------------------------+
//|                                                     Проверка.mq4 |
//|                                                           Сергей |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Сергей"
#property link      ""
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
  datetime date[];string symbol[];
  int TotalOrders=OrdersTotal();
  ArrayResize(date,TotalOrders);
  ArrayResize(symbol,TotalOrders);
  Print("OrdersTotal ",OrdersTotal());
  for(int pos=0;pos<OrdersTotal();pos++)
    {
    if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
      {
      date[pos]=OrderOpenTime();
      symbol[pos]=OrderSymbol();
      Print("Массив date[",pos,"] ",TimeToStr(date[pos],TIME_DATE|TIME_MINUTES),"  ",symbol[pos]);
      }
    else Print("Ошибка ",GetLastError());
    }
    date[5]=2567809;
    symbol[5]="ПРОВЕРКА";
//---- 
  int mindate=ArrayMinimum(date);
  Print("MinDataOpen ",mindate,"   ",TimeToStr(date[mindate],TIME_DATE|TIME_MINUTES),"  ",symbol[mindate]); 
  int maxdate=ArrayMaximum(date);
  Print("MaxDataOpen ",maxdate,"   ",TimeToStr(date[maxdate],TIME_DATE|TIME_MINUTES),"  ",symbol[maxdate]);
//----
   return(0);
  }
//+------------------------------------------------------------------+


Цифра
2567809
маленькая и
  int mindate=ArrayMinimum(date);
обработала её верно !!!!
 
//+------------------------------------------------------------------+
//|                                                     Проверка.mq4 |
//|                                                           Сергей |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Сергей"
#property link      ""
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
  datetime date[];string symbol[];
  int TotalOrders=OrdersTotal();
  ArrayResize(date,TotalOrders);
  ArrayResize(symbol,TotalOrders);
  Print("OrdersTotal ",OrdersTotal());
  for(int pos=0;pos<OrdersTotal();pos++)
    {
    if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==true)
      {
      date[pos]=OrderOpenTime();
      symbol[pos]=OrderSymbol();
      Print("Массив date[",pos,"] ",TimeToStr(date[pos],TIME_DATE|TIME_MINUTES),"  ",symbol[pos]);
      }
    else Print("Ошибка ",GetLastError());
    }
    date[5]=1402874590;
    symbol[5]="ПРОВЕРКА";
//---- 
  int mindate=ArrayMinimum(date);
  Print("MinDataOpen ",mindate,"   ",TimeToStr(date[mindate],TIME_DATE|TIME_MINUTES),"  ",symbol[mindate]); 
  int maxdate=ArrayMaximum(date);
  Print("MaxDataOpen ",maxdate,"   ",TimeToStr(date[maxdate],TIME_DATE|TIME_MINUTES),"  ",symbol[maxdate]);
//----
   return(0);
  }
//+------------------------------------------------------------------+
????
    date[5]=1402874590;
 
conys писал (а):
Тоесть, если я вас правельно понял, то отсортировав в терменале по какому-то из полей например по "Времени" или по "Символу", счётчик также будет просчитывать... Нет я это проверял, просчёт идёт по алфавиту, и если попадаються ордера с одинаковыми парами их он раставляет по времени.
Сегодня я опять запускал и в ту и в другую сторону, просчёт ведёться правельно, вчера скорей всего был просто глюк.
Но вот с МАССИВАМИ у меня вопрос так и не разрешился............... может кто то подскажет, в чём проблема?

на сортировку автоматом я бы не надеялся.

а что до массивов, попробуй

   double date[];
 
Shu:

а что до массивов, попробуй



   double date[];


Да я с double тоже попробовал, всё нормально проходит:



Просто надеялся что представители Метаквота обьяснят что за причина сбоя при обьявлении массива как datetime.
 
conys:

Просто надеялся что представители Метаквота обьяснят что за причина сбоя при обьявлении массива как datetime.

ну, я бы не называл это сбоем. всё-таки чётко прописано:

int ArrayMinimum( double array[], int count=WHOLE_ARRAY, int start=0)
 
Shu:
conys:



Просто надеялся что представители Метаквота обьяснят что за причина сбоя при обьявлении массива как datetime.


ну, я бы не называл это сбоем. всё-таки чётко прописано:


int ArrayMinimum( double array[], int count=WHOLE_ARRAY, int start=0)

Да конечно, я это видел, и естественно если обьявить
string date[];
//+------------------------------------------------------------------+
//|                                                     Проверка.mq4 |
//|                                                           Сергей |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Сергей"
#property link      ""
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
  string date[4]={"xor","xer","xom","sox"};
//---- 
  int mindate=ArrayMinimum(date);
  Print("MinDataOpen ",mindate,"   ",date[mindate]); 
  int maxdate=ArrayMaximum(date);
  Print("MaxDataOpen ",maxdate,"   ",date[maxdate]);
//----
   return(0);
  }
//+------------------------------------------------------------------+


то не чего из этого не получеться, точнее получиться вот это:



но обьявив
int date[];
//+------------------------------------------------------------------+
//|                                                     Проверка.mq4 |
//|                                                           Сергей |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Сергей"
#property link      ""
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
  int date[4]={3,6,15,8};
//---- 
  int mindate=ArrayMinimum(date);
  Print("MinDataOpen ",mindate,"   ",date[mindate]); 
  int maxdate=ArrayMaximum(date);
  Print("MaxDataOpen ",maxdate,"   ",date[maxdate]);
//----
   return(0);
  }
//+------------------------------------------------------------------+
получим то что хотим тоесть вот это:



или
datetime date[];
//+------------------------------------------------------------------+
//|                                                     Проверка.mq4 |
//|                                                           Сергей |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Сергей"
#property link      ""
 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
  datetime date[2]={3,6,15,8};
//---- 
  int mindate=ArrayMinimum(date);
  Print("MinDataOpen ",mindate,"   ",date[mindate]); 
  int maxdate=ArrayMaximum(date);
  Print("MaxDataOpen ",maxdate,"   ",date[maxdate]);
//----
   return(0);
  }
//+------------------------------------------------------------------+
получаем опять так же  что хотим:



Так чем же цифра 3 отличаеться от цифры 1402874590 ? Только размером или ещё чемто?

Но влюбом случае спасибо буду знать теперь как массив "date" обзывать :)