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

 
Добавлю:
class A {};
struct B {
        struct A {};
        B() { ::A a; } //Error: 'A' - unexpected token
};
 
Предложение разработчикам.
Прошу рассмотреть возможность добавления в MQL функции, которая позволит пользователям самостоятельно вызывать обработку накопившихся "сообщений" в OnChartEvent из пользовательского кода.
1) Это позволит вызывать обработку OnChartEvent между итерациями продолжительного во времени расчета, делая пользовательскую графическую панель хоть как-то отзывчивой без сооружая огорода из: пула задач, передачи данных, синхронизации состояний, сохранения и восстановления контекста...
2) Это позволит использовать OnChartEvent в скриптах.

Спасибо.
 
Sergey Dzyublik:
Баг МТ5 (build 2340) отсутствует доступ к дефолтному operator= из объекта указателя.

Спасибо за сообщение.
Исправлено

 
Sergey Dzyublik:
Предложение разработчикам.
Прошу рассмотреть возможность добавления в MQL функции, которая позволит пользователям самостоятельно вызывать обработку накопившихся "сообщений" в OnChartEvent из пользовательского кода.
1) Это позволит вызывать обработку OnChartEvent между итерациями продолжительного во времени расчета, делая пользовательскую графическую панель хоть как-то отзывчивой без сооружая огорода из: пула задач, передачи данных, синхронизации состояний, сохранения и восстановления контекста...
2) Это позволит использовать OnChartEvent в скриптах.

Спасибо.
Вы предлагаете добавить функцию GetNextEvent ?
 
Ilyas:
Вы предлагаете добавить функцию GetNextEvent ?

Включая TradeTransaction-события.


Две перегрузки - Trade-Event, Chart-Event.

 
Aliaksandr Hryshyn:

Ошибка:


Спасибо за сообщение.
Исправлено.

 
Ilyas:

Вопрос по оптимизации. В Тестере на каждом тике нужно получить тик для дальнейшей работы. Делаю это так.

void OnTick()
{
  static MqlTick Tick;
  
  if (SymbolInfoTick(_Symbol, Tick))
    // ...
}


Понятно, что этот вариант будет медленнее:

void OnTick()
{
  MqlTick Tick;
  
  if (SymbolInfoTick(Symbol(), Tick))
    // ...
}


Но еще тормозит SymbolInfoTick, потому что string-параметр передается не по ссылке.


Возможно ли иметь штатные SymbolInfo*-перегрузки, где string передается по ссылке?


А лучше, конечно, иметь

const MqlTick _Tick; // Текущий _Symbol-тик.


В Оптимизаторе эти функции вызываются десятки миллиардов раз.

 
Ilyas:
Вы предлагаете добавить функцию GetNextEvent ?

Не совсем, скорее бы назвал данную функцию как HandleNextEvent, возможная сигнатура:

bool HandleNextEvent (ENUM_EVENT_TYPE);


При вызове, аналогично GetNextEvent, проверяет наличие указанного ENUM_EVENT_TYPE в очереди,
и при наличии данного события, автоматически передает управление на пользовательский код соответствующего обработчика (OnChartEvent, OnTrade, OnTradeTransaction, ... (спасибо fxsaberза дополнение)). 
Возвращает true, если в очереди было событие, в ином случаи - false.


Возможен вариант использования:

//....
for(int i = 0; i < 10^6; ++i){
   // .... Data Calculations

   if((i % 10^3) == 0){
       while(HandleNextEvent(EVENT_TYPE_ALL));
   }
}
//....
 
fxsaber:

Вопрос по оптимизации. В Тестере на каждом тике нужно получить тик для дальнейшей работы. Делаю это так.
Понятно, что этот вариант будет медленнее.

А вы проверяли данное утверждение на практике? Просто может оказаться все наоборот.

MqlTick состоит из примитивных типов данных, которые не инициализируются.
Соответственно, времени на выделение вообще не тратиться, так как это та же операция "sub esp", просто разного размера.
В результате bottleneck может вообще оказаться на стороне кеша процессора для операции чтение значения из памяти. 

В общем нужно тестить ))

 
Sergey Dzyublik:

при наличии данного события, автоматически передает управление на пользовательский код соответствующего обработчика 

Возможен вариант использования:

Очень красивое и полезное решение!