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

 
Natashe4ka:

Так тоже правильно считает если "cnt" обнулить, но потом опять не понятное значение как на скрине №3 было (должно быть значение профита 4,27) 

double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  int cnt=0;
  double LastProfit=0;
   for(i=0;i<OrdersHistoryTotal();i++)
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
       if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
       if ((op<0 || OrderType()==op) && cnt==0) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++;} else {cnt=0;}
       }
  return(LastProfit);
   }

 

Плохо конечно, когда нет логического мышления(

 

Понимаете, в реальном рынке депозит растает через 3 дня с такой логикой работы. 

 
Vitaly Muzichenko:
Плохо конечно, когда нет логического мышления(

Эт точно.

delete это удалился отложенный ордер 

 
Natashe4ka:

Эт точно.

delete это удалился отложенный ордер 

Это понятно и без того.
 

Ладно, как тогда вернуть тикет закрытых ордеров которые равны OrderCloseTime() и посчитать их профит?
Типа такого: 

if (t<OrderCloseTime()) {t=OrderCloseTime();r=OrderTicket();profit+=OrderProfit()+OrderCommission()+OrderSwap();}


 

 
Natashe4ka:

Ладно, как тогда вернуть тикет закрытых ордеров которые равны OrderCloseTime() и посчитать их профит?
Типа такого: 

if (t<OrderCloseTime()) {t=OrderCloseTime();r=OrderTicket();profit+=OrderProfit()+OrderCommission()+OrderSwap();}


 

А если закроется по стопу?

ticket=OrderClose(......);

if(ticket>0){//увеличить размер массива на один и записать тикет закрытого ордера}

 
писал для себя систему учёта накопленной просадки или профита - выглядела она примерно так: к каждому рыночному ордеру во время открытия в пару создаётся глоб переменная с именем тикета этого ордера и когда нам нужно пересчитать накопленный профит/просадку, то мы просто сверяем текущий список ордеров со списком глобальных переменных и производим учёт путём удаления лишних переменных с зачислением профита напрямую по тикету из имени, всё, на каждом тике лучше не пересчитывать ибо тяжеловата система, пересчёт производить только по необходимости
 
Renat Akhtyamov:

А если закроется по стопу?

ticket=OrderClose(......);

if(ticket>0){//увеличить размер массива на один и записать тикет закрытого ордера}

Ну какие массивы, какие тикеты, какие ордера???

После первой перезагрузки терминала, или выключения на выходные вы просто потеряете все данные, на этом вся писанина и расчёты окончатся.

 
Aleksey Semenov:
писал для себя систему учёта накопленной просадки или профита - выглядела она примерно так: к каждому рыночному ордеру во время открытия в пару создаётся глоб переменная с именем тикета этого ордера и когда нам нужно пересчитать накопленный профит/просадку, то мы просто сверяем текущий список ордеров со списком глобальных переменных и производим учёт путём удаления лишних переменных с зачислением профита напрямую по тикету из имени, всё, на каждом тике лучше не пересчитывать ибо тяжеловата система, пересчёт производить только по необходимости

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

Есть время открытия и закрытия, от него и нужно работать, и получить его нет никаких трудностей, при этом с одной записи времени можно получить всю информацию о состоянии счёта, и велосипед не нужен.

 
Vitaly Muzichenko:

Ну какие массивы, какие тикеты, какие ордера???

После первой перезагрузки терминала, или выключения на выходные вы просто потеряете все данные, на этом вся писанина и расчёты окончатся.

это решаемо

не Вам мне объяснять

 
Vitaly Muzichenko:

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

Есть время открытия и закрытия, от него и нужно работать, и получить его нет никаких трудностей, при этом с одной записи времени можно получить всю информацию о состоянии счёта, и велосипед не нужен.

если у вас например терминал забит сотнями неиспользуемых глоб переменных то да - переборка закончится печально, если нет то работает вполне быстро, если написать правильно