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

 
Alexey Navoykov:

Создаю кастомный символ и заполняю его дневными барами за 25 лет, это должно весить примерно 400 кб.  Однако в папке символа создаются .hcc файлы суммарным размером 15 мб!  И вдобавок всё это занимает около 20 секунд!  Ни в какие ворота не лезет...  Как это можно объяснить?

Посмотрите, что записалось.

 
fxsaber:

Посмотрите, что записалось.

Ну формата hcc я не знаю, поэтому не могу проверить, что там в файле.  А в терминале показывает дневные бары.  При переключении на меньший таймфрейм вижу те же самые бары.  Cудя по всему, он ВСЕ таймфреймы тоже сохраняет в файл изначально, так чтоль...   Я полагал, сохраняются только минутки, из которых потом уже синтезируются все остальные таймфреймы.  А число минутных баров, как уже сказано, совпадает с дневками, т.е. всего имеется около 7000 минутных баров.

Т.е. у меня такое предположение, что он сохраняет в файл  7000*М1, 7000*М2, 7000*М3 и т.д. вплоть до 7000*D1, тогда наверно и накрутит 15 Мб в итоге.  Если так, то это бред полнейший.   Но даже учётом этого непонятно, почему оно затрачивает аж 20 секунд!  Поправочка: около 5 секунд  (20 - это при обновлении имеющейся истории).

 

Что-то сломалось на сайте форума: не вижу своих последних сообщений.
Например, это и это отсутствуют во "Всех сообщениях" 
И вроде раньше рейтинг был более 6000 еще несколько месяцев назад. Хотя не знаю - может рейтинг может уменьшаться со временем от меньшей активности.  

 
class A{
public:
   struct AA{
      uchar data[8];
   };
   static AA obj;
};

AA A::obj = {0};     // OK


template<typename T>
class B{
public:
   struct BB{
      T data[8];
   };
   static BB obj;
};

template<typename T>
BB B::obj = {0};       //'BB' - declaration without type    




void OnStart(){  
   ArrayPrint(A::obj.data);
   //ArrayPrint(BB<int>::obj.data);
}


На текущий момент не возможно использовать статическую переменную, объявленную внутри шаблонного класса.
С внедрением пространства имен, данное ограничение можна будет обойти?

 
Sergey Dzyublik:


На текущий момент не возможно использовать статическую переменную, объявленную внутри шаблонного класса.
С внедрением пространства имен, данное ограничение можна будет обойти?

Дело не в переменной. Он класс BB не видит.  Его нужно вынести за пределы класса B  как  template<typename T> class BB;

 
Alexey Navoykov:

Дело не в переменной. Он класс BB не видит.  Его нужно вынести за пределы класса B  как  template<typename T> class BB;

Пост был адресован разработчикам, что бы если будет их воля "нашаманили" поддержку с коробки.

Повторюсь, проблема касается не возможности использовать статическую переменную, объявленную внутри шаблонного класса.
Что предложите делать в случаи с typedef:

 
class A{
public:
   typedef void (*callback_A)();
   static callback_A f_ptr;

};
callback_A A::f_ptr = NULL;                  // Ok


template<typename T>
class B{
public:
   typedef T (*callback_B)();
   static callback_B f_ptr;
};
template<typename T>
callback_B B::f_ptr = NULL;                  //'callback_B' - declaration without type	

void func_A(){PRINT(__FUNCSIG__);}
int func_B(){PRINT(__FUNCSIG__); return 0;}

void OnStart(){  
   A::f_ptr = func_A;
   A::f_ptr();

   //B<int>::f_ptr = func_B;
   //B<int>::f_ptr();
}
 
Sergey Dzyublik:


На текущий момент не возможно использовать статическую переменную, объявленную внутри шаблонного класса.
С внедрением пространства имен, данное ограничение можна будет обойти?

Да, можно.

Код будет немного другим, более правильным, вот пример:

//+------------------------------------------------------------------+
//|                                                  ScopeSample.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
class A
  {
public:
   struct Item
     {
      T                 value;
      
      Item(T initial=10):value(initial) { Print(__FUNCSIG__); }
     };

   static Item       s_default;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
class B
  {
public:
   struct Item
     {
      T                 value;
      
      Item(T initial=100):value(initial) { Print(__FUNCSIG__); }
     };

   static Item       s_default;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
A::Item A::s_default;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
template<typename T>
B::Item B::s_default;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print(A<int>::s_default.value);
   Print(B<int>::s_default.value);
  }
//+------------------------------------------------------------------+


Результат:

2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) A<int>::Item::Item(int)
2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) B<int>::Item::Item(int)
2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) 10
2019.05.24 17:16:20.225 ScopeSample (EURUSD,H1) 100
 
Очень круто, спасибо большое.
Есть ли возможность получить альфа доступ к МТ с поддержкой namespace?
Действительно надо в рамках изучения возможность написания "умного контейнера", не для поиска багов/уязвимостей и т.д.
 

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

Ошибки, баги, вопросы

Sergey Dzyublik, 2019.05.23 13:52

За последнее время предоставлено информацию о десятке "особенностей" работы и багов в МТ.
Как узнать стоит ждать их исправление или нет?
Прошу не предлагать тестить все каждый раз при выходе нового билда.

 (не исправлено в MT5(build 2059)) "Ошибка компиляции при передаче в шаблонную функцию параметра (void*)(NULL)"".
 (исправлено в MT5(build 2059)) "Тестер стратегий: запланировано 2 прохода, но на практике бесконечное число проходов > 900шт из-за ошибки "OnInit critical error"".
 (не исправлено в MT5(build 2059))  "Некорректное значение поля размер массива в рамках работы дефолтного оператора присваивания для структур с динамическими массивами".
 (не исправлено в MT5(build 2059))  "Компилятор не видит дефолтный конструктор копирования класса при возвращении объекта класса по значению из функции".
  и  (исправлено в MT5(build 2059))  "Ошибка компиляции при выполнении type cast "самого в себя" для шаблонных классов и "сложных" структур".
 (не исправлено в MT5(build 2059))  "При работе с typedef использование шаблонной функции с явной специализацией не вызывает генерацию кода этой шаблонной функции".
 (не исправлено в MT5(build 2059)) "Ошибка компиляции при повторном использовании одной и той же сигнатуры функции в рамках typedef".
 (не исправлено в MT5(build 2059))  "Значительная часть функций для работы со строками не работает с NULL символами в строке (например: ShortArrayToString, StringInit, StringFill)".
 (не исправлено в MT5(build 2059))  "Функция StringSetLength работает только в сторону "обрезания" длины строки, но не увеличения".
 (исправлено в MT5(build 2057)) "Тестер стратегий: запуск 750 процессов "metatester64.exe"".
 "Форум www.mql5.com, при правке сообщения с картинкой, предыдущая картинка не заменяется на новую".


Предложения:
 "Предоставить пользователю возможность принудительной генерации/удаления кода для оператора присвоения (конструктор копирования) по умолчанию".
 "Разрешить функции ArrayCopy копировать классы и "сложные" структуры, аналогично тому как структуры предоставляют функционал deep copy для любого типа объекта".
 "Предоставить пользователю функционал для чтения/установки значения Capacity при работе с динамическими массивами"

 "Изменения по улучшению инфографики сервиса "Сигналы""


 

Сегодня у меня в терминале не закачивается тиковая история на реальном счете срочного рынка, брокер Открытие.

Данные в стакане меняются.

Сейчас 24.05.2019 23:40

В терминале последний тик за 23.05.2019.


Такая же ситуация по некоторым другим инструментам, включая те, по которым я сам производил сделки.

На втором терминале (отдельная установка), на другом счете того же брокера эффект тот же.