Функция AccountNumber() выдает неверное значение

 

Терминал MT4 билд 765.

Функция вызывается впервые по событию OnInit(), возвращает подозрительный результат 16384 (4000 hex) 

Проверял вызов на OnTick() - результат тот же.

Запуск эксперта производился в тестере стратегий.

Ошибка проявляется не регулярно. 

Если получится сымитировать в отдельном эксперте, то наверное направлю в СД.

У кого-то было подобное? 

 
elugovoy:

Терминал MT4 билд 765.

Функция вызывается впервые по событию OnInit(), возвращает подозрительный результат 16384 (4000 hex) 

Проверял вызов на OnTick() - результат тот же.

Запуск эксперта производился в тестере стратегий.

Ошибка проявляется не регулярно. 

Если получится сымитировать в отдельном эксперте, то наверное направлю в СД.

У кого-то было подобное? 

Есть подозрение, что информация связанная с торговым счётом может быть готова не сразу при старте советника. Что-то подобное обсуждали, сейчас поищу...
 
barabashkakvn:
Есть подозрение, что информация связанная с торговым счётом может быть готова не сразу при старте советника. Что-то подобное обсуждали, сейчас поищу...

Вообще-то странно как-то, т.к. терминал уже соединился и прошел авторизацию на стороне брокера.

Конечно тестер стратегий может работать и в оффлайне, но тем не менее... фигня какая-то.

 
elugovoy:

Вообще-то странно как-то, т.к. терминал уже соединился и прошел авторизацию на стороне брокера.

Конечно тестер стратегий может работать и в оффлайне, но тем не менее... фигня какая-то.

Сейчас сделаю эксперта, который будет выводить абсолютно всю информацию по счёту. Можно будет сравнить показатели во время старта и через небольшой промежуток времени после старта.
 
barabashkakvn:
Сейчас сделаю эксперта, который будет выводить абсолютно всю информацию по счёту. Можно будет сравнить показатели во время старта и через небольшой промежуток времени после старта.

Ок, у меня на одном брокере проявляется этот баг, тестил на других вроде не видно... хотя терминал один и тот же использовал.

 
elugovoy:

Ок, у меня на одном брокере проявляется этот баг, тестил на других вроде не видно... хотя терминал один и тот же использовал.

Ещё может такой вариант - попробуйте получить этот баг на двух разных шаблонах: с набросанными индикаторами и на чистом графике. 
 
barabashkakvn:
Ещё может такой вариант - попробуйте получить этот баг на двух разных шаблонах: с набросанными индикаторами и на чистом графике. 

Индикаторов вообще не использую. Думаю всю процедуру инициализации уже повесть на первый тик и отказаться от OnInit... хз может прокатит...

Такое ощущение, что терминал запускает тестер еще до соединения с брокером... 

 
elugovoy:

Индикаторов вообще не использую. Думаю всю процедуру инициализации уже повесть на первый тик и отказаться от OnInit... хз может прокатит...

Такое ощущение, что терминал запускает тестер еще до соединения с брокером... 

Вот кусок - можно оформить как отдельную функцию и вызывать из любого места:

   InfoDouble();
   InfoInteger();
   InfoString();
.
.
.
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void InfoDouble()
  {
//--- выведем всю информацию, доступную из функции AccountInfoDouble()
//+------------------------------------------------------------------+
//| ACCOUNT_BALANCE                                                  |
//| Баланс счета в валюте депозита                                   |
//+------------------------------------------------------------------+
   printf("ACCOUNT_BALANCE =  %G",AccountInfoDouble(ACCOUNT_BALANCE));

//+------------------------------------------------------------------+
//| ACCOUNT_CREDIT                                                   |
//|   Размер предоставленного кредита в валюте депозита              |
//+------------------------------------------------------------------+   
   printf("ACCOUNT_CREDIT =  %G",AccountInfoDouble(ACCOUNT_CREDIT));

//+------------------------------------------------------------------+
//| ACCOUNT_PROFIT                                                   |
//|   Размер текущей прибыли на счете в валюте депозита              |
//+------------------------------------------------------------------+ 
   printf("ACCOUNT_PROFIT =  %G",AccountInfoDouble(ACCOUNT_PROFIT));

//+------------------------------------------------------------------+
//| ACCOUNT_EQUITY                                                   |
//|   Значение собственных средств на счете в валюте депозита        |
//+------------------------------------------------------------------+ 
   printf("ACCOUNT_EQUITY =  %G",AccountInfoDouble(ACCOUNT_EQUITY));

//+------------------------------------------------------------------+
//| ACCOUNT_MARGIN                                                   |
//|   Размер зарезервированных залоговых средств на счете в валюте   |
//| депозита                                                         |
//+------------------------------------------------------------------+ 
   printf("ACCOUNT_MARGIN =  %G",AccountInfoDouble(ACCOUNT_MARGIN));

//+------------------------------------------------------------------+
//| ACCOUNT_FREEMARGIN                                               |
//|   Размер свободных средств на счете  в валюте депозита,          |
//| доступных для открытия ордера                                    |             
//+------------------------------------------------------------------+  
   printf("ACCOUNT_FREEMARGIN =  %G",AccountInfoDouble(ACCOUNT_FREEMARGIN));

//+------------------------------------------------------------------+
//| ACCOUNT_MARGIN_LEVEL                                             |
//|   Уровень залоговых средств на счете в процентах                 |
//+------------------------------------------------------------------+ 
   printf("ACCOUNT_MARGIN_LEVEL =  %G",AccountInfoDouble(ACCOUNT_MARGIN_LEVEL));

//+------------------------------------------------------------------+
//| ACCOUNT_MARGIN_SO_CALL                                           |
//|   Уровень залоговых средств,при котором требуется пополнение     |
//| счета(Margin Call). В зависимости от установленного              |             
//| ACCOUNT_MARGIN_SO_MODE выражается в процентах либо в валюте      |     
//| депозита                                                         |          
//+------------------------------------------------------------------+  
   printf("ACCOUNT_MARGIN_SO_CALL = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL));

//+------------------------------------------------------------------+
//| ACCOUNT_MARGIN_SO_SO                                             |
//|   Уровень залоговых средств,при достижении которого происходит   |
//| принудительное закрытие самой убыточного ордера(Stop Out).       |             
//| В зависимости от установленного ACCOUNT_MARGIN_SO_MODE           |     
//| выражается в процентах либо в валюте депозита                    |          
//+------------------------------------------------------------------+  
   printf("ACCOUNT_MARGIN_SO_SO = %G",AccountInfoDouble(ACCOUNT_MARGIN_SO_SO));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void InfoInteger()
  {
//--- выведем всю информацию, доступную из функции AccountInfoInteger()
//+------------------------------------------------------------------+
//| ACCOUNT_LOGIN                                                    |
//|   Номер счета                                                    |
//+------------------------------------------------------------------+   
   printf("ACCOUNT_LOGIN =  %d",AccountInfoInteger(ACCOUNT_LOGIN));

//+------------------------------------------------------------------+
//| ACCOUNT_LEVERAGE                                                 |
//|   Размер предоставленного плеча                                  |
//+------------------------------------------------------------------+    
   printf("ACCOUNT_LEVERAGE =  %d",AccountInfoInteger(ACCOUNT_LEVERAGE));

//+------------------------------------------------------------------+
//| ACCOUNT_TRADE_ALLOWED                                            |
//|   Разрешенность торговли для текущего счета                      |
//+------------------------------------------------------------------+  
   bool thisAccountTradeAllowed=AccountInfoInteger(ACCOUNT_TRADE_ALLOWED);

//+------------------------------------------------------------------+
//| ACCOUNT_TRADE_EXPERT                                             |
//|   Разрешенность торговли для эксперта                            |
//+------------------------------------------------------------------+ 
   bool EATradeAllowed=AccountInfoInteger(ACCOUNT_TRADE_EXPERT);

//+------------------------------------------------------------------+
//| ACCOUNT_TRADE_MODE                                               |
//|   Тип торгового счета                                            |
//+------------------------------------------------------------------+ 

   ENUM_ACCOUNT_TRADE_MODE tradeMode=(ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE);

//+------------------------------------------------------------------+
//| ACCOUNT_MARGIN_SO_MODE                                           |
//|   Режим задания минимально допустимого уровня залоговых средств  |
//+------------------------------------------------------------------+ 
   ENUM_ACCOUNT_STOPOUT_MODE stopOutMode=(ENUM_ACCOUNT_STOPOUT_MODE)AccountInfoInteger(ACCOUNT_MARGIN_SO_MODE);
//--- сообщим о возможности совершения торговых операций
   if(thisAccountTradeAllowed)
      Print("Торговля для данного счета разрешена");
   else
      Print("Торговля для данного счета запрещена!");
//--- выясним - можно ли торговать на данном счету экспертами
   if(EATradeAllowed)
      Print("Торговля советниками для данного счета разрешена");
   else
      Print("Торговля советниками для данного счета запрещена!");
//--- выясним тип счета
   switch(tradeMode)
     {
      case(ACCOUNT_TRADE_MODE_DEMO):
         Print("Это демо счет");
         break;
      case(ACCOUNT_TRADE_MODE_CONTEST):
         Print("Это конкурсный счет");
         break;
      default:Print("Это реальный счет!");
     }
//--- выясним режим задания уровня StopOut
   switch(stopOutMode)
     {
      case(ACCOUNT_STOPOUT_MODE_PERCENT):
         Print("Уровень StopOut задается в процентах");
         break;
      default:Print("Уровень StopOut задается в денежном выражении");
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void InfoString()
  {
//--- выведем всю информацию, доступную из функции AccountInfoString()
//+------------------------------------------------------------------+
//| ACCOUNT_COMPANY                                                  |
//|   Имя компании, обслуживающей счет                               |
//+------------------------------------------------------------------+ 
   Print("Имя брокера = ",AccountInfoString(ACCOUNT_COMPANY));

//+------------------------------------------------------------------+
//| ACCOUNT_CURRENCY                                                 |
//|   Валюта депозита                                                |
//+------------------------------------------------------------------+ 
   Print("Валюта депозита = ",AccountInfoString(ACCOUNT_CURRENCY));

//+------------------------------------------------------------------+
//| ACCOUNT_NAME                                                     |
//|   Имя клиента                                                    |
//+------------------------------------------------------------------+ 
   Print("Имя клиента = ",AccountInfoString(ACCOUNT_NAME));

//+------------------------------------------------------------------+
//| ACCOUNT_SERVER                                                   |
//|   Имя торгового сервера                                          |
//+------------------------------------------------------------------+ 
   Print("Название торгового сервера = ",AccountInfoString(ACCOUNT_SERVER));
  }
 

Что сказать... лажа полная...

Результат:

0       17:57:57.615    Tester: start with configuration file
0       17:57:57.677    TestGenerator: current spread 75 used
1       17:58:01.302    TestGenerator: unmatched data error (volume limit 3782 at 2015.04.06 10:00 exceeded)
1       17:58:01.302    TestGenerator: unmatched data error (volume limit 2660 at 2015.04.06 11:00 exceeded)
1       17:58:01.302    TestGenerator: unmatched data error (volume limit 2660 at 2015.04.06 11:00 exceeded)
1       17:58:01.302    TestGenerator: unmatched data error (volume limit 2660 at 2015.04.06 11:00 exceeded)
1       17:58:01.302    TestGenerator: unmatched data error (volume limit 2660 at 2015.04.06 11:00 exceeded)
1       17:58:01.381    TestGenerator: unmatched data error (volume limit 3143 at 2015.04.10 23:00 exceeded)
2       17:58:01.381    SwipeStox Expert Advisor inputs: UserID=21; TerminalID=41; 
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Connected! DBID#0
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Account update...
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Done!
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_BALANCE =  10000
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_CREDIT =  0
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_PROFIT =  0
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_EQUITY =  10000
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_MARGIN =  0
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_FREEMARGIN =  10000
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_MARGIN_LEVEL =  0
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_MARGIN_SO_CALL = 0
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_MARGIN_SO_SO = 50
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_LOGIN =  16384
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_LEVERAGE =  100
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Trading for account is allowed
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Trading by EA for accout is denied!
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Real account!
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Level of StopOut set in %
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Broker Name = 
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Deposit currency = USD
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Account holder name = 
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Server name = 
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Symbols Initialization...
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Done!
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Mode: Simulation on weekends!
0       17:58:01        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Initialization Done!
0       17:59:22        2015.03.13 00:48  Expert SwipeStox Expert Advisor EURUSD,H1: removed
0       17:59:22        2015.03.13 00:48  EURUSD,H1: 807 tick events (1504 bars, 3026180 bar states) processed within 81375 ms (total time 85063 ms)

 Ни имени брокера, сервера, владельца счета... показывает что Real, на самом деле Demo счет.

Номер счета = 16384, хотя номер соовсем другой. Вот хз... что происходит. Это вызов из инициализации в режиме тестера стратегий при запуске терминала со стартап файлом (с параметрами)

 

Лог терминала:

0       17:57:56.943    VFX Trader build 765 started (VantageFX Pty Ltd.)
0       17:57:56.943    Data Folder: C:\Users\Administrator\AppData\Roaming\MetaQuotes\Terminal\36CA0C5ADAA8C0537CDCA0E47B09C9BC
0       17:57:56.959    Started with configuration file 'C:\Storage\MT4\00000001\start.ini'
0       17:57:58.552    '123248146': login on VantageFX-Demo through DC3 - Sydney
0       17:58:01.084    '123248146': login datacenter on VantageFX-Demo through DC3 - Sydney
0       17:58:01.709    '123248146': previous successful authorization performed from 54.93.89.54
0       17:58:08.927    '123248146': ping to current access point DC3 - Sydney is 307.19 ms
0       17:59:23.131    VFX Trader build 765 stopped

Видно что залогинился к брокеру 17:57:58.552, к дата центру 17:58:01.084

А запускает эксперт и получает данные на момент 17:58:01.381

То есть все вроде как должно уже быть инициализировано в терминале. 

 

А вот при запуске "вручную" тестера стратегий, без конфигурационного файла стартапа

0       18:12:40.397    TestGenerator: current spread 75 used
1       18:12:43.959    TestGenerator: unmatched data error (volume limit 3782 at 2015.04.06 10:00 exceeded)
1       18:12:43.959    TestGenerator: unmatched data error (volume limit 2660 at 2015.04.06 11:00 exceeded)
1       18:12:43.959    TestGenerator: unmatched data error (volume limit 2660 at 2015.04.06 11:00 exceeded)
1       18:12:43.959    TestGenerator: unmatched data error (volume limit 2660 at 2015.04.06 11:00 exceeded)
1       18:12:43.959    TestGenerator: unmatched data error (volume limit 2660 at 2015.04.06 11:00 exceeded)
2       18:12:44.037    SwipeStox Expert Advisor inputs: UserID=21; TerminalID=41; 
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Connected! DBID#0
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Account update...
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Done!
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_BALANCE =  10000
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_CREDIT =  0
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_PROFIT =  0
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_EQUITY =  10000
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_MARGIN =  0
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_FREEMARGIN =  10000
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_MARGIN_LEVEL =  0
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_MARGIN_SO_CALL = 80
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_MARGIN_SO_SO = 50
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_LOGIN =  123248146
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: ACCOUNT_LEVERAGE =  100
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Trading for account is allowed
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Trading by EA for accout is allowed
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Demo account
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Level of StopOut set in %
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Broker Name = VantageFX Pty Ltd.
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Deposit currency = USD
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Account holder name = Eugene Lugovoy
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Server name = VantageFX-Demo
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Symbols Initialization...
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Done!
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Mode: Simulation on weekends!
0       18:12:44        2015.03.13 00:00  SwipeStox Expert Advisor EURUSD,H1: Initialization Done!
0       18:13:08        2015.03.13 00:13  Expert SwipeStox Expert Advisor EURUSD,H1: removed
0       18:13:08        2015.03.13 00:13  EURUSD,H1: 254 tick events (1504 bars, 3026179 bar states) processed within 24703 ms (total time 28344 ms)

 Так все работает...

Но мне как раз и нужно стартовать терминал из командной строки с параметрами, а там такая лажа...

 
Чем мог, помог. 
Причина обращения: