




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、MT 4编程初级手册(2):指标源码中常用符号的说明一、注释符:行注释:单行的注释使用“ ”;块注释:多行的注释使用“/*/ ” 程序不执行注释,注释内容仅供阅读或保留不用的语句,编译时不进行编译。在MC语言编辑器中,注释内容以灰色显示。二、分号“;” 语句结束符,表示一个语句结束。三、逗号“,” 分隔符,表示一个语句内部间隔,不结束语句,通常用于变量与变量之间,参数之 间。四、等于号“二” 赋值运算符,作用为把等号后面的值赋给等号前的变量中。五、加号“ +”运算符。对于整数或小数,则表示值相加;对于字符串,则表示前后连接。六、加加“ +”自增运算符,表示把符号前的变量值加 1,例如:“ i+
2、; ”实际上进行的运算就是:“i二i+1; ”的简写,表示把i的值加1。七、加等于“ +二”表示把符号后的值加到符号前的变量中。例如“i+=2; ”,实际进行的运算就是“i=i+2; ”的简写,表示i的值加2。八、双等号“=” 逻辑判断符,等于号。用于逻辑判断,双等号两边值相等,则返回布尔值“真-true ” 双等号两边值不相等,则返回布尔值“假-false ”。九、叹号等号“ != ” 逻辑判断符,不等于号。用于逻辑判断,不等号两边值不相等,则返回布尔值“真-true ”;不等号两边值相等,则返回布尔值“假 -false ”。十、“ &&”逻辑判断符与”,“并且”。、“ |逻
3、辑判断符或者”。十二、大括号“ ” 用以表示函数体,在其中写函数的语句。 内部为函数体语句。MT4编程初级手册:自定义变量、自定义变量在使用前,必须先声明 ( 定义) ,向系统声明变量的类型和名称。创建时可同时进行赋值(赋默认值),也可以不赋值。MQ 吾法中自定义变量的名称可以使用中文字符。例子:intflag ;创建一个整型变量,变量名为“ flag ”。bool 是否报警 =flase ;创建一个布尔型变量,变量名为“是否报警”,同时,赋初 值“ flase ” 二、变量类型和类型定义关键词 自定义变量的基本类型有:1、整形 (int) :就是整数,包括负整数;2、双精度浮点数 (doub
4、le) :可以简单地理解为带小数位的数;3、字符串型 (string)4、布尔型 (bool) :其值分别为“ true 、 false ”,即“真、假”,也可以写成“ 1 、0”(1 真, 0假)。类型定义词仅在创建和声明变量时时候使用,后面使用再变量时,如进行运算时, 就不能再加这些类型定义词了。三、附加变量(参数) 附加变量就是在程序完善后投入使用时,变量值允许用户自由更改的变量,一般用 作程序参数。般指标,例如MACD(12,26,9)参数输入就是通过附加变量实现的,(12,26,9)分别 为三个附加变量值。定义附加变量只需在变量定义语句前加“ extern ” 例:externint
5、 时间框架 =9;创建一个整型附加变量,变量名为“时间框架”,默认值为 9,允许用户在程序外部修改参数值,或进行参数优化。MT4编程初级手册(4):自定义函数大家可以将自定义函数与数学函数在本质上看作是是一致的,在程序中需要用到的 地方直接以函数名来调用。例如:数学函数 fuc(x,y)=5x+6y(x,y 为正整数 ) 写成程序语句就是:doublefuc(doublex,doubley) doubletemp;temp=5*x+6*y;return(temp);、同自定义变量一样,自定义函数在付诸使用前,也必须先声明设立,应定义其 返回值类型、名称、参数和函数体(运算处理语句)。函数返回值
6、类型、名称、参数位于的函数头部 ( 参数间以逗号分隔 ),大括号中的是运算语句或者处理语句,也就是函数体部分。return 语句为函数结束语句, return 后面的括号中的值为函数返回值,即函数运算 处理结果。在上面例子中, double 为函数类型,表示该函数的返回值 (运算结果 )是小数; x,y 为参数,由于自定义变量使用之前都必须先声明,否则函数不知道参数的类型, 所以要加上类型定义关键词 double ;fa 为函数名,有了函数名,我们就可以在需要使用的地方用 fa(2,1) 的格式来调用 此函数; 函数体部分有三个语句: 第一句,定义一个整形变量temp (函数内部使用的变量);
7、 第二句,用我们设定的规则计算temp的值;第三句,函数结束,返回调用点,以temp的值作为本函数返回值。此函数也可以简写为: doublefa(doublex,doubley)return(5*x+6*y);二、函数的类型与类型符 函数的类型就是函数返回值 (运算结果 )的类型,与自定义变量类型一致。包括整型 (int) 、双精度浮点型 (double) 、字符串型 (string) 、布尔型 (bool) 等, 还有一种函数是以函数运行或进行一定的处理为目的,运行结束后不需要返回值也 没有返回值的,则函数类型可以在声明中写成 void( 无值型) 三、函数中如果需要定义自定义变量,那么此变
8、量作用域仅在本函数内部,函数运 行结束时,这个自定义变量也就自动注销了。上例中,有x、y、temp三个自定义变量,在函数运行时被声明创建,在函数运行结 束的时侯自动消失,仅在函数内部有效,与函数外部无关,外部不可使用这些变量, 需要注意的是外部可以使用与内部同名的变量但不影响内部的变量,不过为了程序 的清晰性,不建议大家这么做。四、函数的调用 函数调用非常便捷,只要函数名正确,参数个数一致,类型相同就能够正确的调用。如我们前面创建了一个 fa(x,y) 函数,在程序的别处我们可以用 ft(4,5) 等样式来调 用 fa(x,y) 函数运算求值。调用时,传递参数值给fa(x,y)函数(按次序把4
9、传给X,把5传给y),返回结果22 后继续向下执行主程序。MT4编程初级手册(5):自定义数组一、数组是一组同类型变量的集合,可以以一个名称同时存储多个数值,由索引来 调用,在实现我们EA的算法时是一个非常重要的工具。例: intarrai5=5,4,3,2,1;这是一个数组名为 arrai 、包含了 5个元素的整数型数组 (即数组长度 length 为 5),可以同时存储 5个数据。二、自定义数组也必须遵循“先声明,后使用”原则 声明(创建)时,必须设置类型与名称; 声明(创建)时,数组的数据元素个数可以设定也可以不设定; 数组中第一个元素的索引编号为 0,第二个为 1,以此类推。编号使用方
10、括号跟在数组的后面; 在这上例中 arrai0 的值为 5、aa1 的值为 4、aa2 的值为 3、aa3 的值为 2、aa4的值为 1.声明(创建)数组的同时,可以赋初始值,也可以不赋初始值。例:intaa;创建数组aa,不指定数据元素的个数;intbb10;创建数组bb,设定数据元素为10个,不赋给这些数据元素初始值;intcc3=3,4,5;创建数组cc,设定数组元素为2个,并赋给初始值;赋值后, cc0 的值为 3、cc1 的值为 4、cc2 的值为 5;intdd7=5,6,7;创建数组dd,设定数组元素为7个,但只给前3个元素赋初始值。三、数组使用时的赋值 数组的赋值必须指定明确的
11、将要赋值对象的索引,除新建数组时可以批量赋值以外, 数组元素必须一个一个地赋值。例如: cc1=5 ;这个是对数组 cc 的第 2 个元素 cc1 (0 是第 1 个, 1 表示第 2 个)重新赋值为5。在这里,不需要整数型变量定义符 int , 这样,数组 cc 原有三个值 3,4,5 就变为 3,5,5四、数组的引用 数组是一系列相同类型的变量的集合,所以每次只能使用数组中的一个元素。数组的引用必须指定明确的引用对象索引值,一次只能引用一个。如果需要使用整 列数组,则必须逐个使用。在程序中经常使用循环与数组相互配合来完成相应的功 能。例如:数组 arrai5 的值为 5,4,3,2,1我们
12、用数组名称arrai 加索引值来引用数组 arrai 中的值:i=0时,aai的值为5;i=1时,aai的值为4;i=2时,aai的值为3;i=3时,aai的值为2;当 i=4 时, aai 的值为 1 ;MT4编程初级手册(6):市场数据取值、预定义数组(MT4已经预先定义好了的,可直接调用)开盘价、最高价、最低价、收盘价、成交量等市场历史数据,每根K线实体都各自有一个,所以必须使用数组来调用,MT4有几个预定义数组,预定义的意思就是这些 数据都是被准备好了的,EA的开发者可以直接使用: 预定义数组:开盘价 Open 、最高价 High 、最低价 Low 、收盘价 close 、成 交量 V
13、olume 、 K 线所属时间 Time类型为双精度浮点 double 型(即精确小数)这里有一个引用顺序或位置的问题,从右边起第一根K线实体(即最新的K线)的索引为 0,第二根 K 线索引 1,第三根 K 线索引 3,以此类推,也就是说从右向左倒着数过去,最近的数值小,而越远的数值越大。Open0 、 High0 、 Low0 、Close0,表示最新的开盘价、最高价、最低价、收盘价;Open1 、 High1 、 Low1 、close1,表示第2根K线蜡烛的开盘价、最高价、最低价、收盘价(也就是昨天)Open2 、 High2 、 Low2 、close2,表示第3根K线蜡烛的开盘价、最
14、高价、最低价、收盘价;Open3 、 High3 、 Low3 、close3,表示第4根K线蜡烛的开盘价、最高价、最低价、收盘价;Open、 High 、 Low、 close ,表示第 i+1根K线蜡烛的开盘价、最高价、最低价、收盘价 以此类推 说明:这些是数组,用的是方括号来制定索引值。二、预定义变量买入价、卖出价是行情数据,MT4用预定义变量Ask和Bid表示,数值类型为double 双精度浮点类型。还有一些预定义变量,如:Bars 表示图表中的 K 线数,类型为 int 整数型;Digits 表示当前货币对的小数位数,类型为 int 整数型,无日元币对为 4(位),有日元币对为 2(
15、位),黄金石油等一般也为 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 型;
16、最低价:iLow(symbol,timeframe,shift)双精度浮点 double 型;成交量:iVolume(symbol,timeframe,shift)双精度浮点 double 型;日期时间 datetime 型;所属时间: iTime(symbol,timeframe,shift)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)月线图(
17、PERIOD_W1) 例:iOpen("EURUSD",PERIOD_H1,0表示欧元兑美元1小时图最新K线实体的开盘价;iClose("USDJPY",PERIOD_H4,2)表示美元兑日元4小时图第3根K线实体的收盘价;iClose("GBPUSD",PERI0D_H1,i)表示英磅兑美元1小时图第i+1根K线实体的收盘价;iHigh(NULL,O,O)既不指定商品,也不指定K线周期,用在谁就是谁,用在哪就是哪;MT4编程初级手册:条件判断语句一、if 判断语句if 判断语句很常用,使用起来也比较简单。规则:如果小括号中的条件成立
18、则执行大括号中的语句;如果不成立则跳过大括号, 执行后面的语句。例如:if(condition=1) a=b+1;我们在编写报警指标的时候,就经常要使用到这一语句: 如果“价格向上达到指定价位”,则“报警”;如果“ MAC指标上穿”,则“报警”;如果“均线指标金叉”,则“报警”。等等 例:intflag=0;if(Low1>1.0000&&Low0<=1.0000&&flag!=1)Alert(symbol()," 价格向下触及 1.0000!");flag=1;if(High1<1.0000&&High0&
19、gt;=1.0000&&flag!=2)Alert(symbol()," 价格向上触及 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 时,说明从未报过警,上、下穿都能报警;
20、当 flag=1 时,说明已经上穿报过警了,不能再上穿报警,但仍可下穿报警; 当 flag=2 时,说明已经下穿报过警了,不能再下穿报警,但仍可上穿报警。二、if.else 语句 规则:如果小括号中的条件成立则执行 if 下大括号中的第一部分语句;如果不成立 则执行 else 下大括号中的第二部分语句。if( 判断条件 )第一部分语句;else第二部分语句;三、注意事项1、只有语句后面才用到语句结束符“;”条件、大、小括号后面都不用语句结束符2、语句用大括号括起来(大括号的作用为界定语句块),但如果只有一行语句,则大括号可以省略:例如:if( 条件) 语句 1;MT4编程初级手册(8):循环语
21、句一幅K线图有几千上万条K线(Bar,根据设定的样本数),每根 K线Bar又各有开收盘价、收盘价、最高低价等数值,而且还有很多移动平均线、MAC、D RSI 等技术指标数值。面对大量的数据,我们经常采用循环来实现数据的取值和赋值。面我们简单来介绍一下MT4中主要用到的循环语句。、 while 循环while( 判断条件 )语句 1;语句 2;规则:当小括号中的判断条件成立时,就执行大括号中的语句,执行完毕后再判断条件是否成立,如果条件成立就再继续执行大括号中的语句。只要条件成立,程序就不停地执行大括号中的语句(循环体),直到小括号中的条件不再成立时结束循环,while循环又叫做“当循环”,意思
22、为当 XX条件时执行循环。它与 if 语句的区别是: if 语句是当条件为真时只运行一次; 而 while 语句则是只要 条件为真,循环体语句就不断地运行,直到条件为假时结束循环。所以为了避免造 成死循环,循环体内应当对判断的条件进行修改,如进行数值的累加等。例:externintfast=12;externintslow=26;doublebuffered;inti=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+
23、;这里,循环执行条件是 i<1000 ,循环体中有两条语句,一句是把两条均线的差值赋 给数组 buffer ,另一句“ i+; ”,我们知道“ +”是自增运算符,那么每运行一次, i 的值在原有基础上增加 1。这样,随着循环的不断地运行, i 的值逐渐增加,循环 到1000次后,i的值也就从0变为了 1000,此时“ivlOOO ”就不再成立,循环结束。这样,数组 buffered 中也就存储了 1000 个值。MT4编程初级手册(9) : MT4自定义指标的结构MT4自定义指标一般由四个部分所组成:一、文件头部,也称为预处理程序 预处理程序以“ #”开头,行尾无语句结束符“ ; ” 常
24、用的预处理程序有:1、#propertyindicator_chart_window把指标显示在主图。如:均线、SRA等类指标用到此语句.2、#propertyindicator_separate_window把指标显示在副图。如:MACDRSI、威廉等类指标用到此语句.3、#propertyindicator_buffers3显示 3根指标线 .4、#propertyindicator_color1Red第 1 根指标线的颜色为 Red.5、#propertyindicator_width11第 1 根指标线的粗细分别为 1.6、#propertyindicator_level10.00在
25、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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安检物品游戏课件
- 少儿编程行业分析报告
- 2025年陕西省渭南市蒲城县中考一模语文试题(原卷版+解析版)
- 公司出纳员工个人年终工作总结
- 幼儿园实习报告范文
- 2025合同范本全书
- 电子出版物出版合同范本
- 2025年居民租赁合同协议书下载
- 承包饭店经营权合同
- 2025广告代理制作合同新版本(合同样本)
- *****光伏电站30MW二次调试方案
- 英语演讲Artificial-intelligence人工智能(课堂PPT)
- 青岛生建z28-75滚丝机说明书
- 小学科学教科版六年级下册第三单元《宇宙》复习教案(2023春新课标版)
- 消费者心理与行为分析PPT(第四版)完整全套教学课件
- 城镇企业职工养老保险制度改革试点方案〉实施办法分享
- 中医医院医疗质量考核标准实施细则
- 2023年机动车检测站内部审核表(三合一)
- 办公住所托管使用合同协议书范本
- 2023福建中考道德与法治答题卡word版可编辑
- 上海市黄浦区2020-2021学年高一下学期期末语文试题
评论
0/150
提交评论