не появляется советник - страница 2

 

Исправил так. Вместо

//+------------------------------------------------------------------+
//| Расчет оптимальной на взгляд автора величины лота                |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   if (isFloatLots == true) // если флаг true то проводится
// оптимизация величины лота, иначе лот неизменен
     {  
     int orders=HistoryTotal();  // history orders total
   int losses=0;     // number of losses orders without a break
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaxR/1000.0,1);
//---- calcuulate number of losses orders without a break
   if(DcF>0)
       {  
       for(int i=orders-1;i>=0;i--)
           {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) 
           { 
           Print("Ошибка в истории!"); 
           break;
           }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 
           continue;
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
           }
       if(losses>1) lot=NormalizeDouble(lot-lot*losses/DcF,1);
        }
     }  
//---- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }

Сделал вот так :

double LotsOptimized()
  {
   double lot=Lots;
   if (isFloatLots == true)// если флаг true то 
//проводится оптимизация величины лота, иначе лот неизменен
     {  
     int orders=HistoryTotal();  // history orders total
   int losses=0;               // number of losses orders without a break
//---- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaxR/1000.0,2);
//---- calcuulate number of losses orders without a break
   if(DcF>0)
       {  
       for(int i=orders-1;i>=0;i--)
           {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) 
           { 
           Print("Ошибка в истории!"); 
           break;
           }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) 
           continue;
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
           }
       if(losses>1) lot=NormalizeDouble(lot-lot*losses/DcF,2);
        }
     }  
//---- return lot size
   if(lot<0.01) lot=0.01;
   return(lot);
  }
 
rid писал(а) >>

Исправил так. Вместо

Сделал вот так :

Благодарствую Тебе rid, такой же прицип применяется и в других советниках?

 

Не всегда.

Это зависит от алгоритма работы советника. Наличия блока ММ и т.п. ...