1.А как вы в DLL хранить, что то собираетесь?
2.Вообще вызывают функцию из DLL
Не совсем понятно,что работает и что кого вызывает.
Нельзя. Таймсерии передаются по ссылке. Это не требует дополнительной памяти.
Ок. Правильно ли я понял:
1. Раз памяти не выделяется и это всего лишь ссылка, то ее можно передать в DLL один раз и использовать там вечно. Обращение по этой ссылке будет всегда выдавать актуальные текущие значения котировок.
2. В процессе получения новых котировок, размер таймсерий может измениться и только в этом случае следует обновить ссылку в DLL, еще раз выполнив ArrayCopyRates. Или в этом нет необходимости - массив ссылок тоже динамический?
Проще говоря - как часто нужно обновлять ссылку на таймсерии? И если актуализировать одновременно много таймсерий, то это не будет излишне нагружать терминал?
1.А как вы в DLL хранить, что то собираетесь?
2.Вообще вызывают функцию из DLL
Не совсем понятно,что работает и что кого вызывает.
1. Обычный динамический массив внутри класса. А как вы себе представляете вычисление сложного индикатора с 12 массивами? Очевидно, их нужно "засунуть" в класс, при каждой новой котировке корректировать размер всех массивов в соответствии с размерностью таймсерий котировок, далее выполнить пересчет последнего эл-та в массиве. Реально из этих 12 массивов будут выводиться в терминал 2-3. Для работы советника могут потребоваться все массивы.
2. Вызывают функцию в DLL, которая вызывает кого-то еще, кому нужно считать актуальное значение последних котировок из терминала. Тут либо заранее нужно передать ВСЕ котировки в DLL (методом ArrayCopyRates), либо обратиться из DLL к терминалу, чтобы считать ТОЛЬКО НЕОБХОДИМЫЕ котировки. Последнее не понятно, как сделать.
Всё это нужно для ускорения вычислений или для секретности?
12 буферов? Их может быть и больше. Это нужно для масштабируемости и ускорения вычислений. Сейчас для EA на MQL4 приходится разбивать индикаторы на группы, выносить в библиотеки... Уперся в сложность, не читабельность и не масштабируемость кода. Без ООП труба.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день!
Поковыряв форум, так и не удалось найти полезной информации по теме, как обращаться из DLL к переменным и функциям терминала.
Создаем DLL, реализующую логику работы индикатора. При инициализации индикатора в терминале полностью выгружаем в DLL текущую таймсерию (High,Low,Close,Open,Volume,Time) - например, EURUSD H1. Далее при получении очередной котировки обновляем/достраиваем последний элемент таймсерии уже в самой DLL. Но вот беда, индикатору нужно знать несколько последних значений таймсерии другого таймфрейма - например, EURUSD M15. Неужели, придется вести в DLL полную копию всех используемых комбинаций таймсерий-таймфреймов? Это не эффективно с точки зрения памяти.
Возникает резонный вопрос - можно ли вызвать функцию терминала из DLL? Например, обратиться к iClose(...). Тогда не пришлось бы вести копию всех этих таймсерий в самой DLL. Кто что посоветует?