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

 
Natashe4ka:
Ордера закрываются серией, но если условий для закрытия нет, то ордера собираются день-два и т.д.

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

Правда, есть опасения, что работать это будет только в тестере, любое вмешательство ручной торговлей - и профит будет вычислен неправильно (будет учтён только профит советника, а наторгованное вручную - нет) .

 
Vitalie Postolache:
Ну если закрывается серия практически за один цикл, ну, допустим, за время жизни одного бара, то и критерий серии тогда можно взять по времени закрытия плюс один бар. То есть все ордера, время закрытия которых меньше, отбрасывать.

Т.е.

if ((op<0||OrderType()==op) && (t==OrderCloseTime() || t==OrderCloseTime()+60)) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}

(t==OrderCloseTime() || t==OrderCloseTime()+60) ?
 

 
Natashe4ka:

Т.е.

if ((op<0||OrderType()==op) && t==OrderCloseTime()+60) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap();}

+60 ?
 

PeriodSeconds() правильней будет. Или собираетесь только на М1 работать?

Как-то вот так:

double lastloss()
{
double lastlos=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
         {
            if(cnt==0) time=OrderCloseTime();
            op=OrderProfit()+OrderSwap()+OrderCommission();
            if(OrderCloseTime()+PeriodSeconds()<time && op>0.0) break;
            lastlos+=op;
            if(cnt!=0) cnt++;
         }
      }
}
return(lastlos);
}


 

 
Vitalie Postolache:

Как-то вот так:

Так прибавляется новое значение к предыдущему. А надо каждое новое закрытие, новое значение профита.
 

А ещё можно нумеровать ордера в комментарии, для тех ДЦ, которые не затирают комментарий. И при переборе вычленять номер из комментария, как только номер не по порядку - серия всё.

Пример: ордера серии № 1,2,3,4,5. Закрыты в порядке 5,4,3,2,1 - цикл видит 1 и прерывается. Закрытие в порядке 1,2,3,4,5 и 1 (номер ордера предыдущей серии) - цикл видит разницу 5-1>1 и прерывается. Надо подумать, как это в код перевести )))

 
Natashe4ka:
Так прибавляется новое значение к предыдущему. А надо каждое новое закрытие, новое значение профита.
ну не знаю, у меня не прибавляется.
 
Vitalie Postolache:
ну не знаю, у меня не прибавляется.

Вы поставьте себе инфо и сразу увидите что прибавляется

color ProfitColor;

   if(lastloss()<0) ProfitColor=Red;
   if(lastloss()>0) ProfitColor=LimeGreen;
   if(lastloss()==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(lastloss(),2)),10,"Arial",ProfitColor);


 

 
Natashe4ka:

Вы поставьте себе инфо и сразу увидите что прибавляется 

Хмм, да, действительно... Будем думать дальше )))
 
Это я так понял проверка в тестере....
 
Vitalie Postolache:
Хмм, да, действительно... Будем думать дальше )))

Мне тоже казалось что всё считает как надо.
Не надо было мне ставить это инфо в код и жить было бы легче)) 

А теперь покоя не даёт, как это всё это время функция работала не правильно!! 

Причина обращения: