Помогите пожалуйста с написанием функции!

 
//+------------------------------------------------------------------+
//Возвращает суммарный профит открытых позиций в пунктах
int GetProfitOpenPosInPoint()
{
 int profit = 0;
 double profitB = 0.0;
 double profitS = 0.0;

 for(int i=0; i<OrdersTotal(); i++)
 {
  if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
  {
   if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
   {
    if(OrderType()==OP_BUY)
    {
     profitB = NormalizeDouble(Bid-OrderOpenPrice(),Digits);
    }
    if(OrderType() == OP_SELL)
    {
     profitS = NormalizeDouble(OrderOpenPrice()-Ask,Digits);
    }
    profit = profitB + profitS * Point;
   }
  }
 }
 return(profit);
}
//+------------------------------------------------------------------+
 
Эта функция при компилировании выдает предупреждение    possible loss of data due to type conversion , а в тестере вообще не работает

 
double profit = 0;

 

profit = profitB / Point + profitS / Point;
 
barudkinarseniy:
Эта функция при компилировании выдает предупреждение    possible loss of data due to type conversion , а в тестере вообще не работает

//+------------------------------------------------------------------+
//Возвращает суммарный профит открытых позиций в пунктах
int GetProfitOpenPosInPoint()
{
 int profit = 0;
 double profitB = 0.0;
 double profitS = 0.0;

 for(int i=0; i<OrdersTotal(); i++)
 {
  if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
  {
   if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() <= 1)
   {
    if(OrderType() == OP_BUY)       profitB = profitB + NormalizeDouble(Bid-OrderOpenPrice(),Digits);
    else if(OrderType() == OP_SELL) profitS = profitS + NormalizeDouble(OrderOpenPrice()-Ask,Digits);
   }
  }
 }
 profit = (int)(profitB + profitS) / Point;
 return(profit);
}
//+------------------------------------------------------------------+
 
Stanislav Aksenov:

 

Все заработало Спасибо! Но при компиляции все равно выдает предупреждение, и мне нужен суммарный профит всех открытых позиций т.к. советник торгует сеткой ордеров и должен закрыть все ордера при достиженни профита в нное кол-во пунктов, так вот вы мне не подскажите как правильно вернуть профит в пунктах?
 
Andrey F. Zelinsky:
Этот вариант тоже работает и так же при компиляции все равно выдает предупреждение о возможной потере данных, а это ведь не есть гуд((((
 
barudkinarseniy:
Этот вариант тоже работает и так же при компиляции все равно выдает предупреждение о возможной потере данных, а это ведь не есть гуд((((
profit = int((profitB + profitS) / Point);
 
barudkinarseniy:
Этот вариант тоже работает и так же при компиляции все равно выдает предупреждение о возможной потере данных, а это ведь не есть гуд((((
//+------------------------------------------------------------------+
//Возвращает суммарный профит открытых позиций в пунктах
int GetProfitOpenPosInPoint()
{
 int profit = 0;
 double profitB = 0.0;
 double profitS = 0.0;

 for(int i=0; i<OrdersTotal(); i++)
 {
  if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
  {
   if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() <= 1)
   {
    if(OrderType() == OP_BUY)       profitB = profitB + NormalizeDouble(Bid-OrderOpenPrice(),Digits);
    else if(OrderType() == OP_SELL) profitS = profitS + NormalizeDouble(OrderOpenPrice()-Ask,Digits);
   }
  }
 }
 profit = (int)((profitB + profitS) / Point);
 return(profit);
}
//+------------------------------------------------------------------+
 
Andrey F. Zelinsky:
Спасибо все заработало!!! Но я вначале не уточнил, что мне надо общий профит в пунктах когда открыто по несколько ордеров в разных направлениях т.е. и баевые и селовые! Может быть вы мне еще разок поможете))
 
barudkinarseniy:
Спасибо все заработало!!! Но я вначале не уточнил, что мне надо общий профит в пунктах когда открыто по несколько ордеров в разных направлениях т.е. и баевые и селовые! Может быть вы мне еще разок поможете))
Так считает же -- общий профит в пунктах
 
Andrey F. Zelinsky:
Так считает же -- общий профит в пунктах
Да считает, но только если ордера открыты в одну сторону например если бай то он считает только баевые, а когда поочередно открывается на бай потом на селл он замирает на количествах пунктов равному рассоянию между этими ордерами (для проверки я вывел этот profit функцией Comment на график)
Причина обращения: