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

 
send request failed 12002 вылетает при попытке обновить раннее купленный и активированный продукт, в чем причина?
 

У кого-нибудь наблюдалась такая проблема с дебагом скрипта?


Делаю дебаг. Срабатывает точка останова. Иду пошагов через F10. Через пять секунд после первого останова скрипт выполняется полностью дальше.

И так каждый раз.


Воспроизведение

void OnStart()
{
  DebugBreak(); // Когда остановится, подождать пять секунд - дебаг прекратится.
}


У всех такой баг?

 

1220:

в OnTimer с частотой 1 секунда с такой строчкой:

if(iTime(NULL,1,0)%3600>=Time_delete*3600 && iTime(NULL,1,1)%3600<Time_delete*3600)

1 график с одним экспертом кушает 880 МБ памяти (на спокойном рынке, до 1400 на активном), постоянно обращается к диску. График с экспертом - М5.

Без этой строчки 180мб, на диск не лезет. 

Не слишком ли расточительно для проверки 2х баров минутного таймфрейма кушать 700мб?

добавлено:

Комп в спящем режиме был, включил - уже 360мб... Может  утечка какая-то? - ровно вдвое увеличилось - подозрительно. (в эксперте нет длл и работы с памятью.  только графические объекты и 7 GlobalVariables)

ещё добавлено: 

15мб сейчас, после минимизации TimeCurrent() и полного исключения iTime(). Есть ощущение, что к этому причастен Win10. MT его жертва

 
Igor Zakharov:

(в эксперте нет длл и работы с памятью.  только графические объекты и 7 GlobalVariables)

а если графические объекты убрать и протестировать эту строчку? - с графическими объектами всегда какие то проблемы когда их много, высока вероятность, что терминал на активном чарте графические объекты "дергает" когда Вы к таймсерии обращаетесь 

 
Igor Makanu:

а если графические объекты убрать и протестировать эту строчку? - с графическими объектами всегда какие то проблемы когда их много, высока вероятность, что терминал на активном чарте графические объекты "дергает" когда Вы к таймсерии обращаетесь 

пересчитал объекты, всего 36: полтора десятка кнопок, несколько линий, десяток текстовых меток - это где-то в погрешности должно затеряться, а тут 700мб. робот - полный примитив - ни массивов, ни рекурсии, ни файлов... не чему память жрать. просто мониторинг: цена пересекла линию - отправили ордер.

я бы и не стал шуметь, но роботу уже несколько лет, а только сейчас (после обновления) жалобу получил.

Как решение, вместо М1 использовал Hour(), Minute() и Second(), так даже лучше с точки зрения логики. потребляет - те же 180мб, как и вообще без этого куска. Для себя вопрос закрыл, но проинформировал MQ. 

 

Предупреждения компилятора build 2143 в СБ в файле ArrayInt.mqh:

   //--- methods of searching for minimum and maximum
   int               Minimum(const int start,const int count) const { return(Minimum(m_data,start,count)); }
   int               Maximum(const int start,const int count) const { return(Maximum(m_data,start,count)); }
deprecated behavior, hidden method calling will be disabled in a future MQL compiler version    ArrayInt.mqh    43      78
deprecated behavior, hidden method calling will be disabled in a future MQL compiler version    ArrayInt.mqh    44      78

Должно быть так:

   //--- methods of searching for minimum and maximum
   int               Minimum(const int start,const int count) const { return(CArray::Minimum(m_data,start,count)); }
   int               Maximum(const int start,const int count) const { return(CArray::Maximum(m_data,start,count)); }
PS. Это я ошибочно mq5-файл откомпилировал в ME v5.0, build 2143, поставляемый с MetaTrader4 build 1220
 
Прошу помощи по индикатору в MT4.
#property strict

#property indicator_chart_window
#property indicator_buffers 0
#property indicator_plots indicator_buffers

void OnInit()
{
  Alert(AccountInfoString(ACCOUNT_SERVER)); // Пусто
}

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[])
{ 
  return(rates_total);
}


Запускаю этот индикатор и перезагружаю Терминал. Индикатор в OnInit не видит название сервера.


Кто как это побеждает? Неужели только через таймер?

 
fxsaber:
Прошу помощи по индикатору в MT4.


Запускаю этот индикатор и перезагружаю Терминал. Индикатор в OnInit не видит название сервера.


Кто как это побеждает? Неужели только через таймер?

При первом запуске терминал не успевает получать данные с сервера, к примеру номер счёта тоже.

Я делаю так, может и не совсем правильно, но другого решения не вижу

void OnInit()
{
 string ACC=AccountInfoString(ACCOUNT_SERVER);
 // Alert(ACC); // Пусто
}

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(ACC== `пусто`) {
   OnInit();
   return(0);
  }
 ...
  return(rates_total);
}
 
Vitaly Muzichenko:

При первом запуске терминал не успевает получать данные с сервера, к примеру номер счёта тоже.

Я делаю так, может и не совсем правильно, но другого решения не вижу

Мне для HistoryTicks нужно при инициализации. Сделал так

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); 
}

void MyOnInit()
{
  Alert(AccountInfoString(ACCOUNT_SERVER));    
}

void OnTimer()
{
  if (IsReadyToInit())
    MyOnInit();
}

void OnDeinit( const int )
{
  EventKillTimer();
}


Если у кого есть хорошая IsReadyToInit(), дайте знать.

 
fxsaber:

Мне для HistoryTicks нужно при инициализации. Сделал так


Если у кого есть хорошая IsReadyToInit(), дайте знать.

Если таймер больше ни для чего не используется, его имеет смысл прибивать в MyOnInit. И назначение IsReadyToInit - не ясно: почему не вставить в if просто проверку AccountInfoString(ACCOUNT_SERVER) на пустоту?

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