关键词不能为空

当前您在: 主页 > 英语 >

MQ语言简单说明与教程

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-16 12:07
tags:

-

2021年2月16日发(作者:有时候有时候)


MQ


语言简单说明与教程




关键字:


programtrader


MT4


EA


MQ


MQL





本文来自:程序化交易者


()


详细出 处参考:


/a/MT4/2010/0913/572_





“人工智能系统”


是一允许客户策划自己的投资交易战略的具有革新


性的工具。

< br>


人工智能系统是使交易过程操作自动化,使客户从实时市场监控


的繁重公事解放出来的系统。


许多专业客户使用多重交易系统以便在

< p>
不同市场多变的环境下操作。


通常他们在一些知名的分析软件包,



MetaStock


TradeStation.


中撰写和检验他们的投资交易战略。

< br>



有了人工智能系统,你就可以将你的真实账户同交易 系统产生的


信号联系起来,


即通过跟踪和管理你任一时点的未平 仓合约、


下单和


止损的记录来建立这种联系。

< br>



什么是人工智能系统呢?是用专业的


MetaQuotes


语言编写的于


特定图表联系的自 动交易系统(


ATS



。它不仅告知客 户交易时机,还


自动执行交易账户的交易并将信号直发送到交易服务器。同大多数


IT


系统一样,人工智能系统还以历史记录以及表上所反映的交易进< /p>


出点来测试投资交易战略。


另外,


人工智 能系统的执行代码是与源程


序正文分开保存的。


这种安排确保客 户信息的保密性不受爱打听的人


的影响。




编写你自己的人工智能系统程序是非常容易的,你不必是专业 的


程序员,你只要学会一非常简单的语言:


MQL


Ⅱ,即便是不懂得如何


编写自己的系统程序人通常也可以雇佣他所熟识的精通 编程的人来


编,这些人可能仅需要不超过一个小时的时间来掌握编程和操作方

< p>
法。




这里有许多不同的


MetaStock



TradeStation


的客 户制定的


投资交易战略,其中大多数能较容易的转化成


MQL< /p>


Ⅱ语言,这使用户


能吸取以往经验。


在本 页就有一些可供下载的


“人工智能系统”


版本。




环球银行



交易平台将人工智能系统设为


*.mql


(源程序档用此


扩展名)和


*.exp


(操作代码用此扩展名)文件存于程序的根目录


下 的子目录。客户可以通过


NAVIGATORL


浏览窗口管理 操作多个(不


限数量)的“人工智能系统”


< br>



关于如何开立人工智能系统并将其于交易终端联机问 题的程序在


环球银行客户用户向导上有详细说明。




通过用


METAQUOTES


Ⅱ语言编写“人工智能系统”程序来自动管


理交易操作、

< p>
执行客户自己的战略。


METAQUOTES


Ⅱ 是相当容易学习、


使用和安装的。


MQL


Ⅱ语言包括大量的用于控制现在和过去的报价、


主要算法、


逻 辑运算的变量,


并在建立主要指示器以及指示开立和控


制头寸方 面起关键作用。这种语言是同


TRADERSTION


技术公 司开发



EASY


语言是相类似的,但 它有一些特殊功能。




程序代码是由


METAEDITOR


文字编辑器编写的,它能将


MQL II



同部分设定为不同颜色,因而,可帮 助用户以


//


标记(双斜线)开


始 通过专家系统文本注释。注释也可以用斜线星号星号斜线(


/*


(注


释)


*/


,即如

< br>C


语言一样)来标记。编辑器是固定以灰色显示注释。




为了建立和控制投资交易战略,


客户 必须有一有关记录信号产生、


变动的进行交易的结果的信息的日志文件。


人工智能系统的日志是在


环球银行客户目录中的


/lo gs/


文件下。当前日志可直


接访问下级终端窗口。




若要访问


MQL< /p>


Ⅱ语言的目录系统,就需要打开


METAQOUTES

< p>
语言窗


口或者按下字典按钮或从工具菜单中查找,


这使得用户能获取每一用


该语言的信息的祥细数据。







1.


主要语言结构


< br>同其它语言一样,


MQL


Ⅱ有一套主要的元素来构建他的 主要结构。这


些元素应以特殊的方式组合与安排,用以表示特定的语句和公式。




语言的主要对象是数据,即三种类型的数 据:数值型、逻辑型、


字符型。所有的数值型都用双重格式,逻辑型数据为真或假,字符 串


是用省略号标记的一串字符。


字符串又名为文本串。


数据可包括不同


类型的变量,也可直接表示为源程序正本。




每一个


METAQU OTES


语句都是一完整结构,


可以包含固定词、


操作


指令、数据、变量、表达式、标点符号,通常是以分号结束。

< p>




固定语句是指预先确定的具有特殊和具体意义的词汇。





操作指令是指定特定数据、变量、表达式操作的符号。





变量通常包含数值、字符、逻辑型数据。





表达式是指固定语句、变量、操作 指令、数据的联合体,是语言中三种类


型数据即数值型、字符型、逻辑型数据综合运用的 结果。





标点符号是用来描述表达式、定义参量、划分句子以及数列再排序的。








2.


标点符号



















[ ]


{ }


/* */


//



















METAQUOTES II


中标记一段的结束



< p>
在表达式的一组数据中改变计算顺序,


标记函数中的参量以及在描述变量的 初


始表达式,标记变量的初始值和变数描述段的排列。




当函数已引用时,分开参量,在变量描述段中分开变量,在描 述数列长度时分


开数据,在存取数组元素时分开指数。




用在变量描述段中标记一变量表的开始。




标记一个字符串(文本串)





标记特定数组长度的数值,标记一个数组中特定元素的存取数 ,标记访问历史


数据的期数。




用做算术括号。可以用来代替“开始…结束



”将一段指令单独划做一区。



分号



括号



逗号



冒号



引号



方括号



大括号



注释括号




标记注释



双斜线




表明一单字元注释的开始













3.


运算



运算可分为


5


种形式:赋值运算、字符 运算、数学运算、比较运算和


逻辑运算。




3.1


赋值运算




赋值运算的“


=


(等于)是用来给变量赋予一特定的值(可为数


值型、字 符型、逻辑型,即取决于变量类型)这种赋值可能是一表达


式。



例如:



变数


COUNTER(0)





Counter=counter+1;


因而,


COUNTER


变量即被赋值为


1


。< /p>




数值同样也能被赋值给数列。






3.2


字符运算




操作字符串时,只有运算符可使用“


+



。特用于连接两个字符。



例如:



Variable: String(


...


String =




因此,字符变量可以是字符,也可是包含数值和逻辑型数据的复


合字符串,而 后者在连接数值和逻辑数据之前需将它们转化为字符


型。



例如:



String =





这样,这个字符变量就可以包含“


string 1


”字符了。



< br>操作数不仅可以是数值,还可以是相应的变量以及操作后的表达


式。






3.3


数学运算




4


种主要的数学运算是:加‘


+



,减‘


-



,乘‘


*



,除‘


/



;它


们是在数学表达式中用来计算数值的。



例如:



(Ask+Bid)/ 2,High+20*Point






3.4


比较运算




比较运算是用于同类型数据之间的比较。第一个数与第二个数比


较得出

< br>“真”



“假”



小于



〈”



大于



“〉




等于



=




不等于



〈〉




小于等于“



=



,大于等于“〉


=



。逻辑值是


METAQUOTES


语言控制下


比较表达式运算的结果。< /p>



例如:



if FreeMargin < 1000 then exit;



字符型数据是按字母顺序比较的,




AAA



字符就小于字符



ZZZ




当逻辑型数 据进行比较时,


必须记住逻辑值


“真”


用数值表达就是


1



而逻辑值“假”则 用


0


表示。






3.5


逻辑运算




逻辑运算将逻辑数据连接起来。


OR




|



(或者)



AND




&



(并


且)



NOT


—“!


< br>(非)


。逻辑运算有相应的固定词


OR

< br>,


AND



NOT




例如:



If


FreeMargin>100


and


FreeMargin<1000


then


print(


margin


is


FreeMargin);


< /p>


记住,当


OR



AND


是重置的,那么,数据就得计算两次。


NOT

< p>


第一次序的,即


NOT


仅仅适用于单一值。



例如:



Variable: Condition1( True );


...


Condition1 = FreeMargin >= 1000;


(注:


freemargin

< p>
大于等于


1000


时,


c ondition1



true


;否则 为


false




If not Condition1 then exit;



下面是逻辑运算的结果表格。


(


即:


freemargin<1000


时退 出


)



value1


value2


value1 OR value2


True




True




True




True




False




True




False




True




True




False




False




False




value1


value2


value1 AND value2


True




True




True




True




False




False




False




True




False




False




False




False




value1


NOT value1



True




False




False




True






/*


老实说,原文我也没看懂这个, 不知道想表达个啥~哈哈……尴尬摸头笑


*/











4


.固定词



METAQUOTES II


语言有几组固定词



1)




逻辑算式



AND

< br>、


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


种参量置于人工智 能系统的


properties table(


工具台


)


下的


METAEDITOR

< br>的菜单档


- Properties


(用具)


... - Processing tab


(程序卷标)




Lots



手数



StopLoss




止损点



TakeProfit




目标位




TrailingStop




移动止损指令





这些变量的初始值可以在人工智能系统的


PROPERTIES TABLE


(工具


台)中直接键入或在按


F7


时弹出的特别设置对话框中或是在菜单



Charts - Expert Advisors - Properties

)中修改。这些变量不


能在程序中修改。







4.2 METAQUOTES


Ⅱ语言的命令结构




4.2.1


变量说明和描述


< /H3>



在计算过程中储存临时数据需要用到变量。变量 是在程序的最开


头用关键词、数组、定义来描述。这些词是可以用复数形式的。这些


词通常在描述变数语句的开端。而这些词之间的区别在于:



variable




是用来描述变量,



array



是用来描述数组




define



是 用以描述用户自定义变量,


(


这种自定义变量类似于预设变量可 以


通过设置对话框来修改即外部修改,


但不同点在于自定义变量 可在程


序计算过程中改变


)



变量描述语法



NAME

< p>
(初始值)




NAME


”是变量的名称,


“初始值”是变量的初始值。


这个初始值界定了变量的类型——数值型、字符型、逻辑型



举例:



COUNTER(0);


数值变数




STRING1(


―SOME STRING‖


);


字符变量




MYCONDITION(FALSE)


逻辑变量




Array : ArrayName[rows,columns](Initialvalue );


数组长度一个或多个数值决定



数值





MetaQuotes


语言中数组有可能有一、二、三、四位数值长度。


在一般术语中,数组 是指一组排列成行的拥有同一名称(数组名)且


按顺序给定每一数值序号的变数组。


数列在理清同一类型的数据的顺


序时是非常方便的。交易终端的历史 记录就是数列功能的很好的范


例,如开盘价、收盘价、最高价、最低价、成交量。这些数 据是以单


个元素的形式存取。例如:


CLOSE


过去


5


个时点的收盘价。两个元素

的数列可以是一个第一次排横序第二次排纵序的结果。



例如:



Array : MyTable[10,5]( 0 ); // a 10 rows by 5 columns table (1



10


< p>
5


列的表


)


print( MyTable ); // print the fourth element in the second row




数列可以包含不同类型的数据——数值型、字符型、逻辑型,但


是,它需为同一类型,数列建立之初起初使值已经确定化了。





附加用户名的描述语法:



Define : Name( InitialNumber );


NAME


名称变量,


INITIALNUMBER


是变量的初始值。



< br>需要指出的是附加用户名变量仅仅是数值型数据。


上面已经提到,


用户名变量可以在程序的计算过程中修改,


这样的修改仅仅在人工智

< p>
能系统的当前部分有效直到特定智能系统从客户终端操作中撤销。



再次启动人工智能系统时,附加用户名变量又会初始化为新值。





4.2.2 EXIT


语句



EXIT


语句是终止系统运作的语句,也就是所谓的预设终止程序。





4.2.3 IF- THEN


条件语句


< /FONT>



IF-THEN


条件语句实现了控制运行系统指令的顺序的功能 。这个


语句可以由不同方式编写。语法如下:




if Condition then Statement;or


if Condition then begin //


推荐使用



Statement;


Statement;


...


end;




当条件是逻辑表达式使用了“


True






False


”时


;STATEMENT


(语句)


可以是


MQL


Ⅱ语言中的任何 指令。


算式括号



Begin



End



可以由大括号


{}


