MQ语言简单说明与教程.docx
- 文档编号:7495617
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:23
- 大小:29.99KB
MQ语言简单说明与教程.docx
《MQ语言简单说明与教程.docx》由会员分享,可在线阅读,更多相关《MQ语言简单说明与教程.docx(23页珍藏版)》请在冰豆网上搜索。
MQ语言简单说明与教程
MQ语言简单说明与教程
关键字:
programtraderMT4EAMQMQLⅡ
本文来自:
程序化交易者()详细出处参考:
“人工智能系统”是一允许客户策划自己的投资交易战略的具有革新性的工具。
人工智能系统是使交易过程操作自动化,使客户从实时市场监控的繁重公事解放出来的系统。
许多专业客户使用多重交易系统以便在不同市场多变的环境下操作。
通常他们在一些知名的分析软件包,如MetaStock、TradeStation.中撰写和检验他们的投资交易战略。
有了人工智能系统,你就可以将你的真实账户同交易系统产生的信号联系起来,即通过跟踪和管理你任一时点的未平仓合约、下单和止损的记录来建立这种联系。
什么是人工智能系统呢?
是用专业的MetaQuotes语言编写的于特定图表联系的自动交易系统(ATS)。
它不仅告知客户交易时机,还自动执行交易账户的交易并将信号直发送到交易服务器。
同大多数IT系统一样,人工智能系统还以历史记录以及表上所反映的交易进出点来测试投资交易战略。
另外,人工智能系统的执行代码是与源程序正文分开保存的。
这种安排确保客户信息的保密性不受爱打听的人的影响。
编写你自己的人工智能系统程序是非常容易的,你不必是专业的程序员,你只要学会一非常简单的语言:
MQLⅡ,即便是不懂得如何编写自己的系统程序人通常也可以雇佣他所熟识的精通编程的人来编,这些人可能仅需要不超过一个小时的时间来掌握编程和操作方法。
这里有许多不同的MetaStock和TradeStation的客户制定的投资交易战略,其中大多数能较容易的转化成MQLⅡ语言,这使用户能吸取以往经验。
在本页就有一些可供下载的“人工智能系统”版本。
环球银行交易平台将人工智能系统设为*.mql(源程序档用此扩展名)和*.exp(操作代码用此扩展名)文件存于程序的根目录下的子目录。
客户可以通过NAVIGATORL浏览窗口管理操作多个(不限数量)的“人工智能系统”。
关于如何开立人工智能系统并将其于交易终端联机问题的程序在环球银行客户用户向导上有详细说明。
通过用METAQUOTESⅡ语言编写“人工智能系统”程序来自动管理交易操作、执行客户自己的战略。
METAQUOTESⅡ是相当容易学习、使用和安装的。
MQLⅡ语言包括大量的用于控制现在和过去的报价、主要算法、逻辑运算的变量,并在建立主要指示器以及指示开立和控制头寸方面起关键作用。
这种语言是同TRADERSTION技术公司开发的EASY语言是相类似的,但它有一些特殊功能。
程序代码是由METAEDITOR文字编辑器编写的,它能将MQLII不同部分设定为不同颜色,因而,可帮助用户以//标记(双斜线)开始通过专家系统文本注释。
注释也可以用斜线星号星号斜线(/*(注释)*/,即如C语言一样)来标记。
编辑器是固定以灰色显示注释。
为了建立和控制投资交易战略,客户必须有一有关记录信号产生、变动的进行交易的结果的信息的日志文件。
人工智能系统的日志是在环球银行客户目录中的/logs/YYYYMMDD.log文件下。
当前日志可直接访问下级终端窗口。
若要访问MQLⅡ语言的目录系统,就需要打开METAQOUTES语言窗口或者按下字典按钮或从工具菜单中查找,这使得用户能获取每一用该语言的信息的祥细数据。
1.主要语言结构
同其它语言一样,MQLⅡ有一套主要的元素来构建他的主要结构。
这些元素应以特殊的方式组合与安排,用以表示特定的语句和公式。
语言的主要对象是数据,即三种类型的数据:
数值型、逻辑型、字符型。
所有的数值型都用双重格式,逻辑型数据为真或假,字符串是用省略号标记的一串字符。
字符串又名为文本串。
数据可包括不同类型的变量,也可直接表示为源程序正本。
每一个METAQUOTES语句都是一完整结构,可以包含固定词、操作指令、数据、变量、表达式、标点符号,通常是以分号结束。
●固定语句是指预先确定的具有特殊和具体意义的词汇。
●操作指令是指定特定数据、变量、表达式操作的符号。
●变量通常包含数值、字符、逻辑型数据。
●表达式是指固定语句、变量、操作指令、数据的联合体,是语言中三种类型数据即数值型、字符型、逻辑型数据综合运用的结果。
●标点符号是用来描述表达式、定义参量、划分句子以及数列再排序的。
2.标点符号
符号
名称
描述
;
分号
在METAQUOTESII中标记一段的结束
()
括号
在表达式的一组数据中改变计算顺序,标记函数中的参量以及在描述变量的初始表达式,标记变量的初始值和变数描述段的排列。
,
逗号
当函数已引用时,分开参量,在变量描述段中分开变量,在描述数列长度时分开数据,在存取数组元素时分开指数。
:
冒号
用在变量描述段中标记一变量表的开始。
""
引号
标记一个字符串(文本串)。
[]
方括号
标记特定数组长度的数值,标记一个数组中特定元素的存取数,标记访问历史数据的期数。
{}
大括号
用做算术括号。
可以用来代替“开始…结束”将一段指令单独划做一区。
/**/
注释括号
标记注释
//
双斜线
表明一单字元注释的开始
3.运算
运算可分为5种形式:
赋值运算、字符运算、数学运算、比较运算和逻辑运算。
3.1赋值运算
赋值运算的“=”(等于)是用来给变量赋予一特定的值(可为数值型、字符型、逻辑型,即取决于变量类型)这种赋值可能是一表达式。
例如:
变数COUNTER(0);
Counter=counter+1;因而,COUNTER变量即被赋值为1。
数值同样也能被赋值给数列。
3.2字符运算
操作字符串时,只有运算符可使用“+”。
特用于连接两个字符。
例如:
Variable:
String("");
...
String="some_"+"text";
因此,字符变量可以是字符,也可是包含数值和逻辑型数据的复合字符串,而后者在连接数值和逻辑数据之前需将它们转化为字符型。
例如:
String="string"+1;
这样,这个字符变量就可以包含“string1”字符了。
操作数不仅可以是数值,还可以是相应的变量以及操作后的表达式。
3.3数学运算
4种主要的数学运算是:
加‘+’,减‘-’,乘‘*’,除‘/’;它们是在数学表达式中用来计算数值的。
例如:
(Ask+Bid)/2,High+20*Point
3.4比较运算
比较运算是用于同类型数据之间的比较。
第一个数与第二个数比较得出“真”或“假”,小于“〈”,大于“〉”,等于“=”,不等于“〈〉”,小于等于“〈=”,大于等于“〉=”。
逻辑值是METAQUOTES语言控制下比较表达式运算的结果。
例如:
ifFreeMargin<1000thenexit;
字符型数据是按字母顺序比较的,如“AAA”字符就小于字符“ZZZ”。
当逻辑型数据进行比较时,必须记住逻辑值“真”用数值表达就是1,而逻辑值“假”则用0表示。
3.5逻辑运算
逻辑运算将逻辑数据连接起来。
OR—“|”(或者),AND—“&”(并且),NOT—“!
”(非)。
逻辑运算有相应的固定词OR,AND,NOT。
例如:
IfFreeMargin>100andFreeMargin<1000thenprint("Freemarginis",FreeMargin);
记住,当OR和AND是重置的,那么,数据就得计算两次。
NOT是第一次序的,即NOT仅仅适用于单一值。
例如:
Variable:
Condition1(True);
...
Condition1=FreeMargin>=1000;(注:
freemargin大于等于1000时,condition1为true;否则为false)
IfnotCondition1thenexit;
下面是逻辑运算的结果表格。
(即:
freemargin<1000时退出)
value1
value2
value1ORvalue2
True真
True真
True真
True真
False假
True真
False假
True真
True真
False假
False假
False假
value1
value2
value1ANDvalue2
True真
True真
True真
True真
False假
False假
False假
True真
False假
False假
False假
False假
value1
NOTvalue1
True真
False假
False假
True真
/*老实说,原文我也没看懂这个,不知道想表达个啥~哈哈……尴尬摸头笑*/
4.固定词
METAQUOTESII语言有几组固定词
1).逻辑算式
AND、OR、NOT
2).MQLⅡ命令
Array,Begin,Break,Continue,Define,Downto,Else,End,
Exit,For,If,Input,Then,To,Variable,While
定义语句结构的固定词语又名关键词
3).固定函数
Abs,AccName,AccountName,Alert,Ceil,CloseOrder,
Comment,Cos,CurTime,Day,DayOfWeek,DeleteOrder,
Exp,Floor,Highest,Hour,iADX,iATR,iBANDS,iCCI,
iMA,iMACD,iMFI,iMOM,iRSI,iSAR,iSTO,iWPR,IsDemo,
IsIndirect,LastTradeTime,Log,Lowest,Minute,Mod,
ModifyOrder,Month,MoveObject,NumberToStr,Ord,
Ordervalue,Period,Pow,Print,PrintTrade,Rand,Round,
ServerAddress,SetArrow,SetObjectText,SetOrder,
SetText,Sin,Sqrt,Srand,Symbol,Tan,TimeToStr,Year
4).预设变量(用户自定义变量)
Lots,StopLoss,TakeProfit,TrailingStop
5).预设交易终端变量
AccNum,AccountNumber,Ask,Balance,Bars,Bid,Close,
Credit,Equity,FreeMargin,High,Low,Margin,Open,Point,
PriceAsk,PriceBid,PriceHigh,PriceLow,PriceTime,Time,
TotalProfit,TotalTrades,Volume.
6).预设固定函数的参量(宏)
MODE_CLOSE,MODE_EMA,MODE_HIGH,MODE_LOW,MODE_MAIN,
MODE_MINUSDI,MODE_OPEN,MODE_PLUSDI,MODE_SIGNAL,
MODE_SMA,MODE_STOPLOSS,MODE_TAKEPROFIT,MODE_VOLUME,
MODE_WMA,OBJ_HLINE,OBJ_SYMBOL,OBJ_TEXT,OBJ_TRENDLINE,
OBJ_VLINE,OP_BUY,OP_BUYLIMIT,OP_BUYSTOP,OP_SELL,
OP_SELLLIMIT,OP_SELLSTOP,SYMBOL_ARROWDOWN,
SYMBOL_ARROWUP,SYMBOL_CHECKSIGN,SYMBOL_STOPSIGN,
SYMBOL_THUMBSDOWN,SYMBOL_THUMBSUP,VAL_CLOSEPRICE,
VAL_CLOSETIME,VAL_COMISSION,VAL_COMMENT,VAL_LOTS,
VAL_OPENPRICE,VAL_OPENTIME,VAL_PROFIT,VAL_STOPLOSS,
VAL_SWAP,VAL_SYMBOL,VAL_TAKEPROFIT,VAL_TICKET,
VAL_TYPE.
事实上,上述固定词是宏命令,语法分析器用数值代替它们。
宏命令是用来简化用户编写程序引用函数的:
即用一些方便赋有含义的词来代替一些函数参量数值。
这也同样适用于颜色的名称。
7).颜色
liceBlue,AntiqueWhite,Aqua,Aquamarine,Azure,Beige,
Bisque,Black,BlanchedAlmond,Blue,BlueViolet,Brown,
BurlyWood,CadetBlue,Chartreuse,Chocolate,Coral,
CornflowerBlue,Cornsilk,Crimson,Cyan,DarkBlue,
DarkCyan,DarkGoldenrod,DarkGray,DarkGreen,DarkKhaki,
DarkMagenta,DarkOliveGreen,DarkOrange,DarkOrchid,
DarkRed,DarkSalmon,DarkSeaGreen,DarkSlateBlue,
DarkSlateGray,DarkTurquoise,DarkViolet,DeepPink,
DeepSkyBlue,DimGray,DodgerBlue,FireBrick,FloralWhite,
ForestGreen,Fuchsia,Gainsboro,GhostWhite,Gold,
Goldenrod,Gray,Green,GreenYellow,Honeydew,HotPink,
IndianRed,Indigo,Ivory,Khaki,Lavender,LavenderBlush,
LawnGreen,LemonChiffon,LightBlue,LightCoral,LightCyan,
LightGoldenrod,LightGreen,LightGrey,LightPink,
LightSalmon,LightSeaGreen,LightSkyBlue,LightSlateGray,
LightSteelBlue,LightYellow,Lime,LimeGreen,Linen,
Magenta,Maroon,MediumAquamarine,MediumBlue,
MediumOrchid,MediumPurple,MediumSeaGreen,
MediumSlateBlue,MediumSpringGreen,MediumTurquoise,
MediumVioletRed,MidnightBlue,MintCream,MistyRose,
Moccasin,NavajoWhite,Navy,OldLace,Olive,OliveDrab,
Orange,OrangeRed,Orchid,PaleGoldenrod,PaleGreen,
PaleTurquoise,PaleVioletRed,PapayaWhip,PeachPuff,Peru,
Pink,Plum,PowderBlue,Purple,Red,RosyBrown,RoyalBlue,
SaddleBrown,Salmon,SandyBrown,SeaGreen,Seashell,
Sienna,Silver,SkyBlue,SlateBlue,SlateGray,Snow,
SpringGreen,SteelBlue,Tan,Teal,Thistle,Tomato,
Turquoise,Violet,Wheat,White,WhiteSmoke,Yellow,
YellowGreen.
所有的固定词都是不计较格式的,它们可以用大写字母也可用小写字母。
4.1预设变数
通常,已编写完毕的人工智能系统是需要改变某一参数的,这将影响系统的运作。
为避免每次都以手动编辑系统代码和基本变量来改变参数,一个类似于METAQUOTES系统中所用的方法应运而生:
有4种参量置于人工智能系统的propertiestable(工具台)下的METAEDITOR的菜单档-Properties(用具)...-Processingtab(程序卷标)
Lots–手数
StopLoss–止损点
TakeProfit–目标位
TrailingStop–移动止损指令
这些变量的初始值可以在人工智能系统的PROPERTIESTABLE(工具台)中直接键入或在按F7时弹出的特别设置对话框中或是在菜单(Charts-ExpertAdvisors-Properties)中修改。
这些变量不能在程序中修改。
★4.2METAQUOTESⅡ语言的命令结构
4.2.1变量说明和描述
在计算过程中储存临时数据需要用到变量。
变量是在程序的最开头用关键词、数组、定义来描述。
这些词是可以用复数形式的。
这些词通常在描述变数语句的开端。
而这些词之间的区别在于:
“variable”是用来描述变量,“array”是用来描述数组“define”是用以描述用户自定义变量,(这种自定义变量类似于预设变量可以通过设置对话框来修改即外部修改,但不同点在于自定义变量可在程序计算过程中改变)
变量描述语法
NAME(初始值),“NAME”是变量的名称,“初始值”是变量的初始值。
这个初始值界定了变量的类型——数值型、字符型、逻辑型
举例:
COUNTER(0);数值变数
STRING1(“SOMESTRING”);字符变量
MYCONDITION(FALSE)逻辑变量
Array:
ArrayName[rows,columns](Initialvalue);数组长度一个或多个数值决定—数值
在MetaQuotes语言中数组有可能有一、二、三、四位数值长度。
在一般术语中,数组是指一组排列成行的拥有同一名称(数组名)且按顺序给定每一数值序号的变数组。
数列在理清同一类型的数据的顺序时是非常方便的。
交易终端的历史记录就是数列功能的很好的范例,如开盘价、收盘价、最高价、最低价、成交量。
这些数据是以单个元素的形式存取。
例如:
CLOSE过去5个时点的收盘价。
两个元素的数列可以是一个第一次排横序第二次排纵序的结果。
例如:
Array:
MyTable[10,5](0);//a10rowsby5columnstable(1个10行5列的表)
print(MyTable);//printthefourthelementinthesecondrow
数列可以包含不同类型的数据——数值型、字符型、逻辑型,但是,它需为同一类型,数列建立之初起初使值已经确定化了。
附加用户名的描述语法:
Define:
Name(InitialNumber);
NAME名称变量,INITIALNUMBER是变量的初始值。
需要指出的是附加用户名变量仅仅是数值型数据。
上面已经提到,用户名变量可以在程序的计算过程中修改,这样的修改仅仅在人工智能系统的当前部分有效直到特定智能系统从客户终端操作中撤销。
当再次启动人工智能系统时,附加用户名变量又会初始化为新值。
4.2.2EXIT语句
EXIT语句是终止系统运作的语句,也就是所谓的预设终止程序。
4.2.3IF-THEN条件语句
IF-THEN条件语句实现了控制运行系统指令的顺序的功能。
这个语句可以由不同方式编写。
语法如下:
ifConditionthenStatement;or
ifConditionthenbegin//推荐使用
Statement;
Statement;
...
end;
当条件是逻辑表达式使用了“True”或“False”时;STATEMENT(语句)可以是MQLⅡ语言中的任何指令。
算式括号(Begin–End)可以由大括号{}代替。
条件句可以用来分写程序。
为此,必须再用到另外一关键词Else:
ifConditionthenStatement1elseStatement2;
ifConditionthenbegin
Statement;
Statement;
...
end
else
Statement;
Statement;
...
end;or
ifConditionthenbegin
Statement;
Statement;
...
end
elseStatement2;or
ifConditionthenStatement1
else
Statement;
Statement;
.可以使用嵌套式的条件语句。
通常,MQLⅡ语言中的任意语句都代表一合法指令,变量描述除外。
因为,严格的讲,变量描述不是一可执行指令。
★4.2.4TheWHILE循环
Whileloop语句是确保只要循环条件为“真”包含循环本体的语句就一直执行的语句。
一个循环在遇BREAK语句是终止。
反复循环也可以可用CONTINUE语句终止。
这个语句使得下一个循环开始。
也就是说,这种语句之后会出现CONTINUE并且跳至循环末而不再执行这个循环。
因而,在条件句中毕会使用使用BREAK和CONTIMUE。
语法:
whileConditionbegin
Statement;
...
end;
当条件是循环执行条件句时,每一循环的逻辑表达计算式是以“真”、“假”值表示。
该条件句可以是MQLII语言中的任何指令。
算式括号(Begin–End)表示循环本体且可以由大括号{}代替。
BREAK和CONTINUE不是必用的。
例子:
Counter=1;
whileCounter<=Barsbegin
print(Close);
Counter=Counter+1;
end;
4.2.5FOR循环
FOR循环是确保包含特定次数的循环本体的语句的执行。
语法:
forNumberVariable=Initialvalueto|downtoLimitvaluebegin
Statement;
...
end:
数值变量在循环中是可变的,在每次循环之后,它会增加或减少(取决于关键词是用TO还是DOWNTO);
初始
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MQ 语言 简单 说明 教程
![提示](https://static.bdocx.com/images/bang_tan.gif)