Проверка на достаточность средств

 

Подскажите, пожалуйста, как перед отправкой торгового приказа всегда проверять, достаточно ли на моем счете свободной маржи для открытия позиции.

 

Вопрос для mql4 или mql5?

 
Alexey Viktorov:

Вопрос для mql4 или mql5?

Вопрос для MQL4.
 

Подходит ли такой способ проверки?

if(AccountFreeMargin()<(1000*Lot))
  {
    Print("We have no money. Free Margin = ",AccountFreeMargin());
    return(0);
  }
 
про AccountFreeMarginCheck() справку почитайте, может это оно и есть?
 
Tatiana Zyrianova:

Подходит ли такой способ проверки?

Tatiana Zyrianova
:

Подходит ли такой способ проверки?

Что такое 1000, это со стены взято?

if(Lot*MarketInfo(Symbol(),MODE_MARGINREQUIRED) <= AccountFreeMargin())
 {
   // тут условие
 }
 
Vitaly Muzichenko:

Что такое 1000, это со стены взято?

if(Lot*MarketInfo(Symbol(),MODE_MARGINREQUIRED) <= AccountFreeMargin())
 {
   // тут условие
 }
Спасибо, то что нужно!!!
 
Tatiana Zyrianova:
Спасибо, то что нужно!!!

Выше указывали на AccountFreeMarginCheck - это самый простой и надежный способ. Ведь в примере от MVS не сделана проверка результата, который возвращает MarketInfo. С AccountFreeMarginCheck() делается так:

if (AccountFreeMarginCheck(Symbol(), orderType, volume) <= 0.0 || GetLastError() == ERR_NOT_ENOUGH_MONEY)
{
   // Средств недостаточно
}

 где orderType - OP_BUY или OP_SELL,

       volume - объем ордера. 

 

Поставь индикатор который будет показывать объем лота который можно приобрести исходя из средств на счету...

Пиши в личку могу поделиться.  Очень удобно... 

 

Для МТ5 можно использовать такое :

double GetMargin(const string symbol, const double volume, const string end = "")
{
    long leverage = AccountInfoInteger(ACCOUNT_LEVERAGE);
    double contract = SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE) * volume;
    string currency = StringSubstr(symbol, 0, 3) + AccountInfoString(ACCOUNT_CURRENCY) + end;
    return(SymbolInfoDouble(currency, SYMBOL_LAST) * contract / leverage);
}

if (AccountInfoInteger(ACCOUNT_BALANCE) > GetMargin("EURUSD", 2.0))
{
    // we have enough money to open position of 2 lots
}
 
Огромное спасибо за помощь!!!
Причина обращения: