В строке:
if(period<=1 || rates_total-begin<period) return(0);
должно быть нестрогое равенство:
if(period<1 || rates_total-begin<period) return(0);В противном случае, если, например, скомпилировать код поставки MACD.mq5 и задать InpSignalSMA=1, то Сигнальная линия будет равная нулю, а должна быть равна линии MACD.
Зачем нужен последний параметр weightsum в
int LinearWeightedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[],int &weightsum)
притом что у остальных 3-х функций он отсутствует. Если он все таки нужен, то как его использовать при инициализации внешней переменной weightsum=0, криво работают другие функции и выдает ошибку деления на ноль.
Зачем нужен последний параметр weightsum в
int LinearWeightedMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,const int period,const double& price[],double& buffer[],int &weightsum)
притом что у остальных 3-х функций он отсутствует. Если он все таки нужен, то как его использовать при инициализации внешней переменной weightsum=0, криво работают другие функции и выдает ошибку деления на ноль.
В аналогичном индикаторе Custom Moving Average.mq5, поставляемого с терминалом, она объявлена внутри функции:
static int weightsum;
как static, т.е. не будет сбрасываться при каждом новом пересчете индикатора. В индикаторах static int weightsum - не пересекаются, т.к. это разные потоки и у них свои переменные.
Но, полагаю, что если мы будем считать 2 или боле LWMA (запуская из эксперта) с разными периодами, то weightsum должна быть у каждого своя, а не 1 для всех путем объявления static внутри функции.
Т.о. нужно для каждого LWMA, нужно иметь свою глобальную переменную, которую будем передавать в LinearWeightedMAOnBuffer(),
Например если 2 LWMA, то глобально д.б. объявлены
int weightsum1;
int weightsum2;
и затем нужно передавать их функции.
Если я неправильно понял - прошу поправить.
Т.о. нужно для каждого LWMA, нужно иметь свою глобальную переменную, которую будем передавать в LinearWeightedMAOnBuffer(),
Например если 2 LWMA, то глобально д.б. объявлены
int weightsum1;
int weightsum2;
и затем нужно передавать их функции.
В функции ExponentiaMA мне не совсем понятен смысл ввода 3-го параметра prev_value. Понятно, что в чистой формуле расчёта средней нужно значение предыдущего периода, но по-моему функция была бы понятнее обывателю если бы сама внутри себя считала это значение и в функцию надо было бы вводить только 3 данные как для SimpleMA.
Совершенно согласен! Не понятно как её использовать. В итоге выбрал ExponentialMAOnBuffer, так как так и не понял, где брать prev_value. Эти фунции нужны, чтобы не вызывать из советника внешний индикатор, считать всё внутри. Разраб предложил что?
Мне это напомнило цитату из мультика "Простоквашино" - "Что бы продать что-то не нужное, надо сначала купить что-то не нужное, а у нас денег нет."
Совершенно согласен! Не понятно как её использовать. В итоге выбрал ExponentialMAOnBuffer, так как так и не понял, где брать prev_value. Эти фунции нужны, чтобы не вызывать из советника внешний индикатор, считать всё внутри. Разраб предложил что?
Мне это напомнило цитату из мультика "Простоквашино" - "Что бы продать что-то не нужное, надо сначала купить что-то не нужное, а у нас денег нет."
Да, присоединяюсь. То же относится и к:
//+------------------------------------------------------------------+ //| Smoothed Moving Average | //+------------------------------------------------------------------+ double SmoothedMA(const int position,const int period,const double prev_value,const double &price[]) { double result=0.0; //--- check period if(period>0 && period<=(position+1)) { if(position==period-1) { for(int i=0; i<period; i++) result+=price[position-i]; result/=period; } result=(prev_value*(period-1)+price[position])/period; } return(result); }
Причём, неважно как рассчитается код, выделенный жёлтым. Всё равно результатом будет зелёная строка. И это в стандартных библиотеках MT5! М-дааа!
Доработайте функцию, а то толку от неё никакого. А в MQL5 очень требуется, когда требуется просчитать значения MA на нескольких инструментах. Причём заранее неизвестно каких. Не формировать же хендлы MA всех инструментов из обзора рынка!
Совершенно согласен! Не понятно как её использовать. В итоге выбрал ExponentialMAOnBuffer, так как так и не понял, где брать prev_value. Эти фунции нужны, чтобы не вызывать из советника внешний индикатор, считать всё внутри. Разраб предложил что?
Мне это напомнило цитату из мультика "Простоквашино" - "Что бы продать что-то не нужное, надо сначала купить что-то не нужное, а у нас денег нет."
Да, присоединяюсь. То же относится и к:
Причём, неважно как рассчитается код, выделенный жёлтым. Всё равно результатом будет зелёная строка. И это в стандартных библиотеках MT5! М-дааа!
Доработайте функцию, а то толку от неё никакого. А в MQL5 очень требуется, когда требуется просчитать значения MA на нескольких инструментах. Причём заранее неизвестно каких. Не формировать же хендлы MA всех инструментов из обзора рынка!
Ну можно было поискать в CodeBase и посмотреть там. Я не один использовал эту библиотеку…
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
MovingAverages:
Библиотека MovingAverages входит в стандартную поставку терминала MetaTrader 5.
Она содержит функции для вычисления различных скользящих средних. Всего в библиотеке 8 функций, которые можно разбить на 2 группы однотипных функций по 4 в каждой.
Первая группа - это функции, которые получают массив и просто возвращают значение скользящей на указанной позиции:
Эти функции предназначены для однократного получения значения средней на массиве и не оптимизированы под многократные вызовы. Если вы хотите использовать функцию из этой группы в цикле (для вычисления значений средней с последующей записью каждого вычисленного значения в массив), то вам необходимо самостоятельно позаботиться об организации оптимального алгоритма.
Вторая группа функций предназначена для заполнения массива-приемника значениями скользящей средней на основе массива исходных значений:
Автор: MetaQuotes Software Corp.