ООП - страница 2

 
Interesting:

По факту при нормальном подходе ООП реализованное в MQL5 (совместно с ресурсами самого терминала) дадут значительный прирост в скорости работы.

 

Про какую скорость работы вы пишите, про скорость работы программы или про скорость ее написания? 

 
Integer:

 

Производительность OOP не увеличивает. Польза от него - например, есть какая-то функция, вызываемая с некоторыми параметрами (допустим расчет ЕМА), в функции используется статическая переменная для сохранения предыдущего значения EMA. Поскольку функция хранит последнее значение, на основе которого будут выполнятся вычисления, то при следующем вызове функции, ее уже нельзя вызывать с другими параметрами (символ, таймфрейм, период сглаживания), поэтому, если надо вызывать функцию с разными параметрами, надо сделать ее копию с другим именем или вместо статической переменной использовать глобальную передаваемую по ссылке. Это единственный случай, когда удобней использовать объект - загружается экземпляр объекта, устанавливаются ему параметры, а потом вызывается метод без параметров. Если же в объект включены методы, выполнение которых не зависит от предыдущих выполнений или вообще от каких либо параметров с которыми загружается объект, это ничего не дает, кроме потребления ресурсов.

Увеличивает, увеличивает, еще как увеличивает. Правда тут все зависит от опыта, фантазии и кривизны рук программера (именно в таком порядке)... :)

А по сути даже если предположить, что ООП (при самом ужасном к нему подходе) не увеличит скорость исполнения, или увеличит ее незначительно (хотя, я лично сомневаюсь, что увеличение в 10-ки раз можно считать незначительным) оно все равно будет полезней для ПОНИМАЮЩИХ разработчиков чем все возможные недостатки ООП.

Тут дело в том, что MQL5 при наличии в неем ООП так или иначе будет способствовать развитию модульного (юнитного) подхода к программированию, чего не наблюдается в MQL4 (если не считать библиотек). Это вызвано тем, что структуры, классы или их группы удобно располагать в отдельных файлах (модулях) и при необходимости использовать.

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

Также по идее, применение ООП должно повысить уровень и удобство использования в торговых системах внешних DLL и иного программного тюнинга.

В совокупности с использованием библиотек это в десятки раз облегчит жизнь разработчикам, а также намного ускорит разработку достаточно сложных экспертов.

 
Integer:

 

Про какую скорость работы вы пишите, про скорость работы программы или про скорость ее написания? 

Про обе. Подробно про скорость разработки написано выше (конечно, это все имеет смысл если есть определенный опыт разработки и использования классов)...
 
Interesting:

Увеличивает, увеличивает, еще как увеличивает....

 Кто это вам сказал? Не правда. Все остальное правильно. 

 
Integer:

 Кто это вам сказал? Не правда. Все остальное правильно. 

Повторюсь - Увеличивает, увеличивает, еще как увеличивает. Правда тут все зависит от опыта, фантазии и кривизны рук программера (именно в таком порядке)...

Когда-то давно я сравнивал скорость инициализации своего советника, за исключением незначительных деталей программный код был одинаков (в MQL5 при этом использовалась миграционная библиотека). По итогам выяснилось, что MQL5 выполнял инициализацию в среднем в 2,5 раза быстрей.

Я конечно знаю, что это не показатель, но по прежнему уверен в том, что при правильном подходе, даже сейчас скорость MQL5 выше в среднем раз в 10.

Спорить тут можно до посинения, но вот стоит попробовать реализовать OnTrade() или OnChartEvent и все станет ясно. Но кроме этих вещей есть еще много "вкусностей"...

PS

Есть конечно косяки в скорости, связанные с тестером стратегий и индикаторами. Но со временем эти недостатки будут устранены разработчиками терминала, или авторами торговых экспертов.

Кроме того, MQ не раз заявляли о том, что максимальная скорость исполнения программного кода пока не доступна (насколько я знаю до сих пор)...

 
Увеличвает... увеличивает... осталось спеть это на мотив мантры с бубенчиком в руках одевшись в рясу. MQL5 быстрее MQL4, не потому, что он поддерживает объекты.
 
Integer:
Увеличвает... увеличивает... осталось спеть это на мотив мантры с бубенчиком в руках одевшись в рясу.

Integer:
MQL5 быстрее MQL4, не потому, что он поддерживает объекты.
Но всеж, в большинстве случаев быстрей. Да и вообще на мой взгляд не корректно сравнивать MQL5 с MQL4 (а также с иными языками программирования) по скорости работы с объектами.
 

С помощью функции GetTickCount() сделал тест аналогичных советников с применением ООП и без:

Тест my_oop_ea ( с ООП )

RJ 0 Core 1 15:12:15 Время теста = 115203

EO 0 Core 1 15:12:15 EURUSD,H1: 6124935 ticks (3052 bars) generated within 115203 ms (total bars in history 9199)

RP 0 Core 1 15:12:15 Disconnected


Тест My_First_EA ( без ООП )

RH 0 Core 1 15:18:54 Время теста = 90578

CR 0 Core 1 15:18:54 EURUSD,H1: 6124935 ticks (3052 bars) generated within 90578 ms (total bars in history 9199)

OR 0 Core 1 15:18:54 Disconnected


Разница небольшая но не в пользу ООП. А в случае оптимизации эта разница умножится на количество прогонов, если правильно понял.

Для себя выводы сделал.

 

Так же  сравнил стандартные советники MACD Sample для МТ5 ( с ООП ) и для МТ4:

Macd Sample MT5

FO 0 Core 1 18:03:21 Время теста = 126016

FD 0 Core 1 18:03:21 EURUSD,M1: 6124935 ticks (181129 bars) generated within 126016 ms (total bars in history 545615)


Macd Sample MT4

18:12:52 2010.06.30 23:59  MACD Sample EURUSD,M1:  Время теста = 64406

 

Результаты поразительные - MT5 и MQL c ООП не только пожиратель ресурсов, но и пожиратель времени трейдера.

 

Когда тестируете разные платформы MT4 и MT5, нельзя делать выводы именно об ООП. Различия в результатах на 90% обусловлены разной архитектурой систем.

Кроме того, пока у MQL5 полностью отключен оптимизатор кода - его доводим до ума. Как включим - результаты сразу кратно улучшатся.

Вчера как раз вышла статья со сравнением скорости MQL4 и MQL5 - рекомендую ознакомиться:

Опубликована статья Исследование быстродействия скользящих средних в MQL5:

Со времён создания первого индикатора простой скользящей средней, появилась масса разнообразных индикаторов. Многие из которых построены именно на схожем принципе или используют в своих расчётах те или иные способы обработки ценового ряда. При этом зачастую за бортом остаётся вопрос скорости вычислений таких индикаторов и оптимальности алгоритмов, заложенных в них. В статье рассмотрены все возможные варианты использования скользящих средних и проведён сравнительный анализ быстродействия каждого.

Автор: Sergey

 


Функция с еще одним параметром работает явно медленнее. Неужели только из-за параметра? 

Файлы:
test.mq5  2 kb
Причина обращения: