Расчет лота для рублевого счета

 

Коллеги добрый день! Кто нибудь может подсказать как можно рассчитать стоимость лота для рублевого счета?

Пытался понять из калькулятора http://www.alpari.ru/ru/trading/calculator/

 
Ivan Gurlev:

Коллеги добрый день! Кто нибудь может подсказать как можно рассчитать стоимость лота для рублевого счета?

Пытался понять из калькулятора http://www.alpari.ru/ru/trading/calculator/

Так же, как и для любой другой валюты депозита:

1. Стоимость пункта: SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE).

2. Спред: SymbolInfoInteger(Symbol(), SYMBOL_SPREAD).

3. Своп Buy: SymbolInfoDouble(Symbol(), SYMBOL_SWAP_LONG).

4. Своп Sell: SymbolInfoDouble(Symbol(), SYMBOL_SWAP_SHORT). 

5. Маржа для открытия: SymbolInfoDouble(Symbol(), SYMBOL_MARGIN_INITIAL). 

Или интересуют формулы расчета? Если да, то укажите, какие именно величины Вас интересуют. 

 

интересует формулы расчета. Я написал вот такую функцию, которая это все учитывает. Но походу я чего то упустил, например для рублевого счета 2000 руб эта функция расчитала лот 0,56 если не ошибаюсь и в итоге при открытии сделки вышла ошибка не достаточно средств. Больше сделок не было открыто

double LotSize()
{       
   double  lot_min = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
   double  lot_max = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
   double  lrisk=0.0;
   double  lot= 0.0;
   if (LotRisk > 1) {                      
      lrisk=1;                          
   } else if (LotRisk<=0) {
      lot=Lots;
      if ( lot < lot_min ) lot = lot_min;
      if ( lot > lot_max ) lot = lot_max;
      return(lot);                     
   } else {
      lrisk=LotRisk;
   }
   double  lot_step = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP); 
   double  lotcost = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE);      
   //double  lotcost2 = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE_LOSS);      

   double  dollarsPerPip   = 0.0;
   lot = NormalizeDouble((AccountInfoDouble(ACCOUNT_FREEMARGIN)*lrisk/100.0/lot_step/lotcost)*lot_step, 2 );
   //lot = NormalizeDouble((ll*lrisk/100.0/lot_step/lotcost)*lot_step, 2 );

   if ( lot < lot_min ) lot = lot_min;
   if ( lot > lot_max ) lot = lot_max;

   return(lot);
} 
Причина обращения: