Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Tatiana Zyrianova
10685
Tatiana Zyrianova  

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

Alexey Viktorov
8022
Alexey Viktorov  

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

Tatiana Zyrianova
10685
Tatiana Zyrianova  
Alexey Viktorov:

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

Вопрос для MQL4.
Tatiana Zyrianova
10685
Tatiana Zyrianova  

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

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

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

Tatiana Zyrianova
:

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

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

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

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

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

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

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

 где orderType - OP_BUY или OP_SELL,

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

Andrey
943
Andrey  

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

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

Andy
564
Andy  

Для МТ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
}
Tatiana Zyrianova
10685
Tatiana Zyrianova  
Огромное спасибо за помощь!!!
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий