Скачать MetaTrader 5

Использование переменных в событии OnChartEvent индикатора в тестере

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Поиск на MQL5.community ведется во всех разделах. Попробуй сам!
Garynych
81
Garynych 2015.04.08 21:10 

В документации сказано, что:

При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent(), но в индикаторах эта функция в тестере не вызывается. Даже если индикатор имеет обработчик OnChartEvent() и этот индикатор используется в тестируемом эксперте, то сам индикатор не будет получать никаких пользовательских событий.

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

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

Примеры:

1. Объект объявлен на глобальном уровне и инициализирован в функции OnInit. К нему есть доступ из функции OnCalculate, но в функции OnChartEvent получаем сообщение об ошибке - invalid pointer

2. Есть функция, которая выводит в журнал содержимое переменной (переменная объявлена на глобальном уровне). При вызове этой функции из OnCalculate получаем ожидаемое значение, при вызове этой же функции из OnChartEvent получаем ерунду.

В эксперте подобное поведение отсутствует, индикатор в реальном времени работает корректно. 

MetaTester 5, build 1100.

Andrey Khatimlianskii
56174
Andrey Khatimlianskii 2015.04.13 00:09  

Это нужно в сервис-деск отправить.

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

Garynych
81
Garynych 2015.04.14 17:20  

На форуме есть шанс получить оперативный ответ от пользователей, кто с этим сталкивался, или от разработчиков, если они форум читают.

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

Andrey Khatimlianskii
56174
Andrey Khatimlianskii 2015.04.14 17:49  
Garynych:

На форуме есть шанс получить оперативный ответ от пользователей, кто с этим сталкивался, или от разработчиков, если они форум читают.

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

На конкретные вопросы/баг-репорты с достаточной информацией отвечают в течении дня-двух.
Garynych
81
Garynych 2015.04.16 16:56  
Ваши слова да Богу в уши - уже больше недели тишина. оставлю тут тикет... на всякий случай... #1195984
Slawa
Модератор
6842
Slawa 2015.04.16 17:52  

Этот вопрос уже неоднократно обсуждался.

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

Вы спросите, а как же OnCalculate? Всё просто. Перед каждым запуском эксперта запускается массовый расчёт всех индикаторов.

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

Garynych
81
Garynych 2015.04.17 14:20  

Спасибо за ответ, позволю себе подискутировать. Разговор идет именно о визуальном тестировании и тестируется не эксперт, а индикатор. И индикатор получает это событие, выполняет логику, описанную в обработчике, и выдает результат работы функции OnChartEvent()! Но дальше этого обработчика результаты не идут, даже если используются переменные, объявленные на глобальном уровне.

Мы же можем при визуальном тестировании тестировать именно индикатор? Или для теста индикатора все равно используется некий эксперт?

С сервис-деск я приложил код индикатора, который использовал для проверки.

Slawa
Модератор
6842
Slawa 2015.04.17 16:17  

Garynych:

Мы же можем при визуальном тестировании тестировать именно индикатор? Или для теста индикатора все равно используется некий эксперт?

Можно сказать, что при тесте индикатора крутится "пустой" эксперт. А тестируемый индикатор автоматически накладывается на график визуализации.

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

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

Garynych
81
Garynych 2015.04.17 16:56  
Теперь все понятно. Для полноты картины осталось поправить справку во избежание разночтений - индикатор событие обрабатывает, в смысле функция вызывается. Другой разговор, что толку от этого ноль.  Для себя вопрос закрыл, буду ждать реализации полноценной обработки.
Комбинатор
15923
Комбинатор 2015.04.17 20:34  
stringo:

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

Это значит в тестер в визуальном режиме добавится интерактивность?
Slawa
Модератор
6842
Slawa 2015.04.20 11:31  
TheXpert:
Это значит в тестер в визуальном режиме добавится интерактивность?
Да
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий