Не корректно работает функция увеличения лота

 

  Стоп лосс и тейк профит в соотношении 1/4 (это один из вариантов) . При срабатывании 5-и лоссов  на 6-ом увеличиваем лот для отработки убытка. На 8-ми кратном увеличении останавливаем увеличение.

Все что мог придумать.  Работает не корректно.

  
  extern int      StopLoss=300;                                  
  extern int      TakeProfit=1200;
  extern double   Lot=0.01;                                       // Начальный лот
  double Old_Free,                                                // Прежние средства
  New_Free,                                                       // Новые средства
  Lts;                                                            // Объем для открытия сделки   
 
 
   Lot_Val =MarketInfo(Symbol(),MODE_TICKVALUE);                  // Размер минимального изменения цены инструмента в валюте депозита
   
   pr=(Lot_Val*Lts)*TakeProfit;                                   // Размер прибыли в валюте депозита
   
   if (isCloseLastPosByTake()==true)                              // Если сработал тейк профит
   
   Old_Free=New_Free;                                             // Прежние средства равны новым средствам 
   
   Lts=Lot;                                                       // Лот понижаеться до начального уровня
   
   
   if (Old_Free>New_Free)                                         // Если средства убывают 
                                                                 
   rr=Old_Free-New_Free;                                          // Узнаем на сколько
   
   if (rr>=pr)                                                    // Если убыток становиться больше или равно размеру прибыли
   {
   Lts=rr/TakeProfit;                                             // Вычисляем лот для отработки убытка
   }
    if (Lts>Lot*8)                                                // Если достигли 8-ми кратного увеличения                                                
   {
    Lts=Lot*8;                                                    // То останавливаемся
   }
 //--------------------------------------------------------------------------------------------------------+  
   
  bool isCloseLastPosByTake(string sy=NULL, int op=-1, int mn=-1) {
  datetime t=0;
  double   ocp, otp ;
  int     dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy==NULL) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), NULL)<0) dg=5; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(true);
  }
  return(false);