Как определить максимально доступный объём позиции по фьючерсу РТС?

 

Добрый день!

Весь форум облазил, уже и самому смешно, но не могу ничего найти - помогите, пожалуйста.

В  советнике перед входом в позицию по фьючерсу РТС надо вычислить максимально доступный объём сделки (с учётом баланса по счёту и свойств самого фьючерса). Не верю, что нет какой-то простой функции, но найти не смог.

Использую так:  int(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL)) - но это же как-то криво!

 
С понятием "планка" знакомы ? Если нет, то рекомендую весьма, иначе приведёт она вас с таким вот расчётом к коляну. Он любит такие формулы )))
 
micle:
С понятием "планка" знакомы ? Если нет, то рекомендую весьма, иначе приведёт она вас с таким вот расчётом к коляну. Он любит такие формулы )))

Большое спасибо, Ваш ответ был очень полезен.

Возможно, другие участники знают альтернативные варианты решения?

 
dj_nsk:

Большое спасибо, Ваш ответ был очень полезен.

Возможно, другие участники знают альтернативные варианты решения?

Ваше решение почему не устраивает?
 

Так не пробовали?

double MaxLots(string symbol,ENUM_ORDER_TYPE action)
  {
   double FreeMargin,Margin1Lot,Lots=0,OpenPrice;
   if(action==ORDER_TYPE_BUY) OpenPrice=SymbolInfoDouble(symbol,SYMBOL_ASK);
   else                       OpenPrice=SymbolInfoDouble(symbol,SYMBOL_BID);
   //Текущий размер свободных средств
   FreeMargin=AccountInfoDouble(ACCOUNT_FREEMARGIN);
   //Размер средств для открытия 1 лота
   OrderCalcMargin(action,symbol,1.0,OpenPrice,Margin1Lot);
   
   if(Margin1Lot!=0) Lots=FreeMargin/Margin1Lot;
   return(Lots);
  }
 
vicmos:

Так не пробовали?

Спасибо, попробовал. Ещё и через методы класса CAccountInfo (например, MaxLotCheck()). Похоже на правду, но есть странность. Иногда (пока закономерность не понял) если робот, например, находится в лонге и надо развернуться на всю катушку в шорт - он выдаёт мне "not enough money". Ищу дальше...
Причина обращения: