文章 "针对初学者的 MQL 5 中的自定义指标"

 

新文章 针对初学者的 MQL 5 中的自定义指标已发布:

对于初学者而言,任何新鲜事物似乎都是复杂难懂的。我们熟知的事物对我们而言则极为简单明了。但我们不要忘记,任何事物,包括我们的母语,我们都是从头学起的。MQL5编程语言也是如此,它为开发人员开发自己的交易策略提供了广泛的可能性 - 您可以从基本概念和最简单的例子入手开始您的学习。本文将探讨技术指标与 MetaTrader 5 客户端的交互,并以简单自定义指标 SMA 作为示例。

深刻理解任何知识学科(无论是数学、音乐还是编程等)的基础是对其基础的学习。如果从很小的时候起就开始相似的学习则再好不过,这样对于基础的理解要容易得多,并且理解具体而全面。

遗憾的是,大部分人是人到中年才开始接触金融和股票市场,所以学习起来并不容易。在本文中,我将帮助大家克服这一理解 MQL5 和为 MetaTrader 5 客户端编写自定义指标的最初障碍。

作者:Nikolay Kositsin

 
对于那些开始.....,非常有趣的文章我希望其他人也能这样....,谢谢
 
作者和叙述都是 A 级。读完之后,您会想创建一些自己的东西。每次都重写代码并不有趣,MQL5 的作者意识到了这一点,因此创建了一个庞大的内置函数库。下面就是其中之一:

int iMA(
string symbol, //symbol name
ENUM_TIMEFRAMES period, // period
int ma_period, // averaging period
int ma_shift // 指标水平移动
ENUM_MA_METHOD ma_method, // 平滑类型
ENUM_APPLIED_PRICE applied_price // 价格类型或句柄
);
可以得到相同的结果。但是在使用简式 int OnCalculate() 时,如何获取 applied_price。换句话说,在初始化指标时,如何获取 "参数 "选项卡中的数值?

谢谢。

 
谢谢。对我这样的新手来说,解释得非常清楚。
 

谢谢。它非常清晰,对初学者非常有用。

 

if(prev_calculated==0)//检查 指标的第一个起始点
first=MAPeriod-1+begin;// 所有条形图的起始索引
else first=prev_calculated-1;// 新条形图的起始索引

whenfirst=MAPeriod-1+begin; 当前条形图是 [0] 还是 [rates_total] ?

whenfirst=prev_calculated-1; 这是一个很大的数字,需要重复计算吗?

 
在文章 "新手的 MQL5 自定义指标"中提到:"在指标中最好使用递增顺序[而不是 "倒序"]"。但是,如果程序不断运行,最终会趋向于无穷大,也就是说,指标数字的(整数)缓冲区很快就会用完,不是吗?如何处理这个问题?
Custom Indicators in MQL5 for Newbies
  • 2010.03.03
  • Nikolay Kositsin
  • www.mql5.com
Any new subject seems complicated and hard-to-learn for a newbie. Subjects that we know seem very simple and clear to us. But we simply do not remember, that everyone has to study something from scratch, and even our native language. The same is with the MQL5 programming language that offers wide possibilities of developing one's own trading strategies - you can start learning it from basic notions and simplest examples. Interaction of a technical indicator with the MetaTrader 5 client terminal is consider in this article on the example of the simple custom indicator SMA.
 

感谢您的文章!对于初学者来说,这是非常有用的材料,对于从另一种语言过渡到其他语言的人来说,

 

计算机翻译的?凑合吧。

和MQL4相比,指标数组下标从过去计算,是固定的,不是动态的.  不知道连续运行一周、一月时会怎么样?数据都在内存?? 若都在内存,岂不是会越运行越慢? 

 

但是,在  https://www.mql5.com/zh/articles/31中又说:

  1. “将元素的索引设置为序列,这和 MQL4 中是一样的”- 这意味着什么?在我们的示例中,我们使用元素索引作为时间序列。换言之,当前柱(尚未形成)始终具有索引 [0],上一个(已经形成)具有索引 [1],等等。

 所以要小心,到底用的是哪种情况。MQL4的例子大多使用的指标数组以当前为0, MQL5的例子大多使用的指标数组下标以过去为0。

MQL5 初学者:EA 交易技术指标使用指南
MQL5 初学者:EA 交易技术指标使用指南
  • 2013.09.04
  • Sergey Pavlov
  • www.mql5.com
为在EA 交易中获得内置或自定义指标的值,首先应使用相应函数创建指标的处理函数。本文中的示例说明了在创建自己的程序时如何使用技术指标。在本文中说明的指标使用 MQL5 语言构建。本文的目标受众是那些在交易策略开发上不具备太多经验的读者,并旨在通过使用提供的函数库提供简单明了的指标使用方式。
 
DxdCn:

计算机翻译的?凑合吧。

和MQL4相比,指标数组下标从过去计算,是固定的,不是动态的.  不知道连续运行一周、一月时会怎么样?数据都在内存?? 若都在内存,岂不是会越运行越慢? 

 

但是,在  https://www.mql5.com/zh/articles/31中又说:

  1. “将元素的索引设置为序列,这和 MQL4 中是一样的”- 这意味着什么?在我们的示例中,我们使用元素索引作为时间序列。换言之,当前柱(尚未形成)始终具有索引 [0],上一个(已经形成)具有索引 [1],等等。

 所以要小心,到底用的是哪种情况。MQL4的例子大多使用的指标数组以当前为0, MQL5的例子大多使用的指标数组下标以过去为0。

MQL5中要使用ArraySetAsSeries()函数,将动态数组(向索引大的方向分配内存存储最新值)转换成时间序列形式,即,最新的数据存储在索引0的位置,次新的数据存储在索引为1的位置,以此类推,最新的数据永远存储在索引0位置。

用copybuffer()函数读取,从索引为0的位置开始向后读取数组中的元素,读取多少个自己定义就行。

 

 

尼古拉斯

您能告诉我,为什么当我尝试在一个循环中使用 Mass[ i ]= Mass[ i+1]+A; (其中 A 是一个变量)公式填充一个指标数组时,编译没有出错,但当连接到窗口时,会出现数组超出范围(超出数组大小)的信息?