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

 
Alexey Navoykov:
Так а что мешает один раз запросить этот тик в обработчике OnTick, и дальше уже работать с полученным данными?  Это практически ничего не стоит.  Зачем по 100 раз запрашивать его (как в приведённых ранее тестах), искусственно создавая тормоза на ровном месте.  Т.е. проблему кривого кода советника предлагается решать усложнением внутренней работы МТ.   Или у вас есть какие-то нормальные замеры?

события которые должен обработать "OnTick" поступают извне в некоторую очередь с приоритетами. В прочих обработчиках не лишне убедится, что подобных новых событий не прилетало, иначе данные прежнего тика невалидны/устарели

 
Alexey Navoykov:
Так а что мешает один раз запросить этот тик в обработчике OnTick, и дальше уже работать с полученным данными?  Это практически ничего не стоит.  Зачем по 100 раз запрашивать его (как в приведённых ранее тестах), искусственно создавая тормоза на ровном месте. 

я именно так и делаю в тестере

Alexey Navoykov:
 Т.е. проблему кривого кода советника предлагается решать усложнением внутренней работы МТ.   Или у вас есть какие-то нормальные замеры?

ну как бы кривость кода определяется устоявшимися приемами написания кода, посмотрите КБ и использование СБ в этих примерах

я не использую СБ, я замерял профилировщиком и искал решения несколько месяцев, был топик про тесты скорости, частично бросал альтернативные решения

нормальность замера? это скользкая тема, которой придется заниматься серьезно, меня устраивает мой ЕА для оптимизации, был проход на 18 месяцев 6 сек, сейчас 2,5 сек , имхо я проделал хорошую работу над собой )))

 
По материалам ... возникли следующие соображения:
Учитывая, что UninitializeReason() может вызываться в любой части программы, в частности в OnInit() (а если не предполагался такой вызов, то можно и расширить границы применения)
Предлагается:

Если значение переменной _UninitReason формируется перед вызовом функции OnDeinit(),
и если причина предыдущей деинициализации эксперта не может быть определена (REASON_PROGRAM, REASON_REMOVE, и т.д.)
то до этого вызова оно должно быть неопределено (-1). Сейчас 0, т.е. фактически REASON_PROGRAM

Если эксперт полностью перезапускается (REASON_RECOMPILE, REASON_ACCOUNT, REASON_CLOSE и т.д.), то
представляется, что есть возможность при запуске новой копии программы установить переменной _UninitReason соответствующее значение (REASON_RECOMPILE, REASON_ACCOUNT, REASON_CLOSE и т.д.),

а не как сейчас 0, т.е. фактически REASON_PROGRAM

Если эксперт частично перезапускается (REASON_CHARTCHANGE и т.д.), то переменная _UninitReason и сейчас в OnInit() равна соответствующему значению (REASON_CHARTCHANGE и т.д.),
и никаких изменений не требуется
 
Баг  МТ5 (build 2450) ошибка компиляции для форвард декларации шаблонного метода класса.

template<typename T>
class A{};


class B{
public:
   template<typename T>
   void test(A<T> &a);
};

template<typename T>
void B::test(A<T> &a){}   // 'test' - member function already defined with different parameters 


void OnStart(){ 
   B b;
} 
 

При перезапуске терминала постоянно и безостановочно пишет в журнал записи

2020.05.24 03:36:03.342 HistoryBase     'GBPUSD' 1 invalid bars removed

Время исторического бара в записи постоянно увеличивается. График GBPUSD Daily открыт и дёргается - нулевой, первый и второй бары удаляются/создаются. И так по кругу.

Вот жду. То ли забьёт весь SSD этими логами, то ли остановится наконец...

Вчерашний лог в прицепе.

Файлы:
20200523.zip  304 kb
 

Ошибка компилятора.  В старых билдах работает нормально.

struct A { };

template<typename T> 
struct B : T { };  // 'A' - unexpected token

struct C : B<A> { };
 

У меня есть такой простой эксперт (см. скриншот).

На график наложены объекты Chart.

До вчерашнего обновления терминала на чартах показывались торговые уровни, но сейчас исчезли.

Чарты создаю как указано в примере из мануала. Там нет свойств для отображения торговых уровней (такое свойство существует только для основных графиков).

Помогите, пожалуйста.

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов / OBJ_CHART
  • www.mql5.com
//| Создает объект "График"                                          |               chart_ID=0,                               sub_window=0,                             x=0,                                      y=0,                                      width=300,                                height=200,               ...
 

Привет. Помогите пожалуйста разобраться, что написано.

mqlrate rt [2] ;

Правильно ли я понимаю, что это массив из двух структур которые автоматически получил одинаковые данные структуры? 

Просто дальше нет присвоения массиву данных, а потом из массива используются сразу данные.
 
Ivan_Invanov:

Привет. Помогите пожалуйста разобраться, что написано.

mqlrate rt [2] ;

Правильно ли я понимаю, что это массив из двух структур которые автоматически получили одинаковые данные? 

Запись на MQL5:

MqlRates rt[2]

означает: объявлен статический массив из двух структур MqlRates . После объявления в этих структурах может храниться белиберда, поэтому эти структуры необходимо явно заполнить данными.

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура исторических данных
  • www.mql5.com
Константы, перечисления и структуры / Структуры данных / Структура исторических данных - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Vladimir Karputov:

Запись на MQL5:

означает: объявлен статический массив из двух структур MqlRates. После объявления в этих структурах может храниться белиберда, поэтому эти структуры необходимо явно заполнить данными.

Спасибо.