Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ivan Gurlev
572
Ivan Gurlev  

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

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

Ihor Herasko
14370
Ihor Herasko  
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). 

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

Ivan Gurlev
572
Ivan Gurlev  

интересует формулы расчета. Я написал вот такую функцию, которая это все учитывает. Но походу я чего то упустил, например для рублевого счета 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);
} 
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий