Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXIV): Основной торговый класс - автоматическая коррекция ошибочных параметров" - страница 3
Здравствуйте Артём - при более внимательной работе с этим кодом заметил такую особенность значения'shift', реализованного в EventsHandling() и OnDoEasyEvent() для корректной обработки торговых событий при работе в тестере... Как я понимаю, как вы указываете в статье, при работе в реальном времени торговые события доставляются по одному из OnChartEvent() по мере их срабатывания движком, в то время как в режиме тестирования они группируются и доставляются списком...
Мой вопрос заключается в следующем: не лучше ли реализовать специальный параметр функции в обработчике событий, а не жертвовать'lparam', который может содержать полезную информацию для обработчика событий? Я также думаю, что это сделает код более простым / более читаемым; вы согласны?
PS: В любом случае, я нахожу эту библиотеку действительно мощной, но в то же время сложной и трудной для понимания, однако после освоения она должна позволить очень быстро разрабатывать всевозможные стратегии на базе EA... Помимо огромной кривой обучения, я также заметил, что бэк-тестирование происходит довольно медленно, поэтому я надеюсь, что вы сможете решить этот вопрос, когда завершите набор функций, который вы запланировали для DoEasy.
void EventsHandling(void)
{
//--- Если торговое событие присутствуетif(engine.IsTradeEvent())
{
//--- Количество торговых событий, произошедших одновременноint total = engine.GetTradeEventsTotal();
for (int i = 0; i < total; i++)
{
//--- Получите следующее событие из списка одновременно произошедших событий по индексу
CEventBaseObj *event = engine.GetTradeEventByIndex(i);
if(event == NULL)
continue;
int shift = i;long lparam = event.LParam();
double dparam = event.DParam();
string sparam = event.SParam();
OnDoEasyEvent(CHARTEVENT_CUSTOM+event.ID(), lparam, dparam, sparam, shift);
}
}
//...//...
}
void OnDoEasyEvent(constint id, constlong &lparam, constdouble &dparam, conststring &sparam, int shift=0)
{
//...//...//--- Обработка торговых событийif(idx > TRADE_EVENT_NO_EVENT && idx < TRADE_EVENTS_NEXT_CODE)
{
//--- Получите список торговых событий
CArrayObj *list = engine.GetListAllOrdersEvents();
if(list == NULL) return;
//--- get the event index shift relative to the end of the list//--- in the tester, the shift is passed by the lparam parameter to the event handler//--- outside the tester, events are sent one by one and handled in OnChartEvent()int shift=(testing ? (int)lparam : 0);
CEvent *event=list.At(list.Total()-1-shift);
if(event==NULL) return;
//...//...
}
Здравствуйте Артём - при более внимательной работе с этим кодом, я заметил такую особенность значения ' shift ', реализованного в EventsHandling() и OnDoEasyEvent() для корректной обработки торговых событий при работе в тестере... Как я понимаю, как вы указываете в статье, при работе в реальном времени торговые события доставляются по одному из OnChartEvent() по мере их срабатывания движком, в то время как в режиме тестирования они группируются и доставляются в виде списка...
Мой вопрос заключается в следующем: не лучше ли реализовать специальный параметр функции в обработчике событий, а не жертвовать ' lparam ', который может содержать полезную информацию для обработчика событий? Я также думаю, что это сделает код более простым / более читаемым; вы согласны?
PS: В любом случае, я нахожу эту библиотеку действительно мощной, но в то же время сложной и трудной для понимания, однако после освоения она должна позволить очень быстро разрабатывать всевозможные стратегии на базе EA... Помимо огромной кривой обучения, я также заметил, что бэк-тестирование работает довольно медленно, поэтому я надеюсь, что вы сможете решить этот вопрос, когда завершите набор функций, который вы запланировали для DoEasy.
Нет. Здесь я не планировал ничего переделывать и, скорее всего, не буду. Все необходимые данные уже доставлены в объекты событий, а остальные данные уже взяты из тех объектов, чье событие было зарегистрировано.
Нет. Здесь я не планировал ничего переделывать и, скорее всего, не буду. Все необходимые данные уже доставлены в объекты событий, а остальные данные уже взяты из тех объектов, событие которых было зарегистрировано.
Хорошо, справедливо... Я согласен, что все необходимые данные находятся в объектах событий.
Здравствуйте, вы нашли проблему, о которой я говорил?
Здравствуйте Артём - при более внимательной работе с этим кодом заметил такую особенность значения'shift', реализованного в EventsHandling() и OnDoEasyEvent() для корректной обработки торговых событий при работе в тестере... Как я понимаю, как вы указываете в статье, при работе в реальном времени торговые события доставляются по одному из OnChartEvent() по мере их срабатывания движком, в то время как в режиме тестирования они группируются и доставляются списком...
Мой вопрос заключается в следующем: не лучше ли реализовать специальный параметр функции в обработчике событий, а не жертвовать'lparam', который может содержать полезную информацию для обработчика событий? Я также думаю, что это сделает код более простым / более читаемым; вы согласны?
PS: В любом случае, я нахожу эту библиотеку действительно мощной, но в то же время сложной и трудной для понимания, однако после освоения она должна позволить очень быстро разрабатывать всевозможные стратегии на базе EA... Помимо огромной кривой обучения, я также заметил, что бэк-тестирование происходит довольно медленно, поэтому я надеюсь, что вы сможете решить этот вопрос, когда завершите набор функций, который вы запланировали для DoEasy.
Здравствуйте Артём - при более внимательной работе с этим кодом, я заметил такую особенность значения ' shift ', реализованного в EventsHandling() и OnDoEasyEvent() для корректной обработки торговых событий при работе в тестере... Как я понимаю, как вы указываете в статье, при работе в реальном времени торговые события доставляются по одному из OnChartEvent() по мере их срабатывания движком, в то время как в режиме тестирования они группируются и доставляются в виде списка...
Мой вопрос заключается в следующем: не лучше ли реализовать специальный параметр функции в обработчике событий, а не жертвовать ' lparam ', который может содержать полезную информацию для обработчика событий? Я также думаю, что это сделает код более простым / более читаемым; вы согласны?
PS: В любом случае, я нахожу эту библиотеку действительно мощной, но в то же время сложной и трудной для понимания, однако после освоения она должна позволить очень быстро разрабатывать всевозможные стратегии на базе EA... Помимо огромной кривой обучения, я также заметил, что бэк-тестирование работает довольно медленно, поэтому я надеюсь, что вы сможете решить этот вопрос, когда завершите набор функций, который вы запланировали для DoEasy.
Нет. Здесь я не планировал ничего переделывать и, скорее всего, не буду. Все необходимые данные уже доставлены в объекты событий, а остальные данные уже взяты из тех объектов, чье событие было зарегистрировано.
Нет. Здесь я не планировал ничего переделывать и, скорее всего, не буду. Все необходимые данные уже доставлены в объекты событий, а остальные данные уже взяты из тех объектов, событие которых было зарегистрировано.
Хорошо, справедливо... Я согласен, что все необходимые данные находятся в объектах событий.
Не могли бы привести пример кода, чтоб, получив последнее торговое событие, вытащить тикет ордера/позиции и прочие свойства?