ArrayCopySeries не производит реального копирования, а обеспечивает
перенаправление доступа. Читайте документацию https://docs.mql4.com/ru/array/ArrayCopySeries
Используйте либо ArrayCopy (тогда предварительно необходимо распределить массив нужного размера) либо ArrayCopyRates, которая сделана специально для передачи ценовых массивов в dll. Смотрите наши примеры.
Используйте либо ArrayCopy (тогда предварительно необходимо распределить массив нужного размера) либо ArrayCopyRates, которая сделана специально для передачи ценовых массивов в dll. Смотрите наши примеры.
Проблема знакомая. Судя по хэлпу, так нужно передавать параметры,
но так и не разобрался какие адреса передает ArrayCopyRates()...
Возможно, это следствие реализации класса рейтов ( с удивлением обнаружил, что массивы рейтов doubl-ами не являются :( и их не передать как указатели: возможно реализованы как классы с соответствующими итераторами.....).
Увы, разобраться в краткие сроки у меня не получилось. Решил вопрос просто: объявил свои массивы рэйтов - (open, high .... ets) и переписал в них данные обычным циклом. После этого все передается.
Успехов.
Возможно, это следствие реализации класса рейтов ( с удивлением обнаружил, что массивы рейтов doubl-ами не являются :( и их не передать как указатели: возможно реализованы как классы с соответствующими итераторами.....).
Увы, разобраться в краткие сроки у меня не получилось. Решил вопрос просто: объявил свои массивы рэйтов - (open, high .... ets) и переписал в них данные обычным циклом. После этого все передается.
Успехов.
stringo писал (а):
ArrayCopySeries не производит реального копирования, а обеспечивает перенаправление доступа. Читайте документацию https://docs.mql4.com/ru/array/ArrayCopySeries
Используйте либо ArrayCopy (тогда предварительно необходимо распределить массив нужного размера) либо ArrayCopyRates, которая сделана специально для передачи ценовых массивов в dll. Смотрите наши примеры.
ArrayCopySeries не производит реального копирования, а обеспечивает перенаправление доступа. Читайте документацию https://docs.mql4.com/ru/array/ArrayCopySeries
Используйте либо ArrayCopy (тогда предварительно необходимо распределить массив нужного размера) либо ArrayCopyRates, которая сделана специально для передачи ценовых массивов в dll. Смотрите наши примеры.
Я документацию прочёл перед тем как программировать передачу в DLL указателей на массивы
Вот там написано
Реального распределения памяти под массив данных и копирования не происходит. При обращении к такому массиву производится перенаправление доступа. Исключение составляют массивы, назначенные в качестве индексных в пользовательских индикаторах. В этом случае производится реальное копирование данных.
Замечания: обычно массив используется, чтобы передать данные в DLL функцию. Реального распределения памяти под массив данных и копирования не происходит. При обращении к такому массиву производится перенаправление доступа. |
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
объявляю массив и получаю закрытия всех баров
double close[];
ArrayCopySeries(close, MODE_CLOSE, Symbol(), PERIOD_H1);
в эксперт импортируется из библиотеки функция
int barShift(double daytimes[]);
однако в эту функцию получаю указатель 0
MT4_EXPFUNC int __stdcall func(const double *close) {
return 1;
}
F если просто масcив передаю в функцию который объявил как
double close[] = {1.34, 1.56};
То всё нормально получаю в функции указатель на эти значения 1.34 ....
в чем может быть проблема или так нельзя передавать параметры?