




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
MT4 编程初级手册编程初级手册 2 指标源码中常用符号的说明 指标源码中常用符号的说明 一 注释符 行注释 单行的注释使用 块注释 多行的注释使用 程序不执行注释 注释内容仅供阅读或保留不用的语句 编译时不进行编译 在 MQ 语言编辑器中 注释内容以灰色显示 二 分号 语句结束符 表示一个语句结束 三 逗号 分隔符 表示一个语句内部间隔 不结束语句 通常用于变量与变量之间 参数之间 四 等于号 赋值运算符 作用为把等号后面的值赋给等号前的变量中 五 加号 运算符 对于整数或小数 则表示值相加 对于字符串 则表示前后连接 六 加加 自增运算符 表示把符号前的变量值加 1 例如 i 实际上进行的运算就是 i i 1 的简写 表示把 i 的值加 1 七 加等于 表示把符号后的值加到符号前的变量中 例如 i 2 实际进行的运算就是 i i 2 的 简写 表示 i 的值加 2 八 双等号 逻辑判断符 等于号 用于逻辑判断 双等号两边值相等 则返回布尔值 真 true 双等 号两边值不相等 则返回布尔值 假 false 九 叹号等号 逻辑判断符 不等于号 用于逻辑判断 不等号两边值不相等 则返回布尔值 真 true 不等号两边值相等 则返回布尔值 假 false 十 temp 5 x 6 y return temp 一 同自定义变量一样 自定义函数在付诸使用前 也必须先声明设立 应定义其返回值 类型 名称 参数和函数体 运算处理语句 函数返回值类型 名称 参数位于的函数头部 参数间以逗号分隔 大括号中的是运算语句或者处理语句 也就是函数体部分 return 语句为函数结束语句 return 后面的括号中的值为函数返回值 即函数运算处理结 果 在上面例子中 double 为函数类型 表示该函数的返回值 运算结果 是小数 x y 为参数 由于自定义变量使用之前都必须先声明 否则函数不知道参数的类型 所以 要加上类型定义关键词 double fa 为函数名 有了函数名 我们就可以在需要使用的地方用 fa 2 1 的格式来调用此函数 函数体部分有三个语句 第一句 定义一个整形变量 temp 函数内部使用的变量 第二句 用我们设定的规则计算 temp 的值 第三句 函数结束 返回调用点 以 temp 的值作为本函数返回值 此函数也可以简写为 double fa double x double y return 5 x 6 y 二 函数的类型与类型符 函数的类型就是函数返回值 运算结果 的类型 与自定义变量类型一致 包括整型 int 双精度浮点型 double 字符串型 string 布尔型 bool 等 还有一种函数是以函数运行或进行一定的处理为目的 运行结束后不需要返回值也没有返 回值的 则函数类型可以在声明中写成 void 无值型 三 函数中如果需要定义自定义变量 那么此变量作用域仅在本函数内部 函数运行结束 时 这个自定义变量也就自动注销了 上例中 有 x y temp 三个自定义变量 在函数运行时被声明创建 在函数运行结束的 时侯自动消失 仅在函数内部有效 与函数外部无关 外部不可使用这些变量 需要注意 的是外部可以使用与内部同名的变量但不影响内部的变量 不过为了程序的清晰性 不建 议大家这么做 四 函数的调用 函数调用非常便捷 只要函数名正确 参数个数一致 类型相同就能够正确的调用 如我们前面创建了一个 fa x y 函数 在程序的别处我们可以用 ft 4 5 等样式来调用 fa x y 函数运算求值 调用时 传递参数值给 fa x y 函数 按次序把 4 传给 x 把 5 传给 y 返回结果 22 后继续 向下执行主程序 MT4 编程初级手册编程初级手册 5 自定义数组 自定义数组 一 数组是一组同类型变量的集合 可以以一个名称同时存储多个数值 由索引来调用 在实现我们 EA 的算法时是一个非常重要的工具 例 int arrai 5 5 4 3 2 1 这是一个数组名为 arrai 包含了 5 个元素的整数型数组 即数组长度 length 为 5 可以同 时存储 5 个数据 二 自定义数组也必须遵循 先声明 后使用 原则 声明 创建 时 必须设置类型与名称 声明 创建 时 数组的数据元素个数可以设定也可以不设定 数组中第一个元素的索引编号为 0 第二个为 1 以此类推 编号使用方括号跟在数组的 后面 在这上例中 arrai 0 的值为 5 aa 1 的值为 4 aa 2 的值为 3 aa 3 的值为 2 aa 4 的值为 1 声明 创建 数组的同时 可以赋初始值 也可以不赋初始值 例 int aa 创建数组 aa 不指定数据元素的个数 int bb 10 创建数组 bb 设定数据元素为 10 个 不赋给这些数据元素初始值 int cc 3 3 4 5 创建数组 cc 设定数组元素为 2 个 并赋给初始值 赋值后 cc 0 的值为 3 cc 1 的值为 4 cc 2 的值为 5 int dd 7 5 6 7 创建数组 dd 设定数组元素为 7 个 但只给前 3 个元素赋初始值 三 数组使用时的赋值 数组的赋值必须指定明确的将要赋值对象的索引 除新建数组时可以批量赋值以外 数组 元素必须一个一个地赋值 例如 cc 1 5 这个是对数组 cc 的第 2 个元素 cc 1 0 是第 1 个 1 表示第 2 个 重新赋值为 5 在这里 不需要整数型变量定义符 int 这样 数组 cc 原有三个值 3 4 5 就变为 3 5 5 四 数组的引用 数组是一系列相同类型的变量的集合 所以每次只能使用数组中的一个元素 数组的引用必须指定明确的引用对象索引值 一次只能引用一个 如果需要使用整列数组 则必须逐个使用 在程序中经常使用循环与数组相互配合来完成相应的功能 例如 数组 arrai 5 的值为 5 4 3 2 1 我们用数组名称 arrai 加索引值来引用数组 arrai 中的值 当 i 0 时 aa i 的值为 5 当 i 1 时 aa i 的值为 4 当 i 2 时 aa i 的值为 3 当 i 3 时 aa i 的值为 2 当 i 4 时 aa i 的值为 1 MT4 编程初级手册编程初级手册 6 市场数据取值 市场数据取值 一 预定义数组 MT4 已经预先定义好了的 可直接调用 开盘价 最高价 最低价 收盘价 成交量等市场历史数据 每根 K 线实体都各自有一 个 所以必须使用数组来调用 MT4 有几个预定义数组 预定义的意思就是这些数据都是 被准备好了的 EA 的开发者可以直接使用 预定义数组 开盘价 Open 最高价 High 最低价 Low 收盘价 close 成交量 Volume K 线所属时间 Time 类型为双精度浮点 double 型 即精确小数 这里有一个引用顺序或位置的问题 从右边起第一根 K 线实体 即最新的 K 线 的索引为 0 第二根 K 线索引 1 第三根 K 线索引 3 以此类推 也就是说从右向左倒着数过去 最 近的数值小 而越远的数值越大 Open 0 High 0 Low 0 Close 0 表示最新的开盘价 最高价 最低价 收盘价 Open 1 High 1 Low 1 close 1 表示第 2 根 K 线蜡烛的开盘价 最高价 最低价 收盘价 也就是昨天 Open 2 High 2 Low 2 close 2 表示第 3 根 K 线蜡烛的开盘价 最高价 最低价 收盘价 Open 3 High 3 Low 3 close 3 表示第 4 根 K 线蜡烛的开盘价 最高价 最低价 收盘价 Open High Low close 表示第 i 1 根 K 线蜡烛的开盘价 最高价 最低价 收盘价 以此类推 说明 这些是数组 用的是方括号来制定索引值 二 预定义变量 买入价 卖出价是行情数据 MT4 用预定义变量 Ask 和 Bid 表示 数值类型为 double 双 精度浮点类型 还有一些预定义变量 如 Bars 表示图表中的 K 线数 类型为 int 整数型 Digits 表示当前货币对的小数位数 类型为 int 整数型 无日元币对为 4 位 有日元币 对为 2 位 黄金石油等一般也为 2 位 Point 表示当前货币对的点值 相当于最小变动价位 类型为双精度浮点 double 型 无 日元币对为 0 0001 有日元币对为 0 01 与 Digits 正好相反 三 指标函数 1 价格 成交量 时间 它们都有三个参数 货币对名 相当于品种名 K 线时间框架 位置序号 开盘价 iOpen symbol timeframe shift 双精度浮点 double 型 收盘价 iClose symbol timeframe shift 双精度浮点 double 型 最高价 iHigh symbol timeframe shift 双精度浮点 double 型 最低价 iLow symbol timeframe shift 双精度浮点 double 型 成交量 iVolume symbol timeframe shift 双精度浮点 double 型 所属时间 iTime symbol timeframe shift 日期时间 datetime 型 K 线时间框架为 1 分钟图 PERIOD M1 5 分钟图 PERIOD M5 15 分钟图 PERIOD M15 30 分钟图 PERIOD M30 1 小时图 PERIOD H1 4 小时图 PERIOD H4 日线图 PERIOD D1 周线图 PERIOD W1 周线图 PERIOD W1 月线 图 PERIOD W1 例 iOpen EURUSD PERIOD H1 0 表示欧元兑美元 1 小时图最新 K 线实体的开盘价 iClose USDJPY PERIOD H4 2 表示美元兑日元 4 小时图第 3 根 K 线实体的收盘价 iClose GBPUSD PERIOD H1 i 表示英磅兑美元 1 小时图第 i 1 根 K 线实体的收盘价 iHigh NULL 0 0 既不指定商品 也不指定 K 线周期 用在谁就是谁 用在哪 就是哪 MT4 编程初级手册编程初级手册 7 条件判断语句 条件判断语句 一 if 判断语句 if 判断语句很常用 使用起来也比较简单 规则 如果小括号中的条件成立则执行大括号中的语句 如果不成立则跳过大括号 执行 后面的语句 例如 if condition 1 a b 1 我们在编写报警指标的时候 就经常要使用到这一语句 如果 价格向上达到指定价位 则 报警 如果 MACD 指标上穿 则 报警 如果 均线指标金叉 则 报警 等等 例 int flag 0 if Low 1 1 0000 flag 1 if High 1 1 0000 flag 2 这是一个价格上 下穿 1 0000 时进行报警的判断语句 上穿报警条件 当第二根 K 线最高价小于 1 0000 并且最新 K 线最高价大等于 1 0000 下穿报警条件 当第二根 K 线最低价大于 1 0000 并且最新 K 线最低价小等于 1 0000 这里 flag 是用作报警标记 flag 的初始值是 0 当上穿报警后 flag 的值就变为 1 当下穿报警后 flag 的值就改为 2 当 flag 0 时 说明从未报过警 上 下穿都能报警 当 flag 1 时 说明已经上穿报过警了 不能再上穿报警 但仍可下穿报警 当 flag 2 时 说明已经下穿报过警了 不能再下穿报警 但仍可上穿报警 二 if else 语句 规则 如果小括号中的条件成立则执行 if 下大括号中的第一部分语句 如果不成立则执 行 else 下大括号中的第二部分语句 if 判断条件 第一部分语句 else 第二部分语句 三 注意事项 1 只有语句后面才用到语句结束符 条件 大 小括号后面都不用语句结束符 2 语句用大括号括起来 大括号的作用为界定语句块 但如果只有一行语句 则大括号 可以省略 例如 if 条件 语句 1 MT4 编程初级手册编程初级手册 8 循环语句 循环语句 一幅 K 线图有几千上万条 K 线 Bar 根据设定的样本数 每根 K 线 Bar 又各有开收盘价 收盘价 最高低价等数值 而且还有很多移动平均线 MACD RSI 等技术指标数值 面对大量的数据 我们经常采用循环来实现数据的取值和赋值 下面我们简单来介绍一下 MT4 中主要用到的循环语句 一 while 循环 while 判断条件 语句 1 语句 2 规则 当小括号中的判断条件成立时 就执行大括号中的语句 执行完毕后再判断条件是 否成立 如果条件成立就再继续执行大括号中的语句 只要条件成立 程序就不停地执行大括号中的语句 循环体 直到小括号中的条件不再成 立时结束循环 while 循环又叫做 当循环 意思为当 XX 条件时执行循环 它与 if 语句的区别是 if 语句是当条件为真时只运行一次 而 while 语句则是只要条件为 真 循环体语句就不断地运行 直到条件为假时结束循环 所以为了避免造成死循环 循 环体内应当对判断的条件进行修改 如进行数值的累加等 例 extern int fast 12 extern int slow 26 double buffered int i 0 while i 1000 buffered iMA NULL 0 fast 0 MODE EMA PRICE CLOSE i iMA NULL 0slow 0 MODE EMA PRICE CLOSE i i 这里 循环执行条件是 i 1000 循环体中有两条语句 一句是把两条均线的差值赋给数组 buffer 另一句 i 我们知道 是自增运算符 那么每运行一次 i 的值在原有基 础上增加 1 这样 随着循环的不断地运行 i 的值逐渐增加 循环到 1000 次后 i 的值也 就从 0 变为了 1000 此时 i 1000 就不再成立 循环结束 这样 数组 buffered 中也 就存储了 1000 个值 MT4 编程初级手册编程初级手册 9 MT4 自定义指标的结构自定义指标的结构 MT4 自定义指标一般由四个部分所组成 一 文件头部 也称为预处理程序 预处理程序以 开头 行尾无语句结束符 常用的预处理程序有 1 property indicator chart window 把指标显示在主图 如 均线 SRA 等类指标用到此语句 2 property indicator separate window 把指标显示在副图 如 MACD RSI 威廉等类指标用到此语句 3 property indicator buffers 3 显示 3 根指标线 4 property indicator color1 Red 第 1 根指标线的颜色为 Red 5 property indicator width1 1 第 1 根指标线的粗细分别为 1 6 property indicator level1 0 00 在 0 00 值位置横划 1 条虚线 二 参数 变量和数组的定义 全局性的参数 变量 数组在此定义 局部变量可在 start 函数中定义 三 初始化函数 init init 在自定义指标加载时运行一次 初始化函数的功能是 设置 如果自定义指标需要划线 则必然用到此函数 四 主函数 start 当数据有变动时 start 就被触发 数据变动一次 start 就运行一次 自定义指标的编程主要依靠此函数进行 start 函数的作用主要是取值和给指标线赋值 报警也在此函数内发起 另外 还有一个反初始化函数 deinit deinit 在自定义卸载时运行一次 可用以去除指标加载时 init 所做的初始化操作 MT4 编程初级手册编程初级手册 10 一条指标线的实例 一条指标线的实例 我们现在以一个简单的实例来给大家讲述如何进行 EA 的开发 要画指标线 只要在程序 中写明以下几点就可以了 第一 定义指标线所在窗口 是主图还是副图 第二 创建数组 用以保存指标线在各个位置上的值 第三 要建立指标线与数组的对应关系 函数关系 运算关系 哪个数组中的数据对应 哪条指标线 第四 要定义指标线的线型 是曲线还是柱线或者是箭头 第五 如果指标线是箭头 还要定义是哪种类型的箭头 第六
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 彩晶石地坪施工方案范本
- 护士带教老师说课课件
- 成都电厂烟囱施工方案
- 景区岗亭选购方案范本
- 诊所项目组试题及答案
- 工程后勤保障实施试题及答案
- 服装生产心得体会试题及答案
- 园区应急辅助决策方案(3篇)
- 入围方案么好看(3篇)
- 工厂漏电应急预案方案(3篇)
- GB/T 3836.1-2021爆炸性环境第1部分:设备通用要求
- GB/T 25216-2010煤与瓦斯突出危险性区域预测方法
- 变压器运行维护手册
- GA/T 1161-2014法庭科学DNA检验鉴定文书内容及格式
- 英语剧本 小王子
- 云南专升本会计试题
- 民间信仰活动场所信息采集表
- 2023年版义务教育音乐课程标准(标准版)
- 神华包头煤化工分公司2013年夏季水平衡测试报告
- 有效咳嗽技术操作评分标准
- GB∕T 36935-2018 鞋类 鞋号对照表
评论
0/150
提交评论