Советники: Мультивалютный обработчик событий OnTick(string symbol) - страница 3

 
micle:

Код с статье устарел.

Да, код писался когда еще обработчик OnChartEvent в тестере не работал.

Urain:

Перечитал с интересом, хм.

Эти все танцы с бубном не потребовались бы!!!, если бы!!!  MQ включили бы!!! трансляцию стакана на сервере ДЦ по умолчанию, и не давали бы ДЦ их выключать. Пусть пустой стакан с одними лишь bid и ask, но чтоб транслировался.

Тогда мультивалютный тик можно запросто отслеживать в OnBookEvent по подписке на нужный инструмент.

По сути OnBookEvent и есть стандартный обработчик мультитика.

ЗЫ а так это пока возможно лишь в диллингах транслирующих стакан.

Игрался как-то с OnBookEvent. Для экспертов, в общем-то, подошло бы. Хотя я бы убрал "широковещательность" и сделал подписку для чартов. Еще минус: не работает в индикаторах. В тестере не пробовал.

С момента первых публикаций на эту тему было много бубнов убито. Появилось кое-что более приемлемое. Быть может как-нибудь опубликую.

 
Lizar:

Да, код писался когда еще обработчик OnChartEvent в тестере не работал.

Игрался как-то с OnBookEvent. Для экспертов, в общем-то, подошло бы. Хотя я бы убрал "широковещательность" и сделал подписку для чартов. Еще минус: не работает в индикаторах. В тестере не пробовал.

С момента первых публикаций на эту тему было много бубнов убито. Появилось кое-что более приемлемое. Быть может как-нибудь опубликую.

Там как раз тоньше сделано, там подписка не для чартов а для конкретных советников.

Так что без подписки сигналы стакана получать не будешь. Поэтому широковещательность вполне качественно обработана.

Запусти сов в прикрепе на двух чартах у которых есть стакан. Каждый сов будет получать лишь сигнал на который подписан.

Файлы:
 
Konstantin Gruzdev:

Приглашаю к обсуждению ;)

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

Особенности языка mql5, тонкости и приёмы работы

Andrey Khatimlianskii, 2018.10.09 23:18

При работе пустого советника, использующего шпиона на 50 инструментах, в лог начинают сыпаться сообщения:

2018.10.09 22:49:24.730 Spy (AUDNZD,W1) indicator is too slow, 4281 ms. rewrite the indicator, please

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

Это только у меня так?


Код советника:

#define ForEach(index,array)   for(int index=0, max_##index=ArraySize(array); index<max_##index; index++)

string Symbols[];

int OnInit()
{
   ArrayResize( Symbols, SymbolsTotal(true) );

   ForEach( i, Symbols )
   {
      Symbols[i] = SymbolName(i,true);

      if( Symbols[i] != _Symbol )
         iCustom( Symbols[i], PERIOD_W1, "Spy.ex5", ChartID(), i );
   }
   return(INIT_SUCCEEDED);
}

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
   if( id == CHARTEVENT_CUSTOM )
      OnTickMS( Symbols[ (int)lparam ] );
}

void OnTick()
{
   CheckSignal( _Symbol );
}

void OnTickMS(const string &Symb)
{
   CheckSignal( Symb );
}

void CheckSignal(const string symbol)
{
   //Comment( symbol, ": ",
   //                   DoubleToString( SymbolInfoDouble( symbol, SYMBOL_BID ), 5 ), " / ",
   //                   DoubleToString( SymbolInfoDouble( symbol, SYMBOL_ASK ), 5 ) );
   return;
}


Профилировщик показывает 95% времени iCustom, OnChartEvent почти ничего не занимает. Процессор (i5-3570) грузится на 75%.


Особенности языка mql5, тонкости и приёмы работы
Особенности языка mql5, тонкости и приёмы работы
  • 2018.09.21
  • www.mql5.com
В данной теме будут обсуждаться недокументированные приёмы работы с языком mql5, примеры решения тех, или иных задач...
 
Andrey Khatimlianskii:

Приглашаю к обсуждению ;)


Есть предложение, попробовать использовать IndicatorRelease() и IndicatorDelete() соответствующее к-во раз в OnDeinit() Вашего советника.
 
nra_:
Есть предложение, попробовать использовать IndicatorRelease() и IndicatorDelete() соответствующее к-во раз в OnDeinit() Вашего советника.

До OnDeinit дело доходить не должно, мне нужно, чтобы это все работало.

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

 
Andrey Khatimlianskii:

До OnDeinit дело доходить не должно, мне нужно, чтобы это все работало.

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

Напрашивается провести профилировку индикатора, чтобы выяснить где именно тратятся 4281 мс. Может быть в самой отправке сообщений.

 
Stanislav Korotky:

Напрашивается провести профилировку индикатора, чтобы выяснить где именно тратятся 4281 мс. Может быть в самой отправке сообщений.

Провели.

EventChartCustom в какой-то момент начинает выполняться больше 3 секунд.

 
Я понимаю, что до OnDeinit в советнике дело доходить не должно, но это в идеале. Есть ли уверенность, что за 15 часов Вашего теста OnInit в советнике был вызван 1 раз?
 
nra_:
Я понимаю, что до OnDeinit в советнике дело доходить не должно, но это в идеале. Есть ли уверенность, что за 15 часов Вашего теста OnInit в советнике был вызван 1 раз?

Да. А почему должно быть иначе?

Это же советник, у него переинициализаций без участия пользователя (смена чарта, параметров, перекомпиляция) не бывает.

 

Хорошо, хотя я бы проверил, так ли это в реальности. Сейчас поставлю тест на ноуте. Вечером посмотрим на результат. У меня советник подобным образом экспортирует тики во внешний модуль, хочется понимать, насколько решение с использованием OnChartEvent устойчиво.

ПС. У Вас в обзоре рынка кастомные символы в момент теста есть?

Причина обращения: