Просчет профита закрытых ордеров "HELP"

 

Профит закрытых ордеров считает правильно, но после закрытия прибавляет значение к предыдущему (5; 5+5=10; 10+5=15)
Как сделать чтобы каждый закрытый профит серии был новым, а не плюс предыдущий (5; 5; 5) ??  
В серии закрытых ордеров могут быть buy и sell, или только buy и только sell ордера 

color ProfitColor;

// START //
   if(LastProfitCL(-1)<0) ProfitColor=Red;
   if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
   if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
   ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
   ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  double LastProfit=0;
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
       if (OrderType()!= op || OrderSymbol()!= Symbol() || OrderMagicNumber()!= magic) continue;
       if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
       }
  return(LastProfit);
   }


 


 


 

 

Нужно добавить условие деления закрытых ордеров на серии

Расскажите алгоритм или принцип деления

 
Natashe4ka:   ... Профит закрытых ордеров ... прибавляет значение к предыдущему (5; 5+5=10; 10+5=15)

Как сделать чтобы каждый закрытый профит серии был новым, а не плюс предыдущий (5; 5; 5) ??  .....

Надо вместо арифметического суммирования складывать в символьную строку через пробел или через точку с запятой и пробелом, кому как нравится
 
STARIJ:
Надо вместо арифметического суммирования складывать в символьную строку через пробел или через точку с запятой и пробелом, кому как нравится

Хорошая идея

А можно в массив

 
Natashe4ka:

Профит закрытых ордеров считает правильно, но после закрытия прибавляет значение к предыдущему (5; 5+5=10; 10+5=15)
Как сделать чтобы каждый закрытый профит серии был новым, а не плюс предыдущий (5; 5; 5) ??  
В серии закрытых ордеров могут быть buy и sell, или только buy и только sell ордера 

color ProfitColor;

// START //
   if(LastProfitCL(-1)<0) ProfitColor=Red;
   if(LastProfitCL(-1)>0) ProfitColor=LimeGreen;
   if(LastProfitCL(-1)==0)ProfitColor=DarkGray;
   ObjectCreate("Last Profit", OBJ_LABEL, 0, 0, 0);
   ObjectSet("Last Profit", OBJPROP_CORNER, 1);
   ObjectSet("Last Profit", OBJPROP_XDISTANCE, 5);
   ObjectSet("Last Profit", OBJPROP_YDISTANCE, 15);
   ObjectSetText("Last Profit",StringConcatenate("Last Profit: ",DoubleToStr(LastProfitCL(-1),2)),10,"Arial",ProfitColor);
// END START //

//+----------------------------------------------------------------------------+
//|    Возвращает суммарный профит в валюте депозита серии закрытых ордеров    |
//+----------------------------------------------------------------------------+
double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  double LastProfit=0;
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
       if (OrderSymbol()!= Symbol()) continue;
       if (OrderMagicNumber()!= magic) continue;        
       if (OrderType()!= op) continue;
       if (op<0 || OrderType()==op) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}
       }
  return(LastProfit);
   }
Можно ввести глоб.переменную, и в неё писать текущий профит, после закрытия вычитать предыдущую сумму, и что осталось, то и есть профит и его запоминать
 

Сложновато всё, по проще может быть есть что-нибудь?
И примеры можно приводить, а то мозги кипят?

 
Natashe4ka:
Сложновато всё, по проще может быть есть что-нибудь?

Нет, проще не будет. Вы считаете всегда ВСЕ ордера, в том числе и те, которые были подсчитаны в предыдущие разы применения функции LastProfitCL. А поскольку ордеров всё больше - сумма профита тоже растёт.

Нужно выработать условие, по которому цикл будет прерываться, когда новые ордера закончатся. 

 
Vitalie Postolache:

Нужно выработать условие, по которому цикл будет прерываться, когда новые ордера закончатся. 

Вот, правильный ход мыслей))

 
Natashe4ka:

Вот, правильный ход мыслей))

Ну, и?

Где условие?

 
Renat Akhtyamov:

Ну, и?
Где условие?

что то вроде этого:

double cnt=0;

if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}  

и надо как то вычесть cnt новые из прошлых
cnt 1,2,3 прошлые
cnt 4,5,6 новые

 
Natashe4ka:

что то вроде этого:

double cnt=0;

if (op<0||OrderType()==op) {lastprof+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++}  

и надо как то вычесть cnt новые из прошлых
cnt 1,2,3 прошлые
cnt 4,5,6 новые

Да не, я не про то как у Вас уже написано.

Расскажите словами - расчет профита по каким закрытым ордерам Вас интересует

например:

- за день

- убыточные

- последний оредер

или как еще?

Серию опишите