图书馆: MovingAverages

 

MovingAverages:

MovingAverages库包含计算不同类型的移动平均线的函数。

作者: MetaQuotes Software Corp.

 

行:

   if(period<=1 || rates_total-begin<period) return(0);

必须是非严格等式:

   if(period<1 || rates_total-begin<period) return(0);
否则,例如,如果编译 MACD.mq5 交付代码并设置 InpSignalSMA=1,Signal 线将等于零,而它应该等于 MACD 线。
 
在 ExponentiaMA 函数中,我不太理解输入第 3 个参数 prev_value 的含义。很明显,在计算平均值的纯公式 中需要前一期的值,但我认为,如果函数在内部计算这个值,并且像 SimpleMA 一样只需在函数中输入 3 个数据,对普通人来说会更清楚。
 

为什么需要最后一个参数 weightsum?

int LinearWeightedMAOnBuffer(常量 int rates_total,常量 int prev_calculated,常量 int begin,常量 int period,常量 double& price[],double& buffer[],int &weightsum)

而其他 3 个函数则没有。如果仍然需要,如何在初始化外部变量 weightsum=0 时使用它?

 
Roman Sukhorukov:

为什么需要最后一个参数 weightsum?

int LinearWeightedMAOnBuffer(常量 int rates_total,常量 int prev_calculated,常量 int begin,常量 int period,常量 double& price[],double& buffer[],int &weightsum)

而其他 3 个函数则没有。如果仍然需要,如何在初始化外部变量 weightsum=0 时使用它?

在终端提供的类似指标 Custom Moving Average.mq5 中,函数内部将其声明为静态:

   static int weightsum;

为静态,即每次重新计算指标时都不会重置。在指标中,静态 int weightsum - 不会交叉,因为它们是不同的线程,有自己的变量。

但我认为,如果我们计算 2 个或更多不同周期的 LWMA(从 Expert Advisor 运行),那么每个 LWMA 的 weightsum 都应该是不同的,而不是通过在函数内部声明 static 而使所有 LWMA 的 weightsum 都是 1。

因此,我们需要为每个 LWMA 设置自己的全局变量,并将其传递给 LinearWeightedMAOnBuffer()、

例如,如果有 2 个 LWMA,则应全局声明以下变量

int weightsum1;
int weightsum2;

然后将它们传递给函数。

如果我理解有误,请指正。

 
elibrarius:

因此,我们需要为每个 LWMA 设置一个全局变量,并将其传递给 LinearWeightedMAOnBuffer()、

例如,如果有 2 个 LWMA,那么全局变量声明为

int weightsum1;
int weightsum2;

然后将它们传递给函数。

通过在全局级别声明 int weightsum1; int weightsum2; ... 来检查。进行检查。计算正确无误。
 
Maxim Khrolenko #:
在 ExponentiaMA 函数中,我不太理解输入第 3 个参数 prev_value 的含义。很明显,在计算平均值的纯公式 中,您需要前一期的值,但我认为,如果函数在内部计算这个值,并且像 SimpleMA 一样只输入 3 个数据,对普通人来说会更清楚。

完全同意!如何使用它并不清楚。最后我选择了 ExponentialMAOnBuffer,因为我不知道从哪里获取prev_value这些函数不是从 Expert Advisor 调用外部指标所必需的,而是读取内部所有内容所必需的。开发人员提出了什么建议?

这让我想起漫画 "Prostokvashino "中的一句话--"要想卖掉你不需要的东西,你必须先买你不需要的东西,而我们没有钱"。

 
Konstantin Efremov #:

我完全同意!不清楚如何使用它。最后,我选择了 ExponentialMAOnBuffer,因为我不知道从哪里获取prev_value这些函数不是从 Expert Advisor 调用外部指标所必需的,而是读取内部所有内容所必需的。开发人员提出了什么建议?

这让我想起漫画 "Prostokvashino "中的一句话--"要想卖掉你不需要的东西,你必须先买你不需要的东西,而我们没有钱"。

是的,我同意。同样的道理也适用于:

//+------------------------------------------------------------------+
//| 平滑移动平均线|
//+------------------------------------------------------------------+
double SmoothedMA(const int position,const int period,const double prev_value,const double &price[])
  {
   double result=0.0;
//--- 检查时间
   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 手柄!

 
Konstantin Efremov #:

我完全同意!不清楚如何使用它。最后,我选择了 ExponentialMAOnBuffer,因为我不知道从哪里获取prev_value这些函数不是从 Expert Advisor 调用外部指标所必需的,而是读取内部所有内容所必需的。开发人员提出了什么建议?

这让我想起漫画 "Prostokvashino "中的一句话--"要想卖掉你不需要的东西,你必须先买你不需要的东西,而我们没有钱"。

安德烈-考诺夫#:

是的,我同意您的观点。同样适用于

如何计算黄色 高亮显示的代码并不重要。结果仍然是绿色 字符串。而这是在MT5 标准库中! 没错!

改进该函数,否则它将毫无用处。在 MQL5 中,当您需要计算多个工具的 MA 值时,该功能非常有用。但事先并不知道是哪些。您无法从市场概览中形成所有工具 的 MA 手柄!

您可以在 CodeBase 中搜索并查看。不止我一个人使用过这个库...

MA on ATR
MA on ATR
  • www.mql5.com
Индикатор Moving Average по значениям индикатора Average True Range
 
Automated-Trading:

移动平均线

作者:MetaQuotes Software Corp:MetaQuotes Software Corp.

请问,变量 "位置 "是什么?

double SimpleMA(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 (period> 0 && period<=(position+ 1 ))
     {
       for ( int i= 0 ; i<period; i++)
         result+=price[position-i];

      result/=period;
     }

   return (result);
  }

早安

这样更清楚吗?