代替。




条件句可以用来分写程序。


为此,< /p>


必须再用到另外一关键词


Else


:


if Condition then Statement1 else Statement2;


if Condition then begin


Statement;


Statement;


...


end


else


Statement;


Statement;


...


end;or


if Condition then begin


Statement;


Statement;


...


end


else Statement2;or


if Condition then Statement1


else


Statement;


Statement;



.


可以使用嵌套式的条件语句。通常,


MQL


Ⅱ 语言中的任意语句都代


表一合法指令,变量描述除外。因为,严格的讲,变量描述不是一 可


执行指令。






4.2.4 The WHILE


循环




While


loop


语句是确保只 要循环条件为“真”包含循环本体的语


句就一直执行的语句。


一 个循环在遇


BREAK


语句是终止。


反 复循环也


可以可用


CONTINUE


语 句终止。这个语句使得下一个循环开始。也就


是说,这种语句之后会出现


CONTINUE


并且跳至循环末而不再执行这


个循环 。因而,


在条件句中毕会使用使用


BREAK



CONTIMUE


。语法:



while Condition begin


Statement;



...


end;




当条件是循环执行条件句时,每一循环的逻辑表达计算式是以


“真”

< br>、


“假”值表示。该条件句可以是


MQL II


语言中的任何指令。


算式括号(


Begin



End


)表示循环本体且可以由大 括号


{}


代替。



BREAK



CONTINUE


不是必用的。



例子:




Counter = 1;


while Counter <= Bars begin


print( Close );


Counter = Counter + 1;


end;




4.2.5 FOR


循环




FOR


循环是确保包含特定次数的循环本体的语句的执行。语法:



for NumberVariable = Initialvalue to|downto Limitvalue begin


Statement;



...


end






数值变量在循环中是可变的,在每次循环之后,它会增加或减 少


(取决于关键词是用


TO


还是


DOWNTO






初始值是循环变量的初始数据;



语句可以是


MQL


Ⅱ语言编写的任何指 令;



TO



DOWNTO


指定循环变量每次增加或减少


1


LIMITvalue


是循环变量的边际数值



算式括号(


Begin



End


)表示循环本体且可以由大 括号


{}


代替。



BREAK



CONTINUE


不是必用的。



例子:




for Counter = 1 to 10 begin


if Counter > Bars then break;


print( Close );


end;





这个例 子是说可以循环


10


次。但若


BARS


值小于


10


,循环就会提


前终止,也就是说循环执行


BARS


次。

< p>




4.2.6 BREAK


语句



BREAK


语句是使


FOR



WH ILE


循环中断的语句。前面的例子不仅


说明

< br>LOOP


循环的运作,还说明


BREAK


语句的用法。


BREAK


语句仅仅

可以在循环体中使用。循环也可以是嵌套式的。


BREAK


语句使与它最


接近的循环中断。换句话说,


BREAK


语句中断内部循环而不中断外部


循环。





4.2.7 CONTINUE


语句



CONTIN UE


语句就是提前终止循环而开使执行下一个循环。换句话说,


CONTINUE


句之后的语句即被忽视掉。



例如:




for Counter = 1 to 10 begin


...


if Counter > Bars then continue;


print( Close );


...


end;




这说明这个



循环将执行


10


次。


但是,


CLOSE


值不会超过


BARS


次。



-


-


-


-


-


-


-


-



本文更新与2021-02-16 12:07,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/658567.html

MQ语言简单说明与教程的相关文章