Открытие ордеров в функции,в зависимости от убытка

 

Уважаемые форумчане!

В‌озникла идея добавить в функцию расчета объема позиций условие,если последний ордер закрылся с убытком ,то следующий выставляется с увеличенным коэффициентом.

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

Подскажите,что делаю не так?

 ‌  

                       

         double GetLot(int type)

                                   {
                                   if(CountOrdersType(type)==0 || LastOrderTypeLots(type)>Max_Lot)
                                  {
                                   if(!Auto_Lot) return(Start_Lot); //возврат начального лота,если флаг разрешения выключен
              return(AccountBalance()*(Lot_Percents/100)*AccountLeverage()/MarketInfo(Symbol(),MODE_LOTSIZE)); }//возврат расчетного лота,если флаг разрешения включен
                          { if(!History) return(Start_Lot); //возврат начального лота,если флаг разрешения выключен
                             datetime time=0;double lastlot=0;int lastop=0;double prof=0;
                              for(int i=OrdersHistoryTotal()-1;i>=0;i--)
                                  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic&&OrderType()<=1)
                       {
                          if(time<OrderCloseTime()){time=OrderCloseTime();lastlot=OrderLots();lastop=OrderType();prof=OrderProfit();}
                        }
                        if(prof < 0 && OrderMagicNumber() == Magic)lot=OrderLots();
                             return(lot * History_Multiplier); } //возврат расчетного лота с коэффициентом умножения,если есть последний ордер закрылся с убытком.
                             return(LastOrderTypeLots(type)*Lot_Multiplier); //возврат расчетного лота с коэффициентом умножения,если есть открытый ордер и открывается следующий.

                           }

 
Ирина Минина:

Уважаемые форумчане!

В‌озникла идея добавить в функцию расчета объема позиций условие,если последний ордер закрылся с убытком ,то следующий выставляется с увеличенным коэффициентом.

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

Подскажите,что делаю не так?

 ‌  

                       

         double GetLot(int type)

                                   {
                                   if(CountOrdersType(type)==0 || LastOrderTypeLots(type)>Max_Lot)
                                  {
                                   if(!Auto_Lot) return(Start_Lot); //возврат начального лота,если флаг разрешения выключен
              return(AccountBalance()*(Lot_Percents/100)*AccountLeverage()/MarketInfo(Symbol(),MODE_LOTSIZE)); }//возврат расчетного лота,если флаг разрешения включен
                          { if(!History) return(Start_Lot); //возврат начального лота,если флаг разрешения выключен
                             datetime time=0;double lastlot=0;int lastop=0;double prof=0;
                              for(int i=OrdersHistoryTotal()-1;i>=0;i--)
                                  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic&&OrderType()<=1)
                       {
                          if(time<OrderCloseTime()){time=OrderCloseTime();lastlot=OrderLots();lastop=OrderType();prof=OrderProfit();}
                        }
                        if(prof < 0 && OrderMagicNumber() == Magic)lot=OrderLots();
                             return(lot * History_Multiplier);
} //возврат расчетного лота с коэффициентом умножения,если есть последний ордер закрылся с убытком.
                             return(LastOrderTypeLots(type)*Lot_Multiplier); //возврат расчетного лота с коэффициентом умножения,если есть открытый ордер и открывается следующий.

                           }

Зачеркнутый оператор точно неверно написан. Ожидалось
                        if ( prof < -0.001 ) return( lastlot * History_Multiplier ); }