(第二单元)第2小节:数据结构- 枚举应用实例
当涉及到编程和数据处理时,了解和理解数据结构是非常重要的。数据结构是组织和存储数据的方式,它决定了数据的访问、操作和管理方式。
在MQL4编程中,数据结构可以帮助我们以有序、高效和灵活的方式处理各种交易中的数据。常用的几种数据结构包括:数组、结构体、枚举。每种数据结构都有其特定的特点和用途。例如,数组适用于存储和访问有序的元素集合。
了解和理解数据结构的好处包括:
- 效率:选择合适的数据结构可以提高程序的效率和性能。不同的数据结构在不同的操作上具有不同的时间和空间复杂度。
- 组织和管理:数据结构可以帮助我们组织和管理数据,使得数据的存储、访问和操作更加方便和直观。
- 算法设计:数据结构与算法密切相关。了解不同的数据结构可以帮助我们设计和选择合适的算法来解决特定的问题。
在MQL4编程中,掌握数组、结构体和枚举等基本数据结构是至关重要的。在数据组织和管理、轻松地访问和操作数据、实现复杂的EA或者指标、应对不同的交易策略等场景中非常有效。
枚举(Enum)
上期知识回顾:
enum类型通常用于自定义某个属性相同的数据集,相对于bool型的使用方式,enum具有更高的灵活性,简单理解就是可以自定义多种情况出现,从外部参数中理解就是一个多选选的下拉列表,在列表成员中以小写逗号分割列表成员。
需要注意的是,在枚举成员中未分配数值的情况下,从首位以0开始依序递增自动形成(在前一位成员的基础上增加1个单位);而对于已分配数值的情况下,则会以预分配的值为准,而后续的成员也会在此基础上自动增加1个单位
案例解析
定义枚举结构:
首先我们定义一段枚举类型的数据结构,
1、以SelectWeek命名一个枚举结构(不带配值),该结构由7个不带配值的成员组成,我暂且用来表示一周中的每一天。枚举成员不带配值命名,因此默认情况下,每个枚举常量的值将会从0开始自动递增。0代表了周日以此类推。
然后我们使用了该枚举结构来关联并声明了一个名为useSelectWeek的变量,并将其初始化为SelectWeek枚举结构中的Monday,表示选择星期的初始值为周一(实际值为1,因为排在了第二个)。
2、再以SelectRisk命名一个枚举结构(带配值),该结构在枚举成员中我们用三个枚举成员表示不同风险级别。注意:与不带配值的枚举不同,带配值的枚举可以通过手动指定常量的值来定义枚举成员;
通过为枚举成员指定配值,我们可以将特定的数值与枚举成员关联起来,从而在代码中使用这些枚举成员时,可以直接引用它们的配值。
使用枚举结构参与逻辑编写:
这里我们再回顾一下OnTimer()函数,OnTimer()为定时器事件函数,当定时器触发时被调用。
1、我提前在初始化函数中,设置了毫秒级计时器为500毫秒(0.5秒),这意味着接下来这段代码会以0.5秒的时间间隔不断执行。代码中我们首先定义一个字符串变量用于存放订单注释,一个整型变量用于存放手数值,并将其初始化。
2、使用switch语句进行多分支条件运算判断,据外部选择的日期类型,定义Cmt变量的实际值。
3、然后再使用布尔运算(条件运算)的方式来根据useSelectRisk的值定义lot的值。
4、这里我们使用了Comment()函数来把一些关键信息显示到图表上,关于这个函数,我会在之后的章节(终端信息输出)中详细解读,以下是显示结果。
5、经过一番判断,此时我们得到了注释和手数的值,在这一段语句中,我先手判断了手数值是否不等于0(等于或者小于,圈定的作用域中的代码都不会被执行),然后再使用OrdersTotal()函数判断持仓单是否小于5。在这两个条件中我使用到了“和”运算符&&,说明必须两个条件同时成立,才会继续执行内部代码块。
if(lot!=0 && OrdersTotal()<5)
6、使用订单发送函数根据刚刚的手数和订单注释下达订单。
本节实践指南
- 尝试在不同场景中使用不同的枚举结构实现逻辑创造
*本期使用到的源码片段可私信客服获取。