Функиця AccountBalance возвращает 0 при запуске терминала - страница 3

 
как-то была у меня подобная проблема, советник пытался читать данные ещё до подключения к серверу, сделал проверку:
if(!TerminalInfoInteger(TERMINAL_CONNECTED)) return;
 {
  
 }

и забыл о подобных проблемах

 
Aleksandr Volotko:
как-то была у меня подобная проблема, советник пытался читать данные ещё до подключения к серверу, сделал проверку:
if(!TerminalInfoInteger(TERMINAL_CONNECTED)) return;
 {
  
 }

и забыл о подобных проблемах

Тогда вспоминайте))

int OnInit(void)
{
   Print(__FUNCTION__, ", Connect: ", TerminalInfoInteger(TERMINAL_CONNECTED));
   Print(__FUNCTION__, ", Balance: ", AccountInfoDouble(ACCOUNT_BALANCE));

   return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])

{
   Print(__FUNCTION__, ", Connect: ", TerminalInfoInteger(TERMINAL_CONNECTED));
   Print(__FUNCTION__, ", Balance: ", AccountInfoDouble(ACCOUNT_BALANCE));
   return(rates_total);
}

Результат при запуске терминала с ненулевым балансом:

0       18:18:45.783    Test AUDUSD,H1: OnInit, Connect: 0
0       18:18:45.783    Test AUDUSD,H1: OnInit, Balance: 0.0
0       18:18:45.783    Test AUDUSD,H1: initialized
0       18:18:45.784    Test AUDUSD,H1: OnCalculate, Connect: 0
0       18:18:45.784    Test AUDUSD,H1: OnCalculate, Balance: 0.0
0       18:18:46.991    Test AUDUSD,H1: OnCalculate, Connect: 1
0       18:18:46.991    Test AUDUSD,H1: OnCalculate, Balance: 0.0
 
Ihor Herasko:

Тогда вспоминайте))

Результат при запуске терминала с ненулевым балансом:

Не вспоминается, ни одного сбоя в копировщике не было за столько времени.

UPD: правда у меня и не индикатор..

 
Aleksandr Volotko:

UPD: правда у меня и не индикатор..

В том то и дело, что у советников другая архитектура. Поэтому и проблемы, подобные этой, решаются проще. В частности IsConnected() практически не нужен.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 4 build 1220

fxsaber, 2019.10.30 10:49

#property strict

#property indicator_chart_window
#property indicator_buffers 0

int OnInit()
{  
  const bool Res = !EventSetTimer(1);
  
  OnTimer();
  
  return(Res);
}

bool IsReadyToInit()
{
  static string PrevAccountServer = "";  
  
  const string AccountServer = AccountInfoString(ACCOUNT_SERVER);
  const bool Res = (PrevAccountServer != AccountServer);
  
  if (Res)
    PrevAccountServer = AccountServer;
    
  return(Res); 
}

bool IsOnInit()
{
  static bool Init = false;
  
  if (!Init)
  {
    if (Init = IsReadyToInit())
    {
      OnDeinit(REASON_ACCOUNT);
      
      MyOnInit();
    }
  }
  else if (IsReadyToInit()) 
  {
    OnDeinit(REASON_ACCOUNT);
    
    MyOnInit();
  }
  
  return(Init);
}

void MyOnInit()
{
  Alert(AccountInfoString(ACCOUNT_SERVER) + " " + _Symbol);    
}

void OnTimer()
{
  if (!IsOnInit())
    return;
}

void OnDeinit( const int Reason )
{
  if (Reason != REASON_ACCOUNT)
    EventKillTimer();
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
{ 
  if (!IsOnInit())
    return(0);
    
  return(rates_total);
}
 
fxsaber:

Модуль изначально не знает, кто его вызвал? 

И окружение ,как я понимаю. 

 
Алексей Тарабанов:

Модуль изначально не знает, кто его вызвал? 

И окружение ,как я понимаю. 

Не понял вопроса.

 
fxsaber:

Не понял вопроса.

Как я понимаю, Вы предлагаете проверить, исполнена ли инициализация. 

Не исполнена и Ваш код никогда не будет выполнен по этой причине. Что делаем? 
 
Алексей Тарабанов:

Как я понимаю, Вы предлагаете проверить, исполнена ли инициализация. 

Не исполнена и Ваш код никогда не будет выполнен по этой причине. Что делаем? 

Таймер.

 
fxsaber:

Таймер.

Нет. Память. 

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