Как лучше реализовать? - страница 2

 
AlexSTAL:

Есть класс, который оперирует данными нескольких таймфреймов одного инструмента (читай: всеми). Разделить его по таймфреймам не представляется возможным из-за логики.

2. Реализация в виде индикатора, который не добавляется на график, но создаётся iCustom с фиксированным таймфреймом (например только M1). Данный вариант идеален, но как управлять дополнительными методами класса (к примеру что-то дополнительно вывести)? Прямое сообщение ему не отправить...

У кого какие дельные мысли есть?

Как всегда, встретив категоричное утверждение, усомнился, а настолько ли оно истинно, чтобы быть таким вот категоричным?

Короче, изобрёл такой вариант: Индикатору при инициализации передавать в качестве спец-параметра некий MessageMagicNumber,

по которому он будет идентифицировать в дальнейшем сообщения адресованные лично ему.

Собсно всё.

У меня подобная схема работает в индикаторах, часто используются одновременно несколько таких индюков на одном чарте, и они не путаются в сообщениях.


 
MetaDriver:

Как всегда, встретив категоричное утверждение, усомнился, а настолько ли оно истинно, чтобы быть таким вот категоричным?

Короче, изобрёл такой вариант: Индикатору при инициализации передавать в качестве спец-параметра некий MessageMagicNumber,

по которому он будет идентифицировать в дальнейшем сообщения адресованные лично ему.

Собсно всё.

У меня подобная схема работает в индикаторах, часто используются одновременно несколько таких индюков на одном чарте, и они не путаются в сообщениях.

Тут дело такое: "2. Реализация в виде индикатора, который не добавляется на график". Но завтра проверю, дойдёт ли до него пользовательское сообщение...
 
AlexSTAL:
Тут дело такое: "2. Реализация в виде индикатора, который не добавляется на график". Но завтра проверю, дойдёт ли до него пользовательское сообщение...

По идее должон. По моей. :) Но не факт. В данном случае зависит от идей разработчиков mql5. :)

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

// Чего-то новое городить для проверки сейчас влом. А хотелось бы знать - вызывается в таком режиме OnChartEvent() али нет.

 
MetaDriver:

По идее должон. По моей. :) Но не факт. В данном случае зависит от идей разработчиков mql5. :)

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

// Чего-то новое городить для проверки сейчас влом. А хотелось бы знать - вызывается в таком режиме OnChartEvent() али нет.

OnChartEvent() это одно из событий чарта. Индикатор же работает в своём потоке и к чарту имеет косвенное отношение. Короче событие из индикатора не отловить. Правда не проверял как с индюками в сепаратных окнах но индюки объявленные чартными точно не ловят событие чарта.
 

Urain:

OnChartEvent() это одно из событий чарта. Индикатор же работает в своём потоке и к чарту имеет косвенное отношение. Короче событие из индикатора не отловить. Правда не проверял как с индюками в сепаратных окнах но индюки объявленные чартными точно не ловят событие чарта.

"И тут Остапа понесло..." 

Где вы такое слышали и как проверяли, что подумали, что индюки не отслеживают события чарта?

Индикаторы НОРМАЛЬНО отслеживают все события !


//+------------------------------------------------------------------+
//|                                                      iTraceAgent |
//+------------------------------------------------------------------+

#property indicator_chart_window
input long cid=0; // чарт получателя
//------------------------------------------------------------------    OnCalculate // функция фейк, главное чтоб была
int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double& price[])
{ return(rates_total); }
//------------------------------------------------------------------    OnChartEvent
void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
   EventChartCustom(cid, (ushort)id, lparam, dparam, sparam); // отправляем событие с этого чарта на другой чарт
}

 
sergeev:

"И тут Остапа понесло..." 

Индикаторы НОРМАЛЬНО отслеживают все события чарта!



Задача как раз в обратном, из чарта на котором не прикреплён советник получить событие на чарт где работает советник.

Например есть чарт EURUSD на нём запускаем советник, который запускает агентов и отслеживает события других чартов.

ЗЫ у вас же агенты прийдётся запускать на всех чартах вручную чтоб они отправляли события на зарание заданный чарт, а его ID ещё нужно получить, и скорее всего это придётся делать через глобал или опять ручками.

 
Urain:

Задача как раз в обратном, из чарта на котором не прикреплён советник получить событие на чарт где работает советник.

Например есть чарт EURUSD на нём запускаем советник, который запускает агентов и отслеживает события других чартов.

Николай, вы меня удивляете.

Индюк из моего поста выше - делает именно это!  Тот код - это и есть весь Агент, который отправляет события.

Единственное я там не расписал вызов индюка из эксперта. Но разве с этим есть проблемы?

void Create(long chart)   // chart - ID текущего чарта с экспертом
{
	m_chart=ChartOpen(Symbol(), Period()); // открыли окно чарта для работы
        m_hagent=iCustom(Symbol(), Period(), "!TraceAgent", chart); // создали индюк, и передали ему текущий чарт
        if (m_hagent==INVALID_HANDLE) return; 
        ChartIndicatorAdd(m_chart, 0, m_hagent); // закинули индюк на новое созданное окно


 
Urain:
Щас пять минут подробнее обдумаю.

Алексей прав. Во первых, чартные индикаторы события ловят. Так же как сепаратные. // Проверено.

Во вторых, сообщения нужно отправлять "широковещательно" - всем чартам в цикле. Кому оно предназначено, сам его отловит-распознает.

 
Urain:

Вот тут есть только ID получателя и нет ID отправителя, а значит что индюки придётся запускать на чартах ручками. Иначе никак.

cid - ID получателя...

почему ручками то? см. пост выше.

 
Да, вы правы, я забыл о присоединении индюков чартам.

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