Вопрос к профессионалам: ООП и MQL4 - страница 2

 
andreybs:

Преимуществ масса, а вот на скорости это точно не отразилось бы. Какая разница - перейти по одному указателю или по 2-м последовательно? Для производительности - никакой разницы.

Нет разницы если такой вызов происходит редко, а если постоянно и при этом в циклах, то разница будет существенная. Операции с памятью вещь не самая быстрая в процессоре.

 
andreybs:

А перепроцессор может "играть" именами переменных (например, если создание группы переменных, т.е. куска кода засунуть в некий макрос) или он может только подставлять предварительно объявленные значения?

Если проект очень большой, перенесите все расчеты в dll. dll можно писать на любом языке. Будут и классы и структуры. Вызывать объекты классов можно через функции-обертки.

Или оформляйте все логические блоки программы отдельными функциями, как уже тут советовали.

 
joo:

Если проект очень большой, перенесите все расчеты в dll. dll можно писать на любом языке. Будут и классы и структуры. Вызывать объекты классов можно через функции-обертки.

Или оформляйте все логические блоки программы отдельными функциями, как уже тут советовали.


Хм... неплохая мысль с dll. Когда то давно, когда я профессионально занимался программированием, для меня не составляло труда написать dll. Но я этим не занимался уже лет 8. От сюда вопрос - в чем можно "легко" собрать dll, чтобы не устанавливать тяжелых IDE или фреймворков? Я зык программирования C++, VB, Pascal - не принципиален...
 
joo:

Если проект очень большой, перенесите все расчеты в dll. dll можно писать на любом языке. Будут и классы и структуры. Вызывать объекты классов можно через функции-обертки.

Или оформляйте все логические блоки программы отдельными функциями, как уже тут советовали.


А вообще, я так подумал, dll - тоже не лучший выход. Дело в том, что индикаторные буферы должны быть объявлены внутри тела самого индикатора. Поэтому если весь индикатор реализовать внутри dll вместе с его буферами, то возникает вопрос - сможет ли отрисовать MetaTrader линии индикатора, если ему отдать ссылку на массив значений, хранящихся в dll. Если отрисовать не сможет, то dll будет тем же самым, что просто вынести функции в обычную mql-библиотеку. Это я уже сделал. Работает быстро, выглядит криво.

Я вот подумываю о создании многомерных массивов для индикаторных буферов. Это, наверное, будет проще... альтернатива структуры.

 
andreybs:
Я вот подумываю о создании многомерных массивов для индикаторных буферов.
Индикаторные буферы лучше не использовать воопще, а рисовать объектами.
 
Andrei01:
Индикаторные буферы лучше не использовать воопще, а рисовать объектами.
Хватит чушь нести.
 
TheXpert:
Хватит чушь нести.
Почему чушь?
 

Любой индикатор оперирует данными торгового инструмента. Можно передавать массивы нужного размера с данными торгового инструмента по ссылке в dll. Напрямую передать индикаторные буферы по ссылке в dll не удастся (я так думаю). Всё. Сколь угодно сложные вычисления производятся в dll (все прелести ООП). Обработанные данные возвращаются обратно в индикаторный буфер через озвученные массивы.


PS. Всё это уже вчерашний день. Сложные вычисления можно производить на МТ5 (там ООП), при скорости соизмеримой с работой dll. Торговые приказы можно передавать в МТ4 (пока так, реальной торговли на МТ5 пока нет). Заодно познакомитесь с новой платформой.

 
andreybs:

А вообще, я так подумал, dll - тоже не лучший выход. Дело в том, что индикаторные буферы должны быть объявлены внутри тела самого индикатора. Поэтому если весь индикатор реализовать внутри dll вместе с его буферами, то возникает вопрос - сможет ли отрисовать MetaTrader линии индикатора, если ему отдать ссылку на массив значений, хранящихся в dll. Если отрисовать не сможет, то dll будет тем же самым, что просто вынести функции в обычную mql-библиотеку. Это я уже сделал. Работает быстро, выглядит криво.

Я вот подумываю о создании многомерных массивов для индикаторных буферов. Это, наверное, будет проще... альтернатива структуры.

Сами себе костыли придумываете. Пишите индикаторы в DLL, буферы выкидываете, зачем вам этот костыль MT4?! Свои индикаторы передают красиво (ООП) данные другим свои индикаторам (таже самая DLL). Те, в свою очередь, передают данные советнику на MQL4 - который получает только сигналы и больше ничего. Весь анализ и принятие решений в DLL. Советник на MQL4 может быть вообще универсальным для всех стратегий. Меняете только DLL, которая и является вашей ТС. Так можно полностью уйти от MQL4. И, как бонус, легко перейти на любую другую платформу со своим API или языком (MQL5). Чтобы перейти на тот же MQL5 вам не надо будет переписывать свою ТС (DLL), а только написать аналогичный универсальный советник-приемщик сигналов от DLL.
 
hrenfx:
Сами себе костыли придумываете. Пишите индикаторы в DLL, буферы выкидываете, зачем вам этот костыль MT4?! Свои индикаторы передают красиво (ООП) данные другим свои индикаторам (таже самая DLL). Те, в свою очередь, передают данные советнику на MQL4 - который получает только сигналы и больше ничего. Весь анализ и принятие решений в DLL. Советник на MQL4 может быть вообще универсальным для всех стратегий. Меняете только DLL, которая и является вашей ТС. Так можно полностью уйти от MQL4. И, как бонус, легко перейти на любую другую платформу со своим API или языком (MQL5). Чтобы перейти на тот же MQL5 вам не надо будет переписывать свою ТС (DLL), а только написать аналогичный универсальный советник-приемщик сигналов от DLL.

Но при вычислении индикаторных буферов нужен прямой доступ ко многим массивам данных MetaTrader (Open, Close и т.п.). Кроме того, перенося весь индикатор в dll, не получится обращаться к стандартным индикаторам трэйдера. Да и сложенее это - все реализовать внутри dll, хотя бы потому, что дебаг проводить сложнее (по крайней мере, я не представляю, как). Вариант с ООП в MQL5 мне кажется более перспективным. Но пока он не распространен, придется костыли вставлять. В общем, в процессе дискуссии я придумал довольно красивое решение, как реализовать тиражируемую структуру данных на mql4, используя стандартные средства...
Причина обращения: