как можно посчитать в ЕА количество закрытых ордеров - страница 2

 
Vitaly Muzichenko:

 

Понял что?: "в любой момент знать сколько было позиций за последние 24 часа"  или  "всё-же с начала суток по сейчас"

"в любой момент знать сколько было позиций за последние 24 часа"
 
...перебираем всю историю и открытые ордера, сравниваем время открытия ордеров, если открыты после TimeCurrent()-86400, значит +1 и так в цикле
 
Stefan Stoyanov:

В сети нашел такой код :

 КАК ПОСЧИТАТЬ ОБЩУЮ ПРИБЫЛЬ ОРДЕРОВ КОТОРЫЕ БЫЛИ ЗАКРЫТЫ СЕГОДНЯ?

int start()
{double profit = 0 ;
for (int i = OrdersHistoryTotal () - 1; i >= 0; i--)
{OrderSelect (i, SELECT_BY_POS, MODE_HISTORY) ;
if (TimeDayOfYear (OrderCloseTime ()) == DayOfYear ())
// или так - if (iBarShift (NULL, 1440, OrderCloseTime ()) == 0)
/ /или так - if (iBarShift (NULL, PERIOD_D1, OrderCloseTime ()) == 0)
{profit += OrderProfit () + OrderCommission () + OrderSwap () ; }else {break ; } }

Print ("Прибыль за сегодня: ", DoubleToStr (profit, 2)) ; return(0); }


Кто не подскажет как можно посчитать количество закрытых ордеров за  24 ч  назад ,начиная с текущего время сервера в  МТ4


Заранее Спасибо Вам !

Попробуйте вот этот

int accTotal1=OrdersHistoryTotal();
double profit_day=0; // профит закрытых ордеров за сегодня
for(int h=accTotal1-1;h>=0;h--)
     if(OrderSelect(h,SELECT_BY_POS,MODE_HISTORY))
     if (OrderType()==OP_BUY||OrderType()==OP_SELL) 
      {
      if (OrderCloseTime()>=iTime(NULL,PERIOD_H1,24)) {profit_day+=OrderProfit()+OrderSwap()+OrderCommission();}
      if (OrderCloseTime()<iTime(NULL,PERIOD_H1,24))  {break;}
      }
Comment(profit_day);
 
Dmitriy Epshteyn:

Попробуйте вот этот

Это жесть! Целый день выясняли что нужно, в итоге выяснили

Stefan Stoyanov:
"в любой момент знать сколько было позиций за последние 24 часа"

 И снова предложили вариант профита, при том за текущий день )))))

 
Stefan Stoyanov:

Кто не подскажет как можно посчитать количество закрытых ордеров за  24 ч  назад ,начиная с текущего время сервера в  МТ4


Заранее Спасибо Вам !

в первом посте четко прописано, что нужно топик-стартеру, а вы начали подсовывать кокой то код подсчитывающий профит

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CounterOrder()
  {
   datetime time=TimeCurrent();
   int cnt=0;
//----
   for(int pos=OrdersHistoryTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_HISTORY)==true)
         if(OrderMagicNumber()==Magic)
            if(OrderSymbol()==_Symbol)
               if(OrderType()==OP_BUY
                  || OrderType()==OP_SELL)
                  if(OrderCloseTime()>=time-TimeSeconds(PERIOD_D1))
                     cnt++;
//----
   return(cnt);
  }
 

Ладно, выложу универсальную, именно за количество введённых часов )

Stefan Stoyanov:
"в любой момент знать сколько было позиций за последние 24 часа"

 

//===============================================================================================
//--------------------- Возвращает количество закрытых позиции за N часов ----------------------+
//===============================================================================================
int GetLastClosePosTime(string symb="0", int type=-1, int mg=-1, int index=0) {
 int c=0;
 if(symb=="0") { symb=_Symbol;}
  for(int i=0; i<OrdersHistoryTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if((OrderSymbol()==symb||symb=="")&&(type<0||OrderType()==type)&&(mg<0||OrderMagicNumber()==mg)) {
     if(OrderType()==OP_BUY || OrderType()==OP_SELL) {
      if(OrderCloseTime()>=TimeCurrent()-(60*60*index)) {
        c++;
 }}}}}
  return(c);
 }

 Использование:

Comment( GetLastClosePosTime(_Symbol, -1, -1, 48) );          // Все за последние 48 часов
Comment( GetLastClosePosTime(_Symbol, OP_BUY, -1, 10) );      // Только бай за последние 10 часов
Comment( GetLastClosePosTime(_Symbol, OP_SELL, Magic, 20) );  // Только селл с конкретным Magic за последние 20 часов
Comment( GetLastClosePosTime("", -1, Magic, 5) );             // Все по всему счёту с конкретным Magic за последние 5 часов
 
Vitaly Muzichenko:

Ладно, выложу универсальную, именно за количество введённых часов )

 

 Использование:

Мне не перестаёт удивлять как хорошие программисты запутывается в сложных кодах и в итоге решают проблем гораздо сложнее чем это возможно

Хочу отметить что рынок вовсе не интересуется насколько сложны быт  Ваш код

Если мне надо N часов то просто ставлю

if (OrderCloseTime ()  >TimeCurrent() - N*3600) 



int Orders()
 {order = 0 ; 
   { for ( i = OrdersHistoryTotal () - 1; i >= 0; i--)
    if (OrderSelect (i, SELECT_BY_POS, MODE_HISTORY)==true) 
     if (OrderCloseTime ()  >TimeCurrent() - 24*3600) order ++ ; }return(0);}   

 
Stefan Stoyanov:
Мне не перестаёт удивлять как хорошие программисты запутывается в сложных кодах и в итоге решают проблем гораздо сложнее чем это возможно

Хочу отметить что рынок вовсе не интересуется насколько сложны быт  Ваш код

Если мне надо N часов то просто ставлю 

Ну то что ставите - это прекрасно. В моём варианте можно посчитать отдельно бай и селл, если работают разные боты то можно отсеять по магику, и посчитать именно те, которые нужны, можно посчитать по конкретному символу, а не все подряд. Код по объёму почти такой-же, а вот по функциональности - разный.
Причина обращения: