Написал сеточного эксперта, который открывает 2 сетки стоп ордеров в разных направлениях. Во время запуска эксперта стоит проверка Account margin mode, которая видает следующее сообщение: "Alert: Account margin mode is ACCOUNT_MARGIN_MODE_RETAIL_NETTING It does not allow to open more than one market position. Grid work is impossible!
" То есть, на аккаунтах с неттинговым учетом ордеров невозможно открыть больше одной позиции.
Но ведь я регистрировал аккаунт с возможностью хеджирования:
То есть, по идее должно быть, ACCOUNT_MARGIN_MODE_RETAIL_HEDGING, а не ACCOUNT_MARGIN_MODE_RETAIL_NETTING.
И следующий скрин так же показывает что-то непонятное:
Не знаю, хорошо ли видно, в подсказке, слово Hedge, обведенное красным... Но Account margin mode всё равно ACCOUNT_MARGIN_MODE_RETAIL_NETTING. Как так получилось, я же оставил хеджирование при регистрации... И как сделать, всё таки, чтобы было ACCOUNT_MARGIN_MODE_RETAIL_HEDGING?
Код проверки можно увидеть Ваш?
Добавлено: Вот как проверяю я - скриптом:
//+------------------------------------------------------------------+ //| MarginMode.mq5 | //| Copyright © 2017, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2017, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.00" #include <Trade\AccountInfo.mqh> CAccountInfo m_account; // account info wrapper //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- Print("Server: ",m_account.Server()); Print("Company: ",m_account.Company()); Print("MarginMode: ",EnumToString(ENUM_ACCOUNT_MARGIN_MODE(m_account.MarginMode()))); Print(""); }
И всё работает.
Код проверки можно увидеть Ваш?
Конечно. Проверяю с помощью стандартных функций. И вроде все сделал правильно
if(AccountInfoInteger(ACCOUNT_TRADE_MODE) == ACCOUNT_MARGIN_MODE_RETAIL_NETTING || AccountInfoInteger(ACCOUNT_TRADE_MODE) == ACCOUNT_MARGIN_MODE_EXCHANGE){ // Сообщение об ошибке Alert("Account margin mode is "+EnumToString((ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE))+" It does not allow to open more than one market position. Grid work is impossible!"); return false; }Попробую проверить Вашим скриптом.
Конечно. Проверяю с помощью стандартных функций. И вроде все сделал правильно
Попробую проверить Вашим скриптом.MarginMode и TradeMode теперь возвращают не long, а сразу ENUM_ - поэтому немного изменил скрипт, а так же вставил строку:
//+------------------------------------------------------------------+ //| MarginMode.mq5 | //| Copyright © 2017, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2017, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.001" #include <Trade\AccountInfo.mqh> CAccountInfo m_account; // account info wrapper //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- Print("Server: ",m_account.Server()); Print("Company: ",m_account.Company()); Print("MarginMode: ",EnumToString(m_account.MarginMode())); Print("TradeMode: ",EnumToString(m_account.TradeMode())); Print(""); } //+------------------------------------------------------------------+
и результат:
Server: MetaQuotes-Demo Company: MetaQuotes Software Corp. MarginMode: ACCOUNT_MARGIN_MODE_RETAIL_HEDGING TradeMode: ACCOUNT_TRADE_MODE_DEMO
Странно, но у меня тоже показывает ACCOUNT_MARGIN_MODE_RETAIL_HEDGING
Почему такие разбежности, функция AccountInfoInteger(ACCOUNT_TRADE_MODE) врёт?
Странно, но показывает ACCOUNT_MARGIN_MODE_RETAIL_HEDGING
Почему такие разбежности, функция AccountInfoInteger(ACCOUNT_TRADE_MODE) врёт?
Никто не врёт.
ACCOUNT_TRADE_MODE | Account trade mode |
Identifier | Description |
ACCOUNT_TRADE_MODE_DEMO | Demo account |
ACCOUNT_TRADE_MODE_CONTEST | Contest account |
ACCOUNT_TRADE_MODE_REAL | Real account |
а Вы сравниваете ENUM одного типа с ENUM совершенно другого типа:
if(AccountInfoInteger(ACCOUNT_TRADE_MODE) == ACCOUNT_MARGIN_MODE_RETAIL_NETTING
Identifier | Description |
ACCOUNT_MARGIN_MODE_RETAIL_NETTING | Used for the OTC markets to interpret positions in the "netting" mode (only one position can exist for one symbol). The margin is calculated based on the symbol type (SYMBOL_TRADE_CALC_MODE). |
ACCOUNT_MARGIN_MODE_EXCHANGE | Used for the exchange markets. Margin is calculated based on the discounts specified in symbol settings. Discounts are set by the broker, but not less than the values set by the exchange. |
ACCOUNT_MARGIN_MODE_RETAIL_HEDGING | Used for the exchange markets where individual positions are possible (hedging, multiple positions can exist for one symbol). The margin is calculated based on the symbol type (SYMBOL_TRADE_CALC_MODE) taking into account the hedged margin (SYMBOL_MARGIN_HEDGED). |
Никто не врёт.
ACCOUNT_TRADE_MODE | Account trade mode |
Identifier | Description |
ACCOUNT_TRADE_MODE_DEMO | Demo account |
ACCOUNT_TRADE_MODE_CONTEST | Contest account |
ACCOUNT_TRADE_MODE_REAL | Real account |
а Вы сравниваете ENUM одного типа с ENUM совершенно другого типа:
Да, не помню, что заставило меня запихнуть в AccountInfoInteger по ошибке ACCOUNT_TRADE_MODE и быть уверенным, что я всё делаю правильно :) Раньше, писал подобные эксперты для МТ4 и проблем не возникало. Спасибо за подсказку, Владимир!
А ..., пожалуйста.
Кстати, пользуйте торговые классы - как в моём примере. Писанины меньше, а наглядность выше.
А ..., пожалуйста.
Кстати, пользуйте торговые классы - как в моём примере. Писанины меньше, а наглядность выше.
А ..., пожалуйста.
Кстати, пользуйте торговые классы - как в моём примере. Писанины меньше, а наглядность выше.
У меня эксперт сделан в виде класса, но чтобы сделать простые вещи всегда использую стандартные АПИ. Разбирать другой код лень, если чесно. Но обязательно по изучаю. Это и вправду удобнее, чем стандартные АПИ.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Написал сеточного эксперта, который открывает 2 сетки стоп ордеров в разных направлениях. Во время запуска эксперта стоит проверка Account margin mode, которая видает следующее сообщение: "Alert: Account margin mode is ACCOUNT_MARGIN_MODE_RETAIL_NETTING It does not allow to open more than one market position. Grid work is impossible!
" То есть, на аккаунтах с неттинговым учетом ордеров невозможно открыть больше одной позиции.
Но ведь я регистрировал аккаунт с возможностью хеджирования:
То есть, по идее должно быть, ACCOUNT_MARGIN_MODE_RETAIL_HEDGING, а не ACCOUNT_MARGIN_MODE_RETAIL_NETTING.
И следующий скрин так же показывает что-то непонятное:
Не знаю, хорошо ли видно, в подсказке, слово Hedge, обведенное красным... Но Account margin mode всё равно ACCOUNT_MARGIN_MODE_RETAIL_NETTING. Как так получилось, я же оставил хеджирование при регистрации... И как сделать, всё таки, чтобы было ACCOUNT_MARGIN_MODE_RETAIL_HEDGING?