OnChartEvent - замедляет загрузку эксперта

 

Здравствуйте!

Не могу решить проблему, может кто сталкивался уже?

После добавления функции OnChartEvent эксперт вместо 3 сек. загрузки начинает грузиться 1 мин. 55 сек. то есть в 38 раз медленнее даже если функция пустая:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{

}

а в режиме отладки вообще так и не дождался когда загрузится.

Не подскажите как ускорить процесс загрузки эксперта с функцией OnChartEvent ???

Документация по MQL5: Программы MQL5 / Выполнение программ
Документация по MQL5: Программы MQL5 / Выполнение программ
  • www.mql5.com
Программы MQL5 / Выполнение программ - Документация по MQL5
 

Что-то вы не так делаете.

Не верю я что такая разница в рабте с событиями и без (если конечно все правильно организовано).

Можно посмотреть на код (можно только в общих чертах)?


 
Interesting:

Что-то вы не так делаете.

Не верю я что такая разница в рабте с событиями и без (если конечно все правильно организовано).

Можно посмотреть на код (можно только в общих чертах)?


Код я вообще убрал из функции OnChartEvent!

Без OnChartEvent грузится 3 сек.

вставляю:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)

{


}

грузится 1 мин. 55 сек.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 

Я про OnInit и OnChartEvent и говорю.

Важно как и где используется EventChartCustom, а также какие события и как обрабатывает сам OnChartEvent.

Сейчас посмотрю как это у меня работает.

Документация по MQL5: Работа с событиями / EventChartCustom
Документация по MQL5: Работа с событиями / EventChartCustom
  • www.mql5.com
Работа с событиями / EventChartCustom - Документация по MQL5
 
Interesting:

Я про OnInit и OnChartEvent и говорю.

Важно как и где используется OnChartEvent.

Сейчас посмотрю как это у меня работает.


в OnInit() ни чего особенного, вот:

int OnInit()
{
   //--1. Инициализировать основные параметры --
   if (!im.InizMain()) return -1;//-- Если не вышло  то вообще завершить работу --
 
   g_d_MaxLimit = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_LIMIT);//500-Максимально допустимый совокупный объем открытой позиции и отложенных ордеров (вне зависимости от направления) на одном символе
   g_d_MaxLot = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);//500-Максимальный объем для заключения сделки
   g_d_MinLot = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);//0.01 Минимальный объем для заключения сделки
   g_d_StepLot= SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);//0.01 Минимальный шаг изменения объема для заключения сделки
   g_i_Laverage = (int)AccountInfoInteger(ACCOUNT_LEVERAGE);
   g_i_TradeStopsLevel = (int)SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL);//-38 Минимальный отступ в пунктах от текущей цены закрытия для установки Stop ордеров
  
   //-- Записать начальное значение лота для торговли --
   g_d_Lot = ex_Lot;
   CalcLot(g_d_Lot);//-- Вычислить размер лота в зависимости от процента --

   HWND_Montana = iCustom(Symbol(),Period(),PathAllIndicators+........);
   if (HWND_Montana == INVALID_HANDLE){
      Print("Montana_MA_long_double_15.ex5 = ",HWND_Montana,"  error = ",GetLastError());
      return -1;
   } 
  
return(0);
}

 

А Вы вставьте в код OnChartEvent принты для трассировки событий, может валится огромное количество сообщений от других индикаторов и экспертов.

Например, кто-то активно управляет тысячами объектов.

 
Renat:

А Вы вставьте в код OnChartEvent принты для трассировки событий, может валится огромное количество сообщений от других индикаторов и экспертов.

Например, кто-то активно управляет тысячами объектов.


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

Да и вроде пока блок инициализации не завершиться все остальное не обрабатывается. Или OnChartEvent это нынче исключение из правил?

 

Куда уж легче вставить и замерить на практике. Это займет 5 минут.

Ведь кода проверочного нет.



 
Renat:

Куда уж легче вставить и замерить на практике. Это займет 5 минут.

Ведь кода проверочного нет.


На счет примера.

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

При установке на график открытого терминала показывалось значение от 15 до 47.

При перезагрузке терминала получал значение от 94 до 1800.

По времени инициализации при старте терминала меня вполне устроил этот вариант (94 миллисекунды)

2011.04.12 18:39:00     Forum (EURUSD,D1)       Initialization: Loading system information.
2011.04.12 18:39:01     Forum (EURUSD,D1)       Initialization: Changing the template based on the parameters of the trading system.
2011.04.12 18:39:01     Forum (EURUSD,D1)       Initialization: Loading of information on the trade account.
2011.04.12 18:39:01     Forum (EURUSD,D1)       Trade system: Processing...
2011.04.12 18:39:01     Forum (EURUSD,D1)       Продолжительность инициализации - 94
2011.04.12 18:39:10     Experts AutoTrading is disabled
2011.04.12 18:39:11     Forum (EURUSD,D1)       New event ID 1006-Parameters of the terminal - Trade forbidden!
2011.04.12 18:39:21     Forum (EURUSD,D1)       New event ID 1004-Parameters of the terminal - Dll forbidden!
2011.04.12 18:39:21     Forum (EURUSD,D1)       New event ID 1005-Parameters of the terminal - Trade allowed.
2011.04.12 18:39:53     Forum (EURUSD,D1)       New event ID 1003-Parameters of the terminal - Dll allowed.
2011.04.12 18:39:53     Forum (EURUSD,D1)       New event ID 1006-Parameters of the terminal - Trade forbidden!
2011.04.12 18:40:19     Forum (EURUSD,D1)       New event ID 1004-Parameters of the terminal - Dll forbidden!
2011.04.12 18:40:19     Forum (EURUSD,D1)       New event ID 1005-Parameters of the terminal - Trade allowed.

PS

Основные вещи в блоке инициализации можно заменить на свои или взять из статьи.

Объекты "Терминал" и Таймер" мои собственные и предназначены для отслеживания состояния терминала и управаления таймером.

Файлы:
Forum-4.mq5  18 kb
 
Interesting:

На счет примера.

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


Я имел в виду, чтобы gisip сам вставил в свой скрипт отлов событий.

По всей видимости его соседние индикаторы вовсю управляют огромным количеством объектов, что выливается в шквал бродкаст сообщений всем скриптам на этом графике.

 
Renat:

Куда уж легче вставить и замерить на практике. Это займет 5 минут.

Ведь кода проверочного нет.



Renat:

А Вы вставьте в код OnChartEvent принты для трассировки событий, может валится огромное количество сообщений от других индикаторов и экспертов.

Например, кто-то активно управляет тысячами объектов.


Я попробовал:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{

   Print ("sparam: " + sparam);

}


Да от внешнего индикатора от созданных им объектов идет большое кол-во сообщений!

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

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Свойства объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Свойства объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Свойства объектов - Документация по MQL5