Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нет времени на изучение MQL5? Закажи приложение у разработчика!
andreybs
609
andreybs 2011.04.23 21:15 

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

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

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



o_O
Модератор
23316
o_O 2011.04.23 21:24  
andreybs:

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

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

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

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

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

Dmitry Fedoseev
41249
Dmitry Fedoseev 2011.04.23 21:37  
Да и dll не надо писать - просто посмотреть, что там находится в массиве при копировани его в тестере и на счете.
o_O
Модератор
23316
o_O 2011.04.23 21:38  
и действительно, зачем DLL мучать.
andreybs
609
andreybs 2011.04.23 21:50  

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

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

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

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

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

Dmitry Fedoseev
41249
Dmitry Fedoseev 2011.04.23 22:06  

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

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

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