Подскажите где ошибка...

 

скриптом выводит правельно ... а в советнике не работает.

double ProfitLossHistory(string sy="", int op=-1, int mn=-1)
{

 double opBUY=0,opSELL=0,pBUY=0,lBUY=0,pSELL=0,lSELL=0,prof=0,loss=0;

  if (sy=="0") sy=Symbol();

  for (int i=OrdersHistoryTotal();i>=0;i--){
  
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
  if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
  if (mn<0 || OrderMagicNumber()==mn) {
  if ((opBUY+opSELL) < OpenOrder ) {
  double pro=OrderProfit()+OrderSwap()+OrderCommission();
  if (OrderType()==OP_BUY) 
  { opBUY++;
  if (pro>=0)
  {  prof+=pro; pBUY++;  }
  else
  {  loss+=pro; lBUY++;  }
  } 
  if (OrderType()==OP_SELL) 
  {
  opSELL++;
  if (pro>=0)
  {  prof+=pro; pSELL++;  }
  else
  {  loss+=pro; lSELL++;  } 

  }  }  }  }  }  }  }
  return ((prof+loss));
  }

 
age_nt писал(а) >>

скриптом выводит правельно ... а в советнике не работает.

Что за переменная OpenOrder и чему равно ее значение?

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

 

Спасибо - учту... OpenOrder - внешняя переменная. В том и фокус что при любой фильтрации должен выходить расчёт

именно под установленное кол-во ордеров. 

 
age_nt писал(а) >>

Спасибо - учту... OpenOrder - внешняя переменная. В том и фокус что при любой фильтрации должен выходить расчёт

именно под установленное кол-во ордеров.

Перед всеми if следует вставить строку:

Print("OpenOrder=",OpenOrder);
и посмотреть, не равно ли нулю ее значение.
 

проверил принтом через старт ...выдаёт сумму 3х (OpenOrder - 3) первых правильно...

...дальше тупик...

17:18:28 2009.09.21 15:30 11 EURJPY_FX,M30: ПРОБА : -174.32
17:18:28 2009.09.21 16:00 11 EURJPY_FX,M30: ПРОБА : -174.32
17:18:28 2009.09.21 16:30 11 EURJPY_FX,M30: ПРОБА : -174.32
17:18:28 2009.09.21 17:00 11 EURJPY_FX,M30: ПРОБА : -174.32
17:18:28 2009.09.21 17:30 11 EURJPY_FX,M30: ПРОБА : -174.32
и т.д

 
age_nt писал(а) >>

проверил принтом через старт ...выдаёт сумму 3х (OpenOrder - 3) первых правильно...

...дальше тупик...

Ну, так, ищите, где она отрицательной становится.

opBUY и opSELL принимают значения от нуля и выше.

 

прогнал Print("ПРОБА : ",(opBUY+opSELL)); ...всё равно не могу понять...

opBUY и opSELL принимают значения от нуля и выше - всё правильно 

(prof+loss) в сумме любые значения...но он выдаёт результат правильно один раз, а дальше его клинит.

.....и меня уже от него тоже...

17:54:21 2009.10.01 12:00 11 EURJPY_FX,M30: SELL order opened : 131.15
17:54:21 2009.10.02 12:00 11 EURJPY_FX,M30: close #1 sell 0.10 EURJPY_FX at 131.150 at price 130.027
17:54:21 2009.10.02 12:30 11 EURJPY_FX,M30: ПРОБА : 0
17:54:21 2009.10.02 13:00 11 EURJPY_FX,M30: ПРОБА : 1
17:54:21 2009.10.02 13:30 11 EURJPY_FX,M30: ПРОБА : 2
17:54:21 2009.10.07 17:00 11 EURJPY_FX,M30: open #2 buy 0.10 EURJPY_FX at 130.741 ok
17:54:21 2009.10.07 17:00 11 EURJPY_FX,M30: BUY order opened : 130.741
17:54:21 2009.10.08 00:30 11 EURJPY_FX,M30: open #3 sell 0.10 EURJPY_FX at 130.125 ok
17:54:21 2009.10.08 00:30 11 EURJPY_FX,M30: SELL order opened : 130.125