значение прибыли ордера в пунктах

 
Скажите, как получить згачение прибыли в пунктах. А то сначала я так получал
(OrderProfit()/OrderLots()/10)
потом как поменял пару, уже это выражение врет.
 

цена открытия - цена закрытия по модулю и разделить на Point

тоесть где то так наверное MathAbs(OrderOpenPrice()-OrderClosePrice())/Point

 
sultan:
Скажите, как получить згачение прибыли в пунктах. А то сначала я так получал
(OrderProfit()/OrderLots()/10)
потом как поменял пару, уже это выражение врет.

Т.к. стоимость пункта у пар различается, для корректности нужно делить на
MarketInfo( Symbol(), MODE_POINT);
 
scorpionk:

цена открытия - цена закрытия по модулю и разделить на Point

тоесть где то так наверное MathAbs(OrderOpenPrice()-OrderClosePrice())/Point

я имел ввиду прибыль для действующего ордера, т.е. не для закрытого

goldtrader:

Т.к. стоимость пункта у пар различается, для корректности нужно делить на
MarketInfo( Symbol(), MODE_POINT);
не получается у меня. Выражение
OrderProfit()/OrderLots()*MarketInfo(Symbol(),MODE_POINT)
в момент при прибыли -5 пункт (пара EURGBP) дает значение -0.0102, когда мне нужно просто -5
 
может мне вот это
MarketInfo(Symbol(),MODE_PROFITCALCMODE)
использовать? Только незнаю, параметры (Способ расчета прибыли. 0 - Forex; 1 - CFD; 2 - Futures) куда писать? Так MarketInfo(Symbol(),MODE_PROFITCALCMODE,0) ошибку дает
 
int start()
{
 double pips;
 int total=OrdersTotal();
 for (int i=total-1;i>=0;i--)
 {
  if (OrderSelect(i,SELECT_BY_POS))
  {
   if (OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
   double pnt=MarketInfo(OrderSymbol(),MODE_POINT);
   if (OrderType()==OP_BUY)  pips=(OrderClosePrice()-OrderOpenPrice())/pnt;
   if (OrderType()==OP_SELL) pips=(OrderOpenPrice()-OrderClosePrice())/pnt;
   Alert("Прибыль в пунктах для ордера #",OrderTicket()," = ",pips);
  }
 }
 return(0);
}

Вам же уже подсказали. Наверно смущает функция OrderClosePrice - так вот, она возвращает текущую цену и всё считается правильно. Скрипт тому подтверждение.

 
спасибо Xupypr !!!!
 
Xupypr:
int start()
{
 double pips;
 int total=OrdersTotal();
 for (int i=total-1;i>=0;i--)
 {
  if (OrderSelect(i,SELECT_BY_POS))
  {
   if (OrderType()!=OP_BUY && OrderType()!=OP_SELL) continue;
   double pnt=MarketInfo(OrderSymbol(),MODE_POINT);
   if (OrderType()==OP_BUY)  pips=(OrderClosePrice()-OrderOpenPrice())/pnt;
   if (OrderType()==OP_SELL) pips=(OrderOpenPrice()-OrderClosePrice())/pnt;
   Alert("Прибыль в пунктах для ордера #",OrderTicket()," = ",pips);
  }
 }
 return(0);
}

Вам же уже подсказали. Наверно смущает функция OrderClosePrice - так вот, она возвращает текущую цену и всё считается правильно. Скрипт тому подтверждение.

Думаю излишни проверки на тип ордера, взять по модулю и все, зачем лишнии телодвижения.)
 

Это же Грааль - считать по модулю 8) Куда бы цена не пошла, какой бы ордер не отрыли - всегда в плюсе, даже на спрэде))

 

у меня еще один вопрос

int chetchik()
{  int cnt;
   for(cnt=OrdersTotal()-1;cnt>=0;cnt--) 
      {
      if (OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES)) 
         {
         if (OrderSymbol()!=Symbol()) continue; 
                                                
         if (OrderType()==OP_BUY) 
            {
            buyOrders++;                  
            TicketbuyOrders=OrderTicket();  
            }
         if (OrderType()==OP_SELL) 
            {
            sellOrders++;
            TicketsellOrders=OrderTicket();  
            }
         if (OrderType()==OP_BUYSTOP) 
            {
            buystopOrders++; 
            TicketbuystopOrders=OrderTicket();
            }
          if (OrderType()==OP_SELLSTOP) 
            {
            sellstopOrders++; 
            TicketsellstopOrders=OrderTicket();
            }
          }
      }
return(buyOrders,sellOrders,buystopOrders,sellstopOrders,TicketbuyOrders,TicketsellOrders,TicketbuystopOrders,TicketsellstopOrders);
}
функция chetchik() вроде правильно, но при компиляции ругается, что в строке return не хватает скобки
 
А сколько у Вас функция возвращает значений. Судя по return получается 7, а вернуть может только одно. Если больше, то нужно делать или по ссылке, или через глобальные переменные (переменные, доступные в любом месте программы)
Причина обращения: