Функция не работатет

 

Всем привет! Функция простенькая, но не работает, где то ошибся но не могу понять, где? Направьте в правильном направлении)) Суть функции FindCloseSellStop() проверить наличие тикетов в массиве и сравнить есть ли они в истории сделок, если есть, то true если нет то false. Это нужно для, обнуления массива, если тикеты, которые есть в массиве MassLockSellTrade уже в истории, то значит обнуляем массив, так как сделки уже закрыты. 

bool FindCloseSellStop()
{
   int Size = ArraySize(MassLockSellTrade);
  
   for(int i=0; i<OrdersTotal(); i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      if(OrderType()==OP_SELL)
         { 
            
            for (t=0; t<Size; t++)
               {
                  if (MassLockSellTrade[t]==OrderTicket())
                     {
                        return true;
                        break;
                     }
                  
               }  
         }
    } return false;    
}
 
Artem Onopin:

Всем привет! Функция простенькая, но не работает, где то ошибся но не могу понять, где? Направьте в правильном направлении)) Суть функции FindCloseSellStop() проверить наличие тикетов в массиве и сравнить есть ли они в истории сделок, если есть, то true если нет то false. Это нужно для, обнуления массива, если тикеты, которые есть в массиве MassLockSellTrade уже в истории, то значит обнуляем массив, так как сделки уже закрыты. 

Без комментариев, только намёк.

Надеюсь сам справишься.

OrdersHistoryTotal - Торговые функции - Справочник MQL4
OrdersHistoryTotal - Торговые функции - Справочник MQL4
  • docs.mql4.com
OrdersHistoryTotal - Торговые функции - Справочник MQL4
 

Если MODE_HISTORY, то вместо OrdersTotal() надо OrdersHistoryTotal().

Но только бегать по всей истории - это жуткие тормоза будут.

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

 
Alexey Viktorov:

Без комментариев, только намёк.

Надеюсь сам справишься.


Вот я лоханулся, аж самому стыдно))))))))) Спасибо!

 
Dmitry Fedoseev:

Если MODE_HISTORY, то вместо OrdersTotal() надо OrdersHistoryTotal().

Но только бегать по всей истории - это жуткие тормоза будут.

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


Спасибо, учту!

 
Artem Onopin:   Спасибо, учту!

количество ордеров в истории зависит от выбранного в терминале периода: История счета, правая кнопка мыши (ПКМ, контекстное меню), Выбрать период. Надо подождать загрузки данных с сервера

//+-------------------------------------------------------+
//| Скрипт проверки истории                      PROBA.mq4|
//+-------------------------------------------------------+
void OnStart()
{
   Alert("Ордеров в истории Сегодня OrdersHistoryTotal() = ",OrdersHistoryTotal());
}
В соответствии с выбранным периодом меняю текст в скрипте. Вот что получилось.

Сегодня 2 августа. За месяц меньше чем за неделю. Видимо 2 дня это уже другой месяц? Если выбрать Сегодня - учитываются те, что после полуночи

 
Artem Onopin
:

Всем привет! Функция простенькая, но не работает, где то ошибся но не могу понять, где? Направьте в правильном направлении)) Суть функции FindCloseSellStop() проверить наличие тикетов в массиве и сравнить есть ли они в истории сделок, если есть, то true если нет то false. Это нужно для, обнуления массива, если тикеты, которые есть в массиве MassLockSellTrade уже в истории, то значит обнуляем массив, так как сделки уже закрыты. 

//+------------------------------------------------------------------+
//| магик,тип ордера и массив тикетов передаются при вызове функции  |
//+------------------------------------------------------------------+
bool FindCloseSellStop(int magic, int type, int &mass[])
{
   int size = ArraySize(mass);
  
   for(int i = 0; i < size; i++)
   {
      if(OrderSelect(mass[i], SELECT_BY_TICKET))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic && OrderType() == type)
         {
            if(mass[i] == OrderTicket() && OrderCloseTime() > 0)
            return(true);
         }
      }
   }
   return(false);
}
//+------------------------------------------------------------------+
p.s. Подправил немного функцию - искала только SELLLIMIT, сейчас ищет любые типы ордеров/позиций.