Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
andreybs
609
andreybs  

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

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

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



o_o
Модератор
23921
o_o  
andreybs:

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

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

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

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

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

Dmitry Fedoseev
43827
Dmitry Fedoseev  
Да и dll не надо писать - просто посмотреть, что там находится в массиве при копировани его в тестере и на счете.
o_o
Модератор
23921
o_o  
и действительно, зачем DLL мучать.
andreybs
609
andreybs  

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

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

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

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

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

Dmitry Fedoseev
43827
Dmitry Fedoseev  

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

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

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