double SimpleMA(const int position,const int period,const double &price[])
Вычисляет простую скользящую среднюю на основе массива цен и заданного периода.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «movingaverages.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Данный исходный код представляет собой библиотеку на языке MQL, содержащую функции для расчёта различных типов скользящих средних. Библиотека включает четыре основных варианта: простую, экспоненциальную, сглаженную и линейно-взвешенную скользящую среднюю.
Каждая функция принимает массив цен и период, возвращая вычисленное значение скользящей средней на указанной позиции. Дополнительные варианты с суффиксом «OnBuffer» предназначены для расчёта непосредственно в буферных массивах пользовательских индикаторов, включая корректную обработку направления массивов.
Код распространяется под авторским правом MetaQuotes Software Corp. (2009–2013) и предназначен для использования в торговых платформах, работающих с языком MQL.
Классов: 0 · методов: 0 · конструкторов: 0 · деструкторов: 0 · отдельных функций: 4
double SimpleMA(const int position,const int period,const double &price[])
Вычисляет простую скользящую среднюю на основе массива цен и заданного периода.
double ExponentialMA(const int position,const int period,const double prev_value,const double &price[])
Вычисляет экспоненциальную скользящую среднюю с учётом предыдущего значения и заданного периода.
double SmoothedMA(const int position,const int period,const double prev_value,const double &price[])
Вычисляет сглаженную скользящую среднюю с учётом предыдущего значения и заданного периода.
double LinearWeightedMA(const int position,const int period,const double &price[])
Вычисляет линейно-взвешенную скользящую среднюю на основе массива цен и заданного периода.
double SimpleMA(const int position,const int period,const double &price[])
{
double result=0.0;
if(position>=period-1 && period>0)
{
for(int i=0;i<period;i++) result+=price[position-i];
result/=period;
}
return(result);
}
double ExponentialMA(const int position,const int period,const double prev_value,const double &price[])
{
double result=0.0;
if(period>0)
{
double pr=2.0/(period+1.0);
result=price[position]*pr+prev_value*(1-pr);
}
return(result);
}
double SmoothedMA(const int position,const int period,const double prev_value,const double &price[])
{
double result=0.0;
if(period>0)
{
if(position==period-1)
{
for(int i=0;i<period;i++) result+=price[position-i];
result/=period;
}
if(position>=period)
result=(prev_value*(period-1)+price[position])/period;
}
return(result);
}
double LinearWeightedMA(const int position,const int period,const double &price[])
{
double result=0.0,sum=0.0;
int i,wsum=0;
if(position>=period-1 && period>0)
{
for(i=period;i>0;i--)
{
wsum+=i;
sum+=price[position-i+1]*(period-i+1);
}
result=sum/wsum;
}
return(result);
}
int SimpleMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,
const int period,const double& price[],double& buffer[])
{
int i,limit;
if(period<=1 || rates_total-begin<period) return(0);
bool as_series_price=ArrayGetAsSeries(price);
bool as_series_buffer=ArrayGetAsSeries(buffer);
if(as_series_price) ArraySetAsSeries(price,false);
if(as_series_buffer) ArraySetAsSeries(buffer,false);
if(prev_calculated==0) // first calculation
{
limit=period+begin;
for(i=0;i<limit-1;i++) buffer[i]=0.0;
double firstValue=0;
for(i=begin;i<limit;i++)
firstValue+=price[i];
firstValue/=period;
buffer[limit-1]=firstValue;
}
else limit=prev_calculated-1;
for(i=limit;i<rates_total;i++)
buffer[i]=buffer[i-1]+(price[i]-price[i-period])/period;
if(as_series_price) ArraySetAsSeries(price,true);
if(as_series_buffer) ArraySetAsSeries(buffer,true);
return(rates_total);
}
int ExponentialMAOnBuffer(const int rates_total,const int prev_calculated,const int begin,
const int period,const double& price[],double& buffer[])
{
int i,limit;
if(period<=1 || rates_total-begin<period) return(0);
double dSmoothFactor=2.0/(1.0+period);
bool as_series_price=ArrayGetAsSeries(price);
bool as_series_buffer=ArrayGetAsSeries(buffer);
if(as_series_price) ArraySetAsSeries(price,false);
if(aПоказано первые 50% кода (символов: 4354)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.