Account margin mode на демо счёте Meta Quotes Software Corp

 

Написал сеточного эксперта, который открывает 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?

 
Mihail Matkovskij:

Написал сеточного эксперта, который открывает 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("");
  }


И всё работает.

Файлы:
 
Vladimir Karputov:

Код проверки можно увидеть Ваш?

Конечно. Проверяю  с помощью стандартных функций. И вроде все сделал правильно

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;
    }
Попробую проверить Вашим скриптом.
 
Mihail Matkovskij:

Конечно. Проверяю  с помощью стандартных функций. И вроде все сделал правильно

Попробую проверить Вашим скриптом.

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) врёт?

 
Mihail Matkovskij:

Странно, но показывает ACCOUNT_MARGIN_MODE_RETAIL_HEDGING

Почему такие разбежности, функция AccountInfoInteger(ACCOUNT_TRADE_MODE) врёт?


Никто не врёт.

ACCOUNT_TRADE_MODE

Account trade mode

ENUM_ACCOUNT_TRADE_MODE


ENUM_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

ENUM_ACCOUNT_MARGIN_MODE

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).

 
Vladimir Karputov:

Никто не врёт.

ACCOUNT_TRADE_MODE

Account trade mode

ENUM_ACCOUNT_TRADE_MODE


ENUM_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 и проблем не возникало. Спасибо за подсказку, Владимир!
 
Mihail Matkovskij:
Да, не помню, что заставило меня запихнуть в AccountInfoInteger  по ошибке ACCOUNT_TRADE_MODE и быть уверенным, что я всё делаю правильно :) Раньше, писал подобные эксперты для МТ4 и проблем не возникало. Спасибо за подсказку, Владимир!

А ..., пожалуйста.

Кстати, пользуйте торговые классы - как в моём примере. Писанины меньше, а наглядность выше.

 
Vladimir Karputov:

А ..., пожалуйста.

Кстати, пользуйте торговые классы - как в моём примере. Писанины меньше, а наглядность выше.

Полезно использовать чистый код. Если бы пользовал классы, то не разобрался бы с ошибкой, а соответственно, и знаний было бы меньше. Вот когда знаний достаточно, то можно и с классами разобраться - чтобы не вслепую их использовать, а с пониманием происходящего. Так что - нормально, что без классов, и разобрался.
 
Vladimir Karputov:

А ..., пожалуйста.

Кстати, пользуйте торговые классы - как в моём примере. Писанины меньше, а наглядность выше.

У меня эксперт сделан в виде класса, но чтобы сделать простые вещи всегда использую стандартные АПИ. Разбирать другой код лень, если чесно.  Но обязательно по изучаю. Это и вправду удобнее, чем стандартные АПИ.

Причина обращения: