文章 "MQL5 编程基础:数组" - 页 3 123 新评论 Ernie Gunning 2020.12.20 15:28 #21 Ernie Gunning:好吧,让我们试试英语版的 MQL。感谢您发布的代码。它节省了我的时间。我试过使用 MQL 数组,但它们让人困惑。但后来我发现了你的代码,它节省了我研究数组以及如何使数组动态增长/增加的时间。非常感谢。我希望我能回报你!下面的代码适用于所有数据类型。它也适用于对象,但 Contains(搜索)方法可能不起作用。我只在 double、int 和 bool 类型上进行了测试。字符串可能也会有问题,代码可能需要扩展。那么你可以像这样为你需要的所有类型声明它:希望对大家有所帮助 请不要理会我在上面提出的将动态数组用于任何数据类型的建议。已经声明了一个通用的 CArrayList,请使用它。我在使用对象时遇到了一个问题,该问题已在此主题中得到解决:https://www.mql5.com/en/forum/358432 Using CArrayList gives error 2020.12.20www.mql5.com Hi Guys, Thanks for your time. I'm struggling to use the CArrayList in the generics folder. Are these interfaces and classes complete... Tobias Johannes Zimmer 2021.04.16 16:51 #22 我已经读过你写的一些好文章。这篇也不例外。 zumaya01 2024.04.21 00:39 #23 函数 arrayResize() 中似乎有一个错误,在示例中,数组的内容在正常索引中是 1、1、3,而不是 1、2、3。请参见此示例://+------------------------------------------------------------------+ //|false.mq5 //|版权所有 2024 年,MetaQuotes 有限公司。| //|https://www.mql5.com || //+------------------------------------------------------------------+ #property copyright "Copyright 2024, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property indicator_chart_window //+------------------------------------------------------------------+ //| 自定义指示器初始化函数 //+------------------------------------------------------------------+ int OnInit() { //--- 指示器缓冲区映射 //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 自定义指标迭代函数| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- double ar[]; // 数组 ArrayResize(ar,2); // 准备数组 ar[0]=1; // 设置数值 ar[1]=2; ArraySetAsSeries(ar,true); // 更改索引顺序 ArrayResize(ar,3); // 增加数组大小 ar[0]=3; // 设置新数组元素的值 Alert(ar[0]," ",ar[1]," ",ar[2]); // 打印数组值 ArraySetAsSeries(ar,false); Alert("Normal indexing: ", ar[0]," ",ar[1]," ",ar[2]); // 打印数组值 //--- 为下一次调用返回 prev_calculated 的值 return(rates_total); } //+------------------------------------------------------------------+ 在添加的arraySetAsSeries()函数中,似乎受到了arrayresieze函数的影响,请看这个例子: //+------------------------------------------------------------------+ //|errorindex.mq5 //|版权所有 2024 年,MetaQuotes 有限公司。| //|https://www.mql5.com || //+------------------------------------------------------------------+ #property copyright "Copyright 2024, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property indicator_chart_window //+------------------------------------------------------------------+ //| 自定义指示器初始化函数 //+------------------------------------------------------------------+ int OnInit() { //--- 指示器缓冲区映射 //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 自定义指标迭代函数| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- double ar[]; // 数组 ArrayResize(ar,2); // 准备数组 ar[0]=9; // 设置数值 ar[1]=8; ArrayResize(ar,6); // 增加数组大小 Alert("Normal resize: ", ar[0]," ",ar[1]," ",ar[2]," ", ar[3], " ", ar[4], " ", ar[5]); ArraySetAsSeries(ar,true); // 更改索引顺序 ArrayResize(ar,4); // 增加数组大小 ArraySetAsSeries(ar, false); Alert("See the random element added: ", ar[0]," ",ar[1]," ",ar[2]," ", ar[3]); ArraySetAsSeries(ar,true); // 更改索引顺序 0 ar[0]=8; // 设置新数组元素的值 Alert("Modify the first as serlies: ", ar[0]," ",ar[1]," ",ar[2]," ", ar[3]); // 打印数组值 //--- 为下一次调用返回 prev_calculated 的值 return(rates_total); } //+------------------------------------------------------------------+ 步骤 1. ar = {} 2. ar = {9, 8}3. AR = {9, 8, 0, 8, 0, 0}4.设置为系列 true:ar = {0, 0, 8, 0, 8, 9}5.调整为 4ar = {0, 0, 8, 0}6.设置为系列 false:ar = {0, 8, 0, 0}7.设为数列为 true:ar = {0, 0, 8, 0}8.修改第一个元素 a[0]ar = {8, 0, 8, 0}我不知道调整数组大小(3-5)会获取数值并复制到新的位置,我想前向的 6 会获取随机数值。我更喜欢先 resize(),然后像这样 setasseries()://+------------------------------------------------------------------+ //|indexingarraytest.mq5 //|版权所有 2024 年,MetaQuotes 有限公司。| //|https://www.mql5.com || //+------------------------------------------------------------------+ #property copyright "Copyright 2024, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" #property indicator_chart_window //+------------------------------------------------------------------+ //| 自定义指示器初始化函数 //+------------------------------------------------------------------+ int OnInit() { //--- 指示器缓冲区映射 //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 自定义指标迭代函数| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- double ar[]; // 数组 ArrayResize(ar,2); // 准备数组 ar[0]=1; // 设置数值 ar[1]=2; ArrayResize(ar,3); // 增加数组大小 Alert("Redimension to 3 normal: ", ar[0], " ", ar[1], " ", ar[2]); ArraySetAsSeries(ar,true); // 更改索引顺序 Alert("Redimension to 3 series: ", ar[0], " ", ar[1], " ", ar[2]); ar[0]=8; // 设置新数组元素的值 Alert("Change the first element: ", ar[0]," ",ar[1]," ",ar[2]); // 打印数组值 ArraySetAsSeries(ar, false); Alert("Normal renew: ", ar[0]," ",ar[1]," ",ar[2]); // 打印数组值 //--- 为下一次调用返回 prev_calculated 的值 return(rates_total); } //+------------------------------------------------------------------+ 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
好吧,让我们试试英语版的 MQL。
感谢您发布的代码。它节省了我的时间。我试过使用 MQL 数组,但它们让人困惑。但后来我发现了你的代码,它节省了我研究数组以及如何使数组动态增长/增加的时间。非常感谢。
我希望我能回报你!下面的代码适用于所有数据类型。它也适用于对象,但 Contains(搜索)方法可能不起作用。我只在 double、int 和 bool 类型上进行了测试。字符串可能也会有问题,代码可能需要扩展。
那么你可以像这样为你需要的所有类型声明它:
希望对大家有所帮助
请不要理会我在上面提出的将动态数组用于任何数据类型的建议。已经声明了一个通用的 CArrayList,请使用它。我在使用对象时遇到了一个问题,该问题已在此主题中得到解决:https://www.mql5.com/en/forum/358432
函数 arrayResize() 中似乎有一个错误,在示例中,数组的内容在正常索引中是 1、1、3,而不是 1、2、3。请参见此示例:
在添加的arraySetAsSeries()函数中,似乎受到了arrayresieze函数的影响,请看这个例子:步骤
1. ar = {}
2. ar = {9, 8}
3. AR = {9, 8, 0, 8, 0, 0}
4.设置为系列 true:
ar = {0, 0, 8, 0, 8, 9}
5.调整为 4
ar = {0, 0, 8, 0}
6.设置为系列 false:
ar = {0, 8, 0, 0}
7.设为数列为 true:
ar = {0, 0, 8, 0}
8.修改第一个元素 a[0]
ar = {8, 0, 8, 0}
我不知道调整数组大小(3-5)会获取数值并复制到新的位置,我想前向的 6 会获取随机数值。我更喜欢先 resize(),然后像这样 setasseries():