Проверка доступной маржи для открытия позиции

 

Собственно тему написал по своему запросу - статьи читал, Мат часть учил. Гугл не забанил :-)

 

появилась проблемка

 

пытаюсь перед открытием сделать проверку на доступную маржу:

      double margin;
        
        bool check = OrderCalcMargin(request.type,request.symbol,request.volume,request.price,margin); 

      if(check && margin<AccountInfoDouble(ACCOUNT_FREEMARGIN))OrderSend(request,result);

В тестере при таком коде - Доступная маржа = 0

 

по завершению тестера все ок:

 



 

 

 
кто как проверяет доступность маржи?
 
Print(check," ",margin," ",GetLastError());

вернул такое:

2013.07.25 20:34:21 2013.02.04 08:00:00   true 3.0 4753

 

ничего не понятно, пр икоде: 

        Print(margin,"---",AccountInfoDouble(ACCOUNT_FREEMARGIN));

 запись:

2013.07.25 20:55:36 2013.01.18 13:00:00   27.0---1000.0

 

Т.е. получается что терминал вернее эксперт получает что да, все ок.  

 

У меня так:

//--- проверка маржи
        double need_margin = 0.0;

        ResetLastError();
        if ( !OrderCalcMargin( ORDER_TYPE_BUY, pSymbol, Volume, SymbolInfoDouble( pSymbol, SYMBOL_ASK ), need_margin ) )
        {
                Print( "| OrderCalcMargin error #", GetLastError(), "!" );
                return(false);
        }
        else
        {
                double free_margin = AccountInfoDouble( ACCOUNT_FREEMARGIN );
                if ( free_margin < need_margin )
                {
                        Print( "| Not enough money for open BUY ", DoubleToString( Volume, 2 ), " lots ", pSymbol, " (free = ", DoubleToString( free_margin, 2 ), ", need = ", DoubleToString( need_margin, 2 ), ")!" );
                        return(false);
                }
        }
 
komposter:

У меня так:

Спасибо. Значит все ок. Отлично.