//+------------------------------------------------------------------+
//|                                                       b-Lots.mqh |
//|                                           Ким Игорь В. aka KimIV |
//|                                              http://www.kimiv.ru |
//|                                                                  |
//|  21.12.2005  Библиотека функций расчёта размера лота.            |
//+------------------------------------------------------------------+

//------- Внешние параметры модуля -----------------------------------
extern string _Parameters_b_Lots = "---------- Параметры модуля расчёта лота";
extern int LotsWayChoice  = 0;    // Способ выбора рабочего лота:
                                  //  0-фиксированный,
                                  //  1-процент от депозита,
                                  //  2-фракционно-пропорциональный,
                                  //  3-фракционно-фиксированный,
extern double Lots        = 0.1;  // Фиксированный размер лота
extern int LotsPercent    = 10;   // Процент от депозита
extern int LotsDeltaDepo  = 500;  // Коэффициент приращения депозита
extern int LotsDepoForOne = 500;  // Размер депозита для одного минилота
extern int LotsMax        = 1000; // Максимальное количество минилотов


//+------------------------------------------------------------------+
//| Главная функция получения размера лота (вызывается из советника) |
//+------------------------------------------------------------------+
double GetSizeLot()
{
  double dLot;

  if (LotsWayChoice==0) dLot=Lots;

  // фиксированный процент от депозита
  if (LotsWayChoice==1)
  {
    dLot=MathCeil(AccountFreeMargin()/10000*LotsPercent)/10;
  }

  // фракционно-пропорциональный
  if (LotsWayChoice==2)
  {
    int k=LotsDepoForOne;
    for (double i=2; i<=LotsMax; i++)
    {
      k=k+i*LotsDeltaDepo;
      if (k>AccountFreeMargin())
      {
        dLot=(i-1)/10; break;
      }
    }
  }

  // фракционно-фиксированный
  if (LotsWayChoice==3)
  {
    dLot=MathCeil((AccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10;
  }

  if (dLot<0.1) dLot=0.1;
  return(dLot);
}
//+------------------------------------------------------------------+

