文章 "从零开始在MQL5中实现移动平均线:简单明了"

 

新文章 从零开始在MQL5中实现移动平均线:简单明了已发布:

我们将通过简单的示例,探究移动平均线的计算原理,同时了解优化指标计算(包括移动平均线计算)的方法。

我们已经回顾了客户端标准移动平均线指标设置中主流移动平均类型的计算原理。文中展示的算法既可用于带计算优化的指标开发(相关优化方法亦在文中详述),也可作为独立模块嵌入其他程序,实现序列数据集的平均值计算。

上图展示了相同计算周期(10)下不同类型移动平均线的对比

红色- SMA, 绿色- EMA, 金色- SMMA, 蓝色- LWMA.

由此可见,平滑移动平均线(SMMA)受短期价格波动影响最小,能更清晰地呈现整体趋势方向。
而指数与线性加权移动平均线因对最新数据赋予更高权重,对市场波动反应更为灵敏。

作者:Artyom Trishkin

 

谢谢你的好文章。但我还是忍不住要批评它。我今天的心情就是这样。

这篇文章特别关注的不是编码,而是公式和计算的优化。但我认为,它对程序员新手 和最近才开始关注使用不同循环运算符的程序员 更有用。我希望接下来的文章能反映出这一点。毕竟,MQL5 中至少有 3 个循环操作符。它们中的任何一个都可以用来构建一个指标。

 

有用的信息、

最后是 i++ 循环

 

这篇文章很适合初学者,它展示了标准 4 MQ 平均值背后的代码。

您还应讨论简单优化的重要性及其影响,因为 99% 的刻度都发生在柱形图变化之间。 尽量减少每次柱形图变化之间的计算,将以少量复杂性为代价,大大提高效率。 因此,在柱形图变化时计算一次基准值并保存这些值,将大大减少计算时间:

考虑

double sm=0;

for(int bar=0;bar<N;bar++) sum+=Close[CurrentBar-bar];

SMA=sum/N;


静态 double partialsum;

double sum=0;


在条形图变化时{

partialsum=0;

for(int bar=0;bar<N-1;bar++) partialsum+=Close[CurrentBar-bar];

partialsum/=(N-1);

}

SMA =partialsum +Close[CurrentBar]/N;

如果一个条形图周期内有 1000 个刻度点,N=10,那么此优化将为每个条形图节省约 90,000 次 sum+=Close[EndingBar-bar] 计算。 如果您的图表包含 1,000 个条形图,那么将节省超过9,000 万次不必要的计算。 对于现代 CPU 而言,此示例产生的节省是微不足道的,可能并不明显,但随着您的智能交易系统程序越来越复杂,这些节省最终会增加。

手动优化的重要性在于,您可以开发出更好的编程技术,这些技术在未来的项目 中将成为您的第二天性。

 

感谢你的文章,但不清楚为何,使用 OnCalculate() 函数后,我无法再使用 OrderSend() 交易函数,不知作者如何解决这个问题,我没办法只能使用标准程序库中的指标,方法如下:

#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

#include <Indicators\Trend.mqh>
CiMA ma;

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
int OnInit(){ 
    ma.DeleteFromChart(ChartID(), 0);
    ma.Create(_Symbol, PERIOD_CURRENT, 14, 0, MODE_SMA, PRICE_CLOSE);
    ma.AddToChart(PERIOD_CURRENT, 0);
    
    return INIT_SUCCEEDED; 
}

void OnTick(){ 
    ma.Refresh();
    double curMA = ma.Main(0);
    
    //Print("当前MA值:", maValue);
}