Ошибки, баги, вопросы - страница 591

 
alexvd:

Давайте в сервисдеск. 

Уточните пожалуйста, каким именно образом отключили? Удалили (застопили) сервисы? Приложите логи проблемных агентов.

Несколько странные настройки прокси в логах. Вы настройки прокси в конфигах агентов прописывали? Приложите, пожалуйста, в заявке common.ini вашего менеджера агентов.

За вчерашний день оказывается логи смотрел...

Все нормально.

 
TheXpert:

Следующий код:

Выдает:

2011.12.05 22:01:28    RectLabel (EURUSD,H1)    pos = {12, 176314750}
2011.12.05 22:01:28    RectLabel (EURUSD,H1)    other = {123, 456}

То бишь список инициализации не отработал, в структуре мусор. Это бага или нельзя?

Это бага компилятора - не выдал ошибку, что так(без конструктора копирования) инициализировать структуру нельзя. Исправлено. Спасибо за сообщение.
 
Не могу понять деинициализацию. Почему сообщение "Эксперт выгружен с пары ..." происходит два раза?
//+------------------------------------------------------------------+
//|                                                   testDeinit.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"



//+------------------------------------------------------------------+
class CTest_Expert
  {

public:
                     CTest_Expert();
                    ~CTest_Expert() { Deinit(); }
                   
   void              Processing();
   void              Deinit();
   bool              StartTimer(int nCounSeconds);
   void              StopTimer();
   string   Exp_Symbol;
  };

   CTest_Expert arSymbols[];

//+------------------------------------------------------------------+
//| Конструктор                                                      |
//+------------------------------------------------------------------+
CTest_Expert::CTest_Expert()
  {

  }
//+------------------------------------------------------------------+
//| Функция удаления динамических объектов                           |
//+------------------------------------------------------------------+
void CTest_Expert::Deinit()
  {
  
   Print("Эксперт выгружен с пары "+Exp_Symbol);
   Comment("");

  }
//+------------------------------------------------------------------+
//|Инициализация таймера                                             |
//+------------------------------------------------------------------+
bool CTest_Expert::StartTimer(int nCountSeconds)
  {
   return(EventSetTimer(nCountSeconds));
  }
//+------------------------------------------------------------------+
//|Уничтожение таймера                                               |
//+------------------------------------------------------------------+

void CTest_Expert::StopTimer()
  {
      EventKillTimer();
  }

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArrayResize(arSymbols, 5);
   arSymbols[0].Exp_Symbol="0";
   arSymbols[1].Exp_Symbol="1";
   arSymbols[2].Exp_Symbol="2";
   arSymbols[3].Exp_Symbol="3";
   arSymbols[4].Exp_Symbol="4";
  
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      int nSize=ArraySize(arSymbols);
      Print("nSize = " + IntegerToString(nSize));
      for(int i=0;i<nSize;i++)
        {
         Print("-------"+IntegerToString(i)+"--------");
         arSymbols[i].Deinit();
         Print("---------------");
        }
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  
  }
//+------------------------------------------------------------------+

Результат

2011.12.06 16:59:52    testDeinit (EURUSD,M5)    Эксперт выгружен с пары 4
2011.12.06 16:59:52    testDeinit (EURUSD,M5)    Эксперт выгружен с пары 3
2011.12.06 16:59:52    testDeinit (EURUSD,M5)    Эксперт выгружен с пары 2
2011.12.06 16:59:52    testDeinit (EURUSD,M5)    Эксперт выгружен с пары 1
2011.12.06 16:59:52    testDeinit (EURUSD,M5)    Эксперт выгружен с пары 0
2011.12.06 16:59:52    testDeinit (EURUSD,M5)    ---------------
2011.12.06 16:59:52    testDeinit (EURUSD,M5)    Эксперт выгружен с пары 4
2011.12.06 16:59:52    testDeinit (EURUSD,M5)    -------4--------
2011.12.06 16:59:52    testDeinit (EURUSD,M5)    ---------------
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    Эксперт выгружен с пары 3
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    -------3--------
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    ---------------
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    Эксперт выгружен с пары 2
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    -------2--------
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    ---------------
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    Эксперт выгружен с пары 1
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    -------1--------
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    ---------------
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    Эксперт выгружен с пары 0
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    -------0--------
2011.12.06 16:59:51    testDeinit (EURUSD,M5)    nSize = 5

 
Konstantin83:
Не могу понять деинициализацию. Почему сообщение "Эксперт выгружен с пары ..." происходит два раза?
                    ~CTest_Expert() { Deinit(); }

   CTest_Expert arSymbols[];

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
      int nSize=ArraySize(arSymbols);
      Print("nSize = " + IntegerToString(nSize));
      for(int i=0;i<nSize;i++)
        {
         Print("-------"+IntegerToString(i)+"--------");
         arSymbols[i].Deinit();
         Print("---------------");
        }
  
  }

 

Первый вызов из OnDeinit. Второй вызов из деструктора
 
mql5:
Это бага компилятора - не выдал ошибку, что так(без конструктора копирования) инициализировать структуру нельзя. Исправлено. Спасибо за сообщение.

Э нет. Тут дополнительные подробности всплыли.

В справке написано, что простые структуры можно копировать как переменные простых типов, типа:

{
   Pos pos = {100, 100};
   Pos pos1 = pos; // копи конструктор
   pos = pos1; // копи оператор
}

Тогда почему нельзя сделать этого в списке инициализации? Я не хочу явно определять конструкторы, чтобы не терять вышеиспользованного способа инициализации.

В принципе, не критично, просто хочется услышать окончательный комментарий.

Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 

Запускаю терминал с открытыми 12-тью окнами, съедает 325 Мб оперативной памяти.

Запускаю мультивалютного эксперта, терминал съедает 990 Мб оперативной памяти. Эксперт просматривает 5-ти минутные бары за последние 48 часов + индикатор "фрактал" использует. Если запустить только чтобы торговал по одному символу то 400 Мб занимает. Такое потребление памяти это нормально при работе на 12 символах?

 
Konstantin83:
Запускаю мультивалютного эксперта, терминал съедает 990 Мб оперативной памяти. Эксперт просматривает 5-ти минутные бары за последние 48 часов + индикатор "фрактал" использует. Если запустить только чтобы торговал по одному символу то 400 Мб занимает. Такое потребление памяти это нормально при работе на 12 символах?
Посмотрите статью Принципы экономного пересчета индикаторов
 
Забыл указать фрактал это стандартный индикатор + все расчеты проходят раз в пять минут
 
Konstantin83:
Забыл указать фрактал это стандартный индикатор + все расчеты проходят раз в пять минут

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

 
sergeev:

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

Раньше не обращал внимание на объем занимаемой памяти так как наверно было немного. Вчера и сегодня заметил, что система притормаживает, открываю диспетчер задач а там терминал 900 МБ отъел. Начал смотреть. При запуске открыто 12 окон - 325 МБ, вешаю на окно эксперта - 990 МБ, соответственно подумал что эксперт отъедает. В настройках "графики - макс баров в окне" стояло unlimited. Изменил на 50 000 запустил терминал весит 110, опять изменил на unlimited. Сейчас при запущенном эксперте 208 МБ т.е. нормально.
Причина обращения: