#ifdef __MQL4__
void InfoAccountSymbolPrint(string _symbol)
{
Print(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_TICK_SIZE: ",SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_SIZE)); // Минимальное изменение ценыPrint(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_TICK_VALUE: ",SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE)); // Рассчитанная стоимость тика Print(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_CONTRACT_SIZE: ",SymbolInfoDouble(_symbol, SYMBOL_TRADE_CONTRACT_SIZE)); // Размер торгового контрактаPrint(">>>InfoAccountSymbolPrint(): ACCOUNT_LEVERAGE: ",AccountInfoInteger(ACCOUNT_LEVERAGE)); // Плечо//SYMBOL_MARGIN_INITIAL Начальная (инициирующая) маржа обозначает размер необходимых залоговых средств в маржинальной валюте //для открытия позиции объемом в один лот. Используется при проверке средств клиента при входе в рынок. //Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().Print(">>>InfoAccountSymbolPrint(): SYMBOL_MARGIN_INITIAL: ",SymbolInfoDouble(_symbol, SYMBOL_MARGIN_INITIAL));
//SYMBOL_MARGIN_MAINTENANCE Поддерживающая маржа по инструменту. В случае если задана – указывает размер маржи в маржинальной валюте инструмента, //удерживаемой с одного лота. Используется при проверке средств клиента при изменении состояния счета клиента. //Если поддерживающая маржа равна 0, то используется начальная маржа.//Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().Print(">>>InfoAccountSymbolPrint(): SYMBOL_MARGIN_MAINTENANCE: ",SymbolInfoDouble(_symbol, SYMBOL_MARGIN_MAINTENANCE));
Print(">>>InfoAccountSymbolPrint(): account_currency: ",SymbolInfoString(_symbol, SYMBOL_CURRENCY_BASE)); // Базовая валюта инструментаPrint(">>>InfoAccountSymbolPrint(): symbol_currency_base: ",SymbolInfoString(_symbol, SYMBOL_CURRENCY_PROFIT)); // Валюта прибылиPrint(">>>InfoAccountSymbolPrint(): symbol_currency_profit: ",SymbolInfoString(_symbol, SYMBOL_CURRENCY_MARGIN)); // Валюта в которой вычисляется залоговые средстваPrint(">>>InfoAccountSymbolPrint(): symbol_currency_margin: ",SymbolInfoString(_symbol, SYMBOL_DESCRIPTION)); // Строковое описание символаPrint(">>>InfoAccountSymbolPrint(): symbol_description: ",SymbolInfoString(_symbol, SYMBOL_PATH)); // Путь в дереве символовPrint(">>>InfoAccountSymbolPrint(): symbol_path: ",AccountInfoString(ACCOUNT_CURRENCY)); // Валюта депозита//Margin calculation mode. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD for indicesint CalcMode = (int)SymbolInfoInteger(_symbol, SYMBOL_TRADE_CALC_MODE); // Способ вычисления стоимости контрактаstring CalcModeTXT = "";
switch (CalcMode)
{
case0:
CalcModeTXT = "Forex";
break;
case1:
CalcModeTXT = "CFD";
break;
case2:
CalcModeTXT = "Futures";
break;
case3:
CalcModeTXT = "CFD for indices";
break;
}
//--- выведем в журнал советника способ вычисления стоимости контрактаPrint(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_CALC_MODE: ", CalcMode, " ", CalcModeTXT);
}
#endif
Извиняюсь, обнаружил ошибки в функции для mql5, исправляюсь:
#ifdef __MQL5__//+------------------------------------------------------------------+//| вывод на печать параметров символа и аккаунта |//+------------------------------------------------------------------+void InfoAccountSymbolPrint(string _symbol)
{
Print(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_TICK_SIZE: ",SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_SIZE)); // Минимальное изменение ценыPrint(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_TICK_VALUE: ",SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE)); // Рассчитанная стоимость тика Print(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_CONTRACT_SIZE: ",SymbolInfoDouble(_symbol, SYMBOL_TRADE_CONTRACT_SIZE)); // Размер торгового контрактаPrint(">>>InfoAccountSymbolPrint(): ACCOUNT_LEVERAGE: ",AccountInfoInteger(ACCOUNT_LEVERAGE)); // Плечо//SYMBOL_MARGIN_INITIAL Начальная (инициирующая) маржа обозначает размер необходимых залоговых средств в маржинальной валюте //для открытия позиции объемом в один лот. Используется при проверке средств клиента при входе в рынок. //Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().Print(">>>InfoAccountSymbolPrint(): SYMBOL_MARGIN_INITIAL: ",SymbolInfoDouble(_symbol, SYMBOL_MARGIN_INITIAL));
//SYMBOL_MARGIN_MAINTENANCE Поддерживающая маржа по инструменту. В случае если задана – указывает размер маржи в маржинальной валюте инструмента, //удерживаемой с одного лота. Используется при проверке средств клиента при изменении состояния счета клиента. //Если поддерживающая маржа равна 0, то используется начальная маржа.//Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().Print(">>>InfoAccountSymbolPrint(): SYMBOL_MARGIN_MAINTENANCE: ",SymbolInfoDouble(_symbol, SYMBOL_MARGIN_MAINTENANCE));
double symbolMarginInitialRate = 0.0;
double symbolMarginMaintenanceRate = 0.0;
SymbolInfoMarginRate(_symbol, ORDER_TYPE_BUY, symbolMarginInitialRate, symbolMarginMaintenanceRate);
Print(">>>InfoAccountSymbolPrint(): symbolMarginInitialRate: ",symbolMarginInitialRate); // коэффициент взимания начальной маржиPrint(">>>InfoAccountSymbolPrint(): symbolMarginMaintenanceRate: ",symbolMarginMaintenanceRate); // коэффициент взимания поддерживающей маржиPrint(">>>InfoAccountSymbolPrint(): account_currency: ",AccountInfoString(ACCOUNT_CURRENCY)); // Валюта депозитаPrint(">>>InfoAccountSymbolPrint(): symbol_currency_base: ",SymbolInfoString(_symbol, SYMBOL_CURRENCY_BASE)); // Базовая валюта инструментаPrint(">>>InfoAccountSymbolPrint(): symbol_currency_profit: ",SymbolInfoString(_symbol, SYMBOL_CURRENCY_PROFIT)); // Валюта прибылиPrint(">>>InfoAccountSymbolPrint(): symbol_currency_margin: ",SymbolInfoString(_symbol, SYMBOL_CURRENCY_MARGIN)); // Валюта в которой вычисляется залоговые средстваPrint(">>>InfoAccountSymbolPrint(): symbol_description: ",SymbolInfoString(_symbol, SYMBOL_DESCRIPTION)); // Строковое описание символаPrint(">>>InfoAccountSymbolPrint(): symbol_path: ",SymbolInfoString(_symbol, SYMBOL_PATH)); // Путь в дереве символовint CalcMode = (int)SymbolInfoInteger(_symbol, SYMBOL_TRADE_CALC_MODE); // Способ вычисления стоимости контрактаstring CalcModeTXT = "";
switch (CalcMode)
{
caseSYMBOL_CALC_MODE_FOREX:
CalcModeTXT = "SYMBOL_CALC_MODE_FOREX";
break;
caseSYMBOL_CALC_MODE_FOREX_NO_LEVERAGE:
CalcModeTXT = "SYMBOL_CALC_MODE_FOREX_NO_LEVERAGE";
break;
caseSYMBOL_CALC_MODE_FUTURES:
CalcModeTXT = "SYMBOL_CALC_MODE_FUTURES";
break;
caseSYMBOL_CALC_MODE_CFD:
CalcModeTXT = "SYMBOL_CALC_MODE_CFD";
break;
caseSYMBOL_CALC_MODE_CFDINDEX:
CalcModeTXT = "SYMBOL_CALC_MODE_CFDINDEX";
break;
caseSYMBOL_CALC_MODE_CFDLEVERAGE:
CalcModeTXT = "SYMBOL_CALC_MODE_CFDLEVERAGE";
break;
caseSYMBOL_CALC_MODE_EXCH_STOCKS:
CalcModeTXT = "SYMBOL_CALC_MODE_EXCH_STOCKS";
break;
caseSYMBOL_CALC_MODE_EXCH_FUTURES:
CalcModeTXT = "SYMBOL_CALC_MODE_EXCH_FUTURES";
break;
caseSYMBOL_CALC_MODE_EXCH_FUTURES_FORTS:
CalcModeTXT = "SYMBOL_CALC_MODE_EXCH_FUTURES_FORTS";
break;
caseSYMBOL_CALC_MODE_EXCH_BONDS:
CalcModeTXT = "SYMBOL_CALC_MODE_EXCH_BONDS";
break;
caseSYMBOL_CALC_MODE_EXCH_STOCKS_MOEX:
CalcModeTXT = "SYMBOL_CALC_MODE_EXCH_STOCKS_MOEX";
break;
caseSYMBOL_CALC_MODE_EXCH_BONDS_MOEX:
CalcModeTXT = "SYMBOL_CALC_MODE_EXCH_BONDS_MOEX";
break;
caseSYMBOL_CALC_MODE_SERV_COLLATERAL:
CalcModeTXT = "SYMBOL_CALC_MODE_SERV_COLLATERAL";
break;
}
//--- выведем в журнал советника способ вычисления стоимости контрактаPrint(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_CALC_MODE: ", CalcMode, " ", CalcModeTXT);
}
#endif
#ifdef __MQL4__
void InfoAccountSymbolPrint(string _symbol)
{
Print(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_TICK_SIZE: ",SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_SIZE)); // Минимальное изменение ценыPrint(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_TICK_VALUE: ",SymbolInfoDouble(_symbol, SYMBOL_TRADE_TICK_VALUE)); // Рассчитанная стоимость тика Print(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_CONTRACT_SIZE: ",SymbolInfoDouble(_symbol, SYMBOL_TRADE_CONTRACT_SIZE)); // Размер торгового контрактаPrint(">>>InfoAccountSymbolPrint(): ACCOUNT_LEVERAGE: ",AccountInfoInteger(ACCOUNT_LEVERAGE)); // Плечо//SYMBOL_MARGIN_INITIAL Начальная (инициирующая) маржа обозначает размер необходимых залоговых средств в маржинальной валюте //для открытия позиции объемом в один лот. Используется при проверке средств клиента при входе в рынок. //Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().Print(">>>InfoAccountSymbolPrint(): SYMBOL_MARGIN_INITIAL: ",SymbolInfoDouble(_symbol, SYMBOL_MARGIN_INITIAL));
//SYMBOL_MARGIN_MAINTENANCE Поддерживающая маржа по инструменту. В случае если задана – указывает размер маржи в маржинальной валюте инструмента, //удерживаемой с одного лота. Используется при проверке средств клиента при изменении состояния счета клиента. //Если поддерживающая маржа равна 0, то используется начальная маржа.//Для получения информации о размере взимаемой маржи в зависимости от типа и направления ордера используется функция SymbolInfoMarginRate().Print(">>>InfoAccountSymbolPrint(): SYMBOL_MARGIN_MAINTENANCE: ",SymbolInfoDouble(_symbol, SYMBOL_MARGIN_MAINTENANCE));
Print(">>>InfoAccountSymbolPrint(): account_currency: ",SymbolInfoString(_symbol, SYMBOL_CURRENCY_BASE)); // Базовая валюта инструментаPrint(">>>InfoAccountSymbolPrint(): symbol_currency_base: ",SymbolInfoString(_symbol, SYMBOL_CURRENCY_PROFIT)); // Валюта прибылиPrint(">>>InfoAccountSymbolPrint(): symbol_currency_profit: ",SymbolInfoString(_symbol, SYMBOL_CURRENCY_MARGIN)); // Валюта в которой вычисляется залоговые средстваPrint(">>>InfoAccountSymbolPrint(): symbol_currency_margin: ",SymbolInfoString(_symbol, SYMBOL_DESCRIPTION)); // Строковое описание символаPrint(">>>InfoAccountSymbolPrint(): symbol_description: ",SymbolInfoString(_symbol, SYMBOL_PATH)); // Путь в дереве символовPrint(">>>InfoAccountSymbolPrint(): symbol_path: ",AccountInfoString(ACCOUNT_CURRENCY)); // Валюта депозита//Margin calculation mode. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD for indicesint CalcMode = (int)SymbolInfoInteger(_symbol, SYMBOL_TRADE_CALC_MODE); // Способ вычисления стоимости контрактаstring CalcModeTXT = "";
switch (CalcMode)
{
case0:
CalcModeTXT = "Forex";
break;
case1:
CalcModeTXT = "CFD";
break;
case2:
CalcModeTXT = "Futures";
break;
case3:
CalcModeTXT = "CFD for indices";
break;
}
//--- выведем в журнал советника способ вычисления стоимости контрактаPrint(">>>InfoAccountSymbolPrint(): SYMBOL_TRADE_CALC_MODE: ", CalcMode, " ", CalcModeTXT);
}
#endif
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Удобно разместить эту функцию в OnInit() (mql5).
Вот аналог для mql4
Извиняюсь, обнаружил ошибки в функции для mql5, исправляюсь:
В документации не нашел про то, что в индикаторах функция OrderCalcMargin не работает. Разработчики MetaQuotes, прокомментируйте ситуацию, плз.
Попробуйте отпечатать ошибку. Там, по-моему, выдает:
ERR_FUNCTION_NOT_ALLOWED
4014
Системная функция не разрешена для вызова
Есть костыли вот в этой теме: https://www.mql5.com/ru/forum/261138#comment_48424556