Обновление платформы MetaTrader 4 билд 625: Журналы в MetaTrader Market и новый MetaViewer - страница 33
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
добавте пожалуйста OBJPROP_FILL для OBJ_LABEL и OBJ_TEXT
чтобы фон заливался цветом
Видимо потому что open это ссылка. Попробуй слать Open.
вид сбоку.
вид сбоку.
А почему-бы не воспользоваться ArrayCopySeries()? docs.mql4.com/ru/array/arraycopyseries
Всё гораздо проще. ZeroMemory().
Не универсально:
1. "Функция ZeroMemory() не применима для классов с защищенными членами или наследованием".
2. "Для любых массивов, не защищенных модификатором const, производится обнуление всех элементов".
А с помощью конструкторов - каждого для своего класса - можно проинициализировать поля, в том числе и константные. А также объекты классов любой сложности со всяким наследованием и всяким уровнем доступа полей.
вид сбоку.
Точно. Там похоже приходит указатель на массив mqlrates. Т.е. в dll-ке надо ловить массив mqlrates, хотя из mql отправлен (типа) массив double.
Баг скорее всего. Или решили не хранить отдельные серии в отдельных массивах - нафига дублировать то, память не резиновая ))
Точно. Там похоже приходит указатель на массив mqlrates. Т.е. в dll-ке надо ловить массив mqlrates, хотя из mql отправлен (типа) массив double.
Баг скорее всего. Или решили не хранить отдельные серии в отдельных массивах - нафига дублировать то, память не резиновая ))
Так и есть.
Текст индюка не меняем:
А вот текст длл меняем - double на RateInfo
Вот и срослось
Колонка open стала, как родной братец.
При этом, однако, в длл отсылается массив double, а принимается структура. Я даже и не знаю... Не, теперь-то, конечно, принять в длл-ке массив double &open[] можно. Т.е. в MQL отпадает необходимость промежуточного массива. Однако, боюсь, что через месяц не вспомню, почему я массив дабл принимал в длл структурой. Для сохранения "видимой логики" придется, видимо, пользоваться промежуточными массивами.
"...нафига дублировать то, память не резиновая" - в данном контексте не соглашусь. Хранение данных только в структуре удобнее разработчикам. Мы и так на каждый чих плодим собственные массивы. Либо по отдельности, типа, my_open[], my_close[]. либо целиком MqlRates rates[]. Это я не в укор разработчикам, ни боже ж мой. К тому же OnCalculate() со всем многообразием передаваемых параметров есть только в индюках. В советниках и скриптах все равно ничего подобного нет.
P.S. Однако все равно не понятно, почему разработчики обошли вопрос упорным молчанием. Подсказали бы ещё 2 недели назад, "народ" бы дурью не маялся. Я на форуме с 600 билда, не помню, чтоб подобный вопрос поднимался и обсуждался.
Так и есть.
Текст индюка не меняем:
А вот текст длл меняем - double на RateInfo
Вот и срослось
Колонка open стала, как родной братец.
При этом, однако, в длл отсылается массив double, а принимается структура. Я даже и не знаю... Не, теперь-то, конечно, принять в длл-ке массив double &open[] можно.
Самое интересное, что при отсылке любого параметра из ссылочных, например, low, а не open, в DLL передаётся все равно массив MqlRates.
Вместо OnCalculate() с портянкой параметров подошла бы OnCalculate() с тремя параметрами, где третий параметр - "const MqlRates &[]", поскольку при попытке передачи любого из портяночных параметров все равно в DLL передаётся именно массив MqlRates. Но есть одна проблема: если константные массивы простых типов, каковыми являются double, int, long и datetime, в MQL4 разрешено передавать в качестве параметра в функцию, то константные массивы объектов - нет, а MqlRates - объект. Согласиться на то, чтобы "трёхпараметрная" OnCalculate() принимала ссылку на неконстантный массив MqlRates, чтобы его можно было передавать дальше, разработчики, наверное, тоже не могут.
Т.е. в MQL отпадает необходимость промежуточного массива. Однако, боюсь, что через месяц не вспомню, почему я массив дабл принимал в длл структурой.
В MQL4 есть возможность добавлять в код комментарии любой степени подробности. :)
P.S. Однако все равно не понятно, почему разработчики обошли вопрос упорным молчанием. Подсказали бы ещё 2 недели назад, "народ" бы дурью не маялся. Я на форуме с 600 билда, не помню, чтоб подобный вопрос поднимался и обсуждался.
Наверное, это - запрещённая информация. :)
Вместо OnCalculate() с портянкой параметров подошла бы OnCalculate() с тремя параметрами, где третий параметр - "const MqlRates &[]"
Поддерживаю!
Самое интересное, что при отсылке любого параметра из ссылочных, например, low, а не open, в DLL передаётся все равно массив MqlRates.
Нормально пролазит всё, что в структуре MqlRates имеет тип double. А также и по отдельности Open, High, Low, Close.
test(rates,arr,Close,outrates,outarr,outopen);
Вместо OnCalculate() с портянкой параметров подошла бы OnCalculate() с тремя параметрами, где третий параметр - "const MqlRates &[]"
Предлагаю сократить до двух. Всё равно Time, Open, High, Low, Close, Spread, Volume и так работают. И OnCalculate() не будет на монстра походить. Если вдруг сильно надо, можно и структуру сделать и инклюдить везде, где нужно, поскольку, почти нигде и не нужно. А так, получается, навязанное параметрическое излишество. Если, конечно, это не сделано для того, чтобы потоки работали со свистом (или ещё быстрее). Но мы ж не знаем. А на взгляд не посвященного, OnCalculate() - параметрическое излишество.