Обсуждение статьи "LifeHack для трейдера: готовим фастфуд из индикаторов" - страница 13

 
Vladimir Karputov:

- у Вас был красивый код и описание результатов замеров.

Я код посмотреть не успел

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "LifeHack для трейдера: готовим фастфуд из индикаторов"

Vasiliy Sokolov, 2018.01.29 10:43

Выкладываю свою версию измерения. За базовую версию советника был взят MACD Sample One value at a 5. В него были внесены небольшие изменения. Т.к. все значения индикаторов собираются в одном месте было не сложно сделать простую макроподстановку: Выводы думаю очевидны: при вызове индикаторов в MQL4 режиме, скорость ниже на 40%.

MQL5-style

i = 0 Pass = 0 OnTester = 7.679 s.: Count = 9986677, 1300517.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 7.645 s.: Count = 9986677, 1306301.8 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


MQL4-style (без кеша)

i = 0 Pass = 0 OnTester = 14.117 s.: Count = 9986677, 707422.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 14.067 s.: Count = 9986677, 709936.5 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


MQL4-style (с кешем)

i = 0 Pass = 0 OnTester = 10.077 s.: Count = 9986677, 991036.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 10.104 s.: Count = 9986677, 988388.5 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755

На 32% медленнее кешевый вариант, по сравнению с MQL5-style. Что же касается безкешевого варианта, то упомянутых 40% получить не удалось. Как и прежде, в два раза медленнее. Но совпадение по профиту, конечно, присутствует.

 

Извините, но я даже не понимаю, почему эта статья была допущена к публикации Metaquotes.

Основными преимуществами индикаторного хэндла в mql5 является возможность получить несколько значений из буфера, полностью отбросив его. И это для того, чтобы предоставить код, который будет значительно менее эффективным большую часть времени! Я даже не говорю о плохой практике кодирования, состоящей в том, чтобы не проверять возвращаемое значение функции.

Эта статья бесполезна или даже хуже. Не удивляйтесь, что люди хотят продолжать использовать mql4.

 
Alain Verleyen:

Извините, но я даже не понимаю, почему эта статья была допущена к публикации Metaquotes.

Основными преимуществами индикаторного хэндла в mql5 является возможность получить несколько значений из буфера, полностью отбросив его. И это для того, чтобы предоставить код, который будет значительно менее эффективным большую часть времени! Я даже не говорю о плохой практике кодирования, состоящей в том, чтобы не проверять возвращаемое значение функции.

Эта статья бесполезна или даже хуже. Не удивляйтесь, что люди хотят продолжать использовать mql4.

Я не думаю, что вы правы. Эта статья, во-первых, помогает не очень образованным и гибким программистам-любителям разобраться в работе с индикаторами в mql5 по сравнению с mql4, а во-вторых, показывает им способ, как можно использовать индикаторы так же, как они привыкли в MQL4.
 

Если я запускаю простой iVolume в цикле, по всем доступным инструментам, на MQL5, то платформа просто замирает, массивные вызовы copybuffer действуют как ddos-атака на операционную систему, она просто отключается, тогда как если я выполняю тот же процесс на MQL4, он работает гладко, как пачка горячего расплавленного масла.

На одной и той же машине, и это говорит мне больше, чем я должен знать.

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

 
Только отметки
 

Проблема в том, почему я должен копировать буфер каждый раз, когда мне нужно прочитать значение индикатора? Буфер уже есть, он уже вычислен, почему я не могу получить доступ к его значению напрямую?

Это бессмыслица!

У меня должен быть только прямой доступ к буферу индикатора, копирование его снова и снова будет только ухудшать производительность.

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

CopyBuffer(...) vs buffer[i] ?

 
ludoz:

Проблема в том, почему я должен копировать буфер каждый раз, когда мне нужно прочитать значение индикатора? Буфер уже есть, он уже вычислен, почему я не могу получить доступ к его значению напрямую?

Это бессмыслица!

У меня должен быть только прямой доступ к буферу индикатора, копирование его снова и снова будет только ухудшать производительность.

Я действительно не понимаю, почему Metaquotes пошла по этому пути.

CopyBuffer(...) vs buffer[i] ?

Потому что это не так просто. Индикатор работает в одном потоке, а советник - в другом (и у вас может быть несколько индикаторов/несколько советников). Если вы жалуетесь на такую простую процедуру, как handle/CopyBuffer, то, поверьте, вы не хотите работать с многопоточным приложением.

mql5 предоставляет общие решения, способные справиться с большинством "нормальных" ситуаций. Если у вас есть конкретная проблема в вашем проекте, то решение всегда найдется.

 
Сейчас это MQL5, но большинство людей по-прежнему используют mt4.