Обновление платформы MetaTrader 4 билд 625: Журналы в MetaTrader Market и новый MetaViewer - страница 33

 

добавте пожалуйста OBJPROP_FILL для OBJ_LABEL и OBJ_TEXT

чтобы фон заливался цветом

 
kazakov.v:



Видимо потому что open это ссылка. Попробуй слать Open.



вид сбоку.
 
Alexey_74:

вид сбоку.
Я не следил за этим вопросом, может и было что-то сказано об этом... Ну тогда промолчи )))
А почему-бы не воспользоваться ArrayCopySeries()? docs.mql4.com/ru/array/arraycopyseries
 
Spy:
Всё гораздо проще. ZeroMemory().

Не универсально:

1. "Функция ZeroMemory() не применима для классов с защищенными членами или наследованием".

2. "Для любых массивов, не защищенных модификатором const, производится обнуление всех элементов".

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

 
Alexey_74:

вид сбоку.

Точно. Там похоже приходит указатель на массив mqlrates. Т.е. в dll-ке надо ловить массив mqlrates, хотя из mql отправлен (типа) массив double.

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

 
kazakov.v:

Точно. Там похоже приходит указатель на массив mqlrates. Т.е. в dll-ке надо ловить массив mqlrates, хотя из mql отправлен (типа) массив double.

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

Так и есть.

Текст индюка не меняем:

А вот текст длл меняем - double на RateInfo

Вот и срослось

Колонка open стала, как родной братец.

При этом, однако, в длл отсылается массив double, а принимается структура. Я даже и не знаю... Не, теперь-то, конечно, принять в длл-ке массив double &open[] можно. Т.е. в MQL отпадает необходимость промежуточного массива. Однако, боюсь, что через месяц не вспомню, почему я массив дабл принимал в длл структурой. Для сохранения "видимой логики" придется, видимо, пользоваться промежуточными массивами.

"...нафига дублировать то, память не резиновая" - в данном контексте не соглашусь. Хранение данных только в структуре удобнее разработчикам. Мы и так на каждый чих плодим собственные массивы. Либо по отдельности, типа, my_open[], my_close[]. либо целиком MqlRates rates[]. Это я не в укор разработчикам, ни боже ж мой. К тому же OnCalculate() со всем многообразием передаваемых параметров есть только в индюках. В советниках и скриптах все равно ничего подобного нет.

P.S. Однако все равно не понятно, почему разработчики обошли вопрос упорным молчанием. Подсказали бы ещё 2 недели назад, "народ" бы дурью не маялся. Я на форуме с 600 билда, не помню, чтоб подобный вопрос поднимался и обсуждался.

 
Alexey_74:

Так и есть.

Текст индюка не меняем:

А вот текст длл меняем - double на RateInfo

Вот и срослось

Колонка open стала, как родной братец.

При этом, однако, в длл отсылается массив double, а принимается структура. Я даже и не знаю... Не, теперь-то, конечно, принять в длл-ке массив double &open[] можно.

Самое интересное, что при отсылке любого параметра из ссылочных, например, low, а не open, в DLL передаётся все равно массив MqlRates.

Вместо OnCalculate() с портянкой параметров подошла бы OnCalculate() с тремя параметрами, где третий параметр - "const MqlRates &[]", поскольку при попытке передачи любого из портяночных параметров все равно в DLL передаётся именно массив MqlRates. Но есть одна проблема: если константные массивы простых типов, каковыми являются double, int, long и datetime, в MQL4 разрешено передавать в качестве параметра в функцию, то константные массивы объектов - нет, а MqlRates - объект. Согласиться на то, чтобы "трёхпараметрная" OnCalculate() принимала ссылку на неконстантный массив MqlRates, чтобы его можно было передавать дальше, разработчики, наверное, тоже не могут.

Alexey_74:

Т.е. в MQL отпадает необходимость промежуточного массива. Однако, боюсь, что через месяц не вспомню, почему я массив дабл принимал в длл структурой.

В MQL4 есть возможность добавлять в код комментарии любой степени подробности. :)

Alexey_74:

P.S. Однако все равно не понятно, почему разработчики обошли вопрос упорным молчанием. Подсказали бы ещё 2 недели назад, "народ" бы дурью не маялся. Я на форуме с 600 билда, не помню, чтоб подобный вопрос поднимался и обсуждался.

Наверное, это - запрещённая информация. :)

 
На отправку сообщений на почтовый ящик тоже действует количественное ограничение? Если да, то почему в справке об этом ни слова? А если функция блокируется, то как на долго?
 
simpleton:

Вместо OnCalculate() с портянкой параметров подошла бы OnCalculate() с тремя параметрами, где третий параметр - "const MqlRates &[]"



Поддерживаю!

 
simpleton:

Самое интересное, что при отсылке любого параметра из ссылочных, например, low, а не open, в DLL передаётся все равно массив MqlRates.

Нормально пролазит всё, что в структуре MqlRates имеет тип double. А также и по отдельности Open, High, Low, Close.

test(rates,arr,Close,outrates,outarr,outopen);
simpleton:

Вместо OnCalculate() с портянкой параметров подошла бы OnCalculate() с тремя параметрами, где третий параметр - "const MqlRates &[]"

Предлагаю сократить до двух. Всё равно Time, Open, High, Low, Close, Spread, Volume и так работают. И OnCalculate() не будет на монстра походить. Если вдруг сильно надо, можно и структуру сделать и инклюдить везде, где нужно, поскольку, почти нигде и не нужно. А так, получается, навязанное параметрическое излишество. Если, конечно, это не сделано для того, чтобы потоки работали со свистом (или ещё быстрее). Но мы ж не знаем. А на взгляд не посвященного, OnCalculate() - параметрическое излишество.

Причина обращения: