Скачать MetaTrader 5

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

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

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

Alexey Viktorov
20679
Alexey Viktorov  

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

Tatiana Zyrianova
13564
Tatiana Zyrianova  
Alexey Viktorov:

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

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

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

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

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

Tatiana Zyrianova
:

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

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

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

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

if(Lot*MarketInfo(Symbol(),MODE_MARGINREQUIRED) <= AccountFreeMargin())
 {
   // тут условие
 }
Спасибо, то что нужно!!!
Ihor Herasko
16448
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
1042
Andrey  

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

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

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