Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересует мнение трейдеров? Заведи опрос на форуме!
protr
358
protr 2015.09.14 10:57 

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

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);   
  }
Vladimir Zubov
3448
Vladimir Zubov 2015.09.14 10:59  

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

http://forum.mql4.com/ru/38949 

Только "Полезные функции от KimIV". - MQL4 форум
  • forum.mql4.com
Только "Полезные функции от KimIV". - MQL4 форум
protr
358
protr 2015.09.14 11:03  
Vladimir Zubov:

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

http://forum.mql4.com/ru/38949 

Спасибо. искал конечно же там но что то не нашел...
protr
358
protr 2015.09.14 11:04  
protr:
Спасибо. искал конечно же там но что то не нашел...
нашел спасибо
Alexey Oreshkin
3295
Alexey Oreshkin 2015.09.14 13:26  

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 'нужная дата'
NADEZDA ZHIZNEVSKAYA
173
NADEZDA ZHIZNEVSKAYA 2015.09.14 17:04  
спасибо
Alexey Volchanskiy
14058
Alexey Volchanskiy 2015.09.14 17:28  
Alexey Oreshkin:
Ни разу так не писал, но дату можно описать и так: D 'нужная дата'
Кстати, многие не в курсе о такой записи даты. Читайте хелпы, они рулез ))
Ihor Herasko
8458
Ihor Herasko 2015.09.14 18:42  

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

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;
    
   // Вот он - ордер, открытый сегодня
}
Artyom Trishkin
69053
Artyom Trishkin 2015.09.14 19:08  
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++) {}

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

Alexey Oreshkin
3295
Alexey Oreshkin 2015.09.15 02:01  
Artyom Trishkin:

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

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

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

есессно так. 1 не заметил в начальном цикле.
Andrey Khatimlianskii
52261
Andrey Khatimlianskii 2015.09.15 19:24  
Игорь Герасько:

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

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

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

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

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий