Поскольку мы говорим о скорости вычисления, а не о разнице в работе алгоритмов, то сравнивать нужно простые функции. Приложенные индикаторы являются все-таки индикаторами, о правльности расчетов которых тут идет спор. Нужно взять простую функцию и реализовать ее двумя способами - как пользовательский индикатор и как вызываемую в коде функцию. Подобную проверку я уже делал и писал о ней -О скорости вычисления индикаторов в MQL4
Я вижу в примерах две разницы: test вызывается как функция(а не вставлен прямо в код) и содержание test беднее (нет работы с массивами). То есть ответ на вопрос о целесообразности применения iCustom продолжает выглядеть зависящим от конкретной ситуации. P.S. В моём примере не такая уж существенная разница в числе операций для двух вариантов - "обслуживающий код" ведь работает один раз, а циклы одни и те же.
1. Процедурный стиль программирования уступает по эффективности только модульному и объектно-ориентированному. Так что вынос алгоритма вычислений в отдельную фуекцию является закономерным.
2. А зачем работать с массивами во встроенной функции? Мы же ведем речь о разнице в стоимости вызова встроенной в код пользовательской функции и о вызове внешней функции через iCustom().
Rosh: 1. Процедурный стиль программирования уступает по эффективности только модульному и объектно-ориентированному. Так что вынос алгоритма вычислений в отдельную фуекцию является закономерным.
2. А зачем работать с массивами во встроенной функции? Мы же ведем речь о разнице в стоимости вызова встроенной в код пользовательской функции и о вызове внешней функции через iCustom().
1. Это именно итоговая эффективность, для больших проектов. По скорости как раз уступает. 2. Аналогично. Меня-то интересует именно итоговая эффективность. В случае MQL это обычно время на разработку плюс время на испытание в тестере. Хотя лишние секунды ожидания при загрузке терминала с реальным счётом тоже могут дорогого стоить. В смысле нервов, не у всех же правильные взгляды на торговлю :)
Как видите, использование отдельной функции вполне оправдано - разница по времени для цикла в миллиард проходов всего одна секунда. Зато насколько проще разрабатывать код!
Вот индикатор test.mq4
и вот скрипт, который замеряет скорость вычисления тестового алгоритма
через iCustom() и через вызов test().
P.S. В моём примере не такая уж существенная разница в числе операций для двух вариантов - "обслуживающий код" ведь работает один раз, а циклы одни и те же.
2. А зачем работать с массивами во встроенной функции? Мы же ведем речь о разнице в стоимости вызова встроенной в код пользовательской функции и о вызове внешней функции через iCustom().
1. Процедурный стиль программирования уступает по эффективности только модульному и объектно-ориентированному. Так что вынос алгоритма вычислений в отдельную фуекцию является закономерным.
2. А зачем работать с массивами во встроенной функции? Мы же ведем речь о разнице в стоимости вызова встроенной в код пользовательской функции и о вызове внешней функции через iCustom().
2. Аналогично. Меня-то интересует именно итоговая эффективность. В случае MQL это обычно время на разработку плюс время на испытание в тестере. Хотя лишние секунды ожидания при загрузке терминала с реальным счётом тоже могут дорогого стоить. В смысле нервов, не у всех же правильные взгляды на торговлю :)
А вот результаты работы скрипта.
Как видите, использование отдельной функции вполне оправдано - разница по времени для цикла в миллиард проходов всего одна секунда. Зато насколько проще разрабатывать код!
Вот еще на тему нахождения параметров линейной регрессии. Взято отсюда - Linear Regression Channel
А вот функция, которая реализует описанный алгоритм (может кому пригодится):
Функция вызывается примерно так:
Что то не то в Датском королевстве.
Предыдущий свой пост пришлось удалить. В алгоритме есть ошибка.
Я знаю что многие используют эту процедуру но ….не могу найти причину ошибки ПОМОГИТЕ.
Вот скрипт. Дважды вычисляться коэффициенты А и B.
Вот результат
intercept = -3.33333333 slope = 5.00000000
intercept = -1102.16914108 slope = 0.00000091
А вот тоже, но рассчитанное в MathCad. Синим - результаты совпадают, красным нет (.
В маткаде это встроенные функции, так что скорее всего ошибка в МТ4, но вот где ?
Что то не то в Датском королевстве.
Предыдущий свой пост пришлось удалить. В алгоритме есть ошибка.
Я знаю что многие используют эту процедуру но ….не могу найти причину ошибки ПОМОГИТЕ.
Вот скрипт. Дважды вычисляться коэффициенты А и B.
Вот результат
intercept = -3.33333333 slope = 5.00000000
intercept = -1102.16914108 slope = 0.00000091
А вот тоже, но рассчитанное в MathCad. Синим - результаты совпадают, красным нет (.
В маткаде это встроенные функции, так что скорее всего ошибка в МТ4, но вот где ?
А вот что выдает Excel 2007
Так что, проверять, возможно, нужно Маткад.
Одна из реализаций линейной регресии степень полинома 20, задается кол-во точек расчета и смещение начальной точки..
вывод осуществляется с использованием канала глубина задается в пунктах..при глубине 0 выводиться лишь сама кривая регресии