эмуляция окружения EA в процессе его тестирования

 

Приветствую!

Я продолжаю писать DLL, поддерживающую ряд индикаторов для моего советника. Мне кажется, что в структуре классов в DLL я мог допустить ошибку, свалив в одну кучу все внешние таймсерии - EURUSD H1, EURUSD M30, EURJPY M15 и т.п. Дело в том, что в процессе тестирования стратегии, работает эмуляция таймсерий терминала с поправкой на то историческое время, за которое происходит тестирование. Ну то есть если в обычном режиме iClose[0] - это последняя цена закрытия, то в процессе тестирования iClose[0] будет выдавать цену закрытия для последнего эмулируемого тика.

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



 
andreybs:

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

а вы проверяли что возвращает интересуемая функция ArrayCopyRates ? то что вам надо или нет?
 
sergeev:
а вы проверяли что возвращает интересуемая функция ArrayCopyRates ? то что вам надо или нет?

в обычном режиме ArrayCopyRates работает, как надо. но в режиме тестирования стратегии пока нет возможности проверить - до момента, когда можно будет подключить DLL к советнику пройдет еще время... я пока с индикаторами ковыряюсь. в документации явно не написано, что ArrayCopyRates эмулируется в режиме тестирования
 
andreybs:

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

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

 
Да и dll не надо писать - просто посмотреть, что там находится в массиве при копировани его в тестере и на счете.
 
и действительно, зачем DLL мучать.
 

нашел в документации:

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

Библиотеки пользуются переменными вызвавшего их модуля.

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

То есть в терминале нет "общих" таймсерий, как я сделал в DLL. Нужно для каждого индикатора/советника делать свой контейнер таймсерий.

 

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

Все что нужно - скопировать таймсерию и передать этот массив в dll.

 
Достаточно сделать одну функцию для передачи таймсерий, вызывать ее в начале start(), потом вызывать все остальные функции, только тогда в dll массив надо будет копировать в массив объявленный на глобальном уровне. Можно и при вызове каждой функции пердавать в нее массив с таймсерией.
Причина обращения: