Отобрать сегодняшние ордера

 

Помогите отобрать сегодняшние ордера и просумировать профиты. Не могу Понять как сравнить стринговую величину. Спасибо. 

void OnTick()
  {
doble suma = 0;

for(int i=1; i<=OrdersTotal(); i++)          
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) 
              if (OrderOpenTime() > "2015.09.14 00:00:00")
                  suma = suma + OrderProfit();
                                             
         
     }
        Print ("suma ",suma);   
  }
 

Поищите в функциях, что то подобное там было.

https://www.mql5.com/ru/forum/131859 

Только "Полезные функции от KimIV". - MQL4 форум
  • www.mql5.com
Только "Полезные функции от KimIV". - MQL4 форум
 
Vladimir Zubov:

Поищите в функциях, что то подобное там было.

https://www.mql5.com/ru/forum/131859 

Спасибо. искал конечно же там но что то не нашел...
 
protr:
Спасибо. искал конечно же там но что то не нашел...
нашел спасибо
 

for(int i=1; i<=OrdersTotal(); i++)          

здесь надо писать так: for(int i=1; i<OrdersTotal(); i++) , а ещё лучше так: for(int i=OrdersTotal()-1; i>=0; i--)
в вашем же случае будет ошибка так как ордера с номером OrdersTotal() не существует. последний это OrdersTotal()-1
              if (OrderOpenTime() > "2015.09.14 00:00:00")

Ни разу так не писал, но дату можно описать и так: D 'нужная дата'
 
спасибо
 
Alexey Oreshkin:
Ни разу так не писал, но дату можно описать и так: D 'нужная дата'
Кстати, многие не в курсе о такой записи даты. Читайте хелпы, они рулез ))
 

Если же нужно отобрать сегодняшние ордера без привязки к конкретной дате, то это делается так:

datetime dayStartTime = iTime(NULL, PERIOD_D1, 0);
for (int i = OrdersTotal() - 1; i >= 0; i--)
{
   if (!OrderSelect(i, SELECT_BY_POS))
      continue;
   
   if (OrderOpenTime() < dayStartTime)
      continue;
    
   // Вот он - ордер, открытый сегодня
}
 
Alexey Oreshkin:
здесь надо писать так: for(int i=1; i<OrdersTotal(); i++) , а ещё лучше так: for(int i=OrdersTotal()-1; i>=0; i--)
в вашем же случае будет ошибка так как ордера с номером OrdersTotal() не существует. последний это OrdersTotal()-1

Ни разу так не писал, но дату можно описать и так: D 'нужная дата'

Нет, не так. Таким образом вы один ордер пропускаете - тот, что в нулевой ячейке массива. Нужно так:

for(int i=0; i<OrdersTotal(); i++) {}

Но лучше с конца - удалённые и закрытые не будете терять в цикле.

 
Artyom Trishkin:

Нет, не так. Таким образом вы один ордер пропускаете - тот, что в нулевой ячейке массива. Нужно так:

for(int i=0; i<OrdersTotal(); i++) {}

Но лучше с конца - удалённые и закрытые не будете терять в цикле.

есессно так. 1 не заметил в начальном цикле.
 
Игорь Герасько:

Если же нужно отобрать сегодняшние ордера без привязки к конкретной дате, то это делается так:

datetime dayStartTime = iTime(NULL, PERIOD_D1, 0);

Так есть опасность получить старые данные, если график Д1 не открыт (и проверка не вызывается каждый тик).

Лучше от TimeCurrent отбросить время, оставив только дату (TimeToStr + StrToTime). 

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