MT4智能交易系统编程手册.docx
《MT4智能交易系统编程手册.docx》由会员分享,可在线阅读,更多相关《MT4智能交易系统编程手册.docx(30页珍藏版)》请在冰豆网上搜索。
![MT4智能交易系统编程手册.docx](https://file1.bdocx.com/fileroot1/2023-3/31/2eb3ae06-61b1-4bec-b7d0-3413d30ef1e3/2eb3ae06-61b1-4bec-b7d0-3413d30ef1e31.gif)
MT4智能交易系统编程手册
点击这里查看如何添加、启动、测试智能交易系统软件。
智能交易系统软件是一个创新的交易工具,允许客户对自己的交易策略进展设定并进展测试。
还可以创立新的技术指标
获取交易系统的逐步解释-反转条-点击这里。
MultiBankFX程序员
MultiBankFX向那些想要对其交易策略进展自动化,但又不想学习智能交易系统程序语言客户提供程序效劳。
欲知详情,请联系在线客服
智能交易系统软件是用来对交易过程全程自动化,免除交易商连续对市场进展日常烦琐的监护。
许多专业交易商利用多层交易系统,对不同的市场和在不同的环境下进展操作。
通常他们在著名的分析软件包里对交易战略进展编写和测试,比方,MetaStock和TradeStation。
使用MultiBankTrader智能交易系统软件,招招领先,你可以把交易系统产生的信号和真实账户联系起来,这样连接以便于能追踪和管理你的某个时段的开仓部位,提交的订单和止损单。
什么是智能交易系统.它是一个用特殊的MetaQuotes语言4(MQL4)编写的自动交易系统〔ATS〕,和特定的图表联系在一起。
智能交易系统不仅能通知交易商交易时机,而且还能自动执行交易账户上的交易,直接发送到交易效劳器。
和许多的IT系统一样,智能交易系统系统支持历史数据战略测试,图表上表示的登入/登出点。
而且,智能交易系统的可执行码分别存储于源文件和加密的执行文件中-这种安排保证了交易商所使用的逻辑隐藏〔如有必要的话〕,而不会泄密。
编写自己的智能交易系统软件也非常容易:
尝试一下吧!
不需要是专业编程高手,你只需要学会使用非常简单的语言-MQL4语言。
即使用户不能自行编写智能交易系统规那么,但是他需要熟悉近的编程技能,不过很可能不需一个小时他便掌握了这些规那么并能编写程序。
无数的交易商为MetaStock和TradeStation软件开发了多种多样的交易战略。
其中多数均被翻译成
MQL4语言,这就使得用户可以把前期累计的经历并合到里面去。
有些即学即用智能交易系统版本可以从本页下载。
MultiBankTrader软件将智能交易系统在程序的根目录/Experts子目录里保存为*.MQ4(sourcetext)和*.EX4(可执行码)文件。
交易商可以无限量地保存智能交易系统数据,这些数据可以通过导航条窗口容易地加以管理。
创立自定义智能交易系统数据的程序以及将数据和交易终端连接在MultiBankTrader用户指南里有详细的描述。
MetaQuotes4语言是用来编写自定义智能交易系统软件,以便使交易程序管理自动化以及执行交易商自己的交易策略。
MetaQuotes4语言易学、易用、易创立。
MetaQuotes4语言包括相当数量的变量,用来控制当前和前期的报价、主要的算术和逻辑运算和特征,主要的置指标和用来开启和控制头寸的命令。
在语法上,该语言和由TradeStation技术开发的简易语言相似,但是它有其自身的一些具体特征。
程序代码是用MetaEditor4编辑器编写的,它能够用不同的色彩集中反映MQL4语言的不同构造,因此,有助于用户熟悉专家系统的文本。
注解开场于//符号〔双斜线〕。
注解也可以用"斜线-星号〞-"星号
-斜线〞组合(/*[注解]*/,就像在"C"编程语言一样)。
设定和控制操作战略,交易商保存一份日志文件,存储产生的信号信息、变量输出和已执行交易的结果。
智能交易系统日志保存在MultiBankTrader目录下/logs/YYYYMMDD.log文件里。
当前的日志可以从下方的"终端〞窗口〔日志标签〕直接进入。
进入MQL4语言的目录系统,要么按目录按钮或从工具菜单翻开MetaQuotes语言词典窗口操作。
这个短小的手册包含分类、运算、存储词语等功能,使得用户对该语言所用到的每个元素都有所了解。
1.主要语言构造
像其他任何语言一样,MQL4有一套构成根本构造的主要组成元素。
这些组成元素以一种特殊的方式组合排列的,以便代表适当的述和表达。
语言的主要对象就是数据,包括三种类型:
数字、逻辑和排列。
所有的数值均采用双格式,逻辑数据可能包括真值和假值。
排列就是用省略号标注的一系列字符。
字符串也叫做文本串。
数据可以包含在适当类型的变量之中,或直接由程序的源文本表现出来。
一个MetaQuotes语言述指一个完整的用法说明。
述可以包括保存字、运算符号、数据、变量、表达式或标点符号,而且总是以分号结尾。
保存字指具有特定或特别意义的预先设定的词语。
运算符号指在数据、变量和〔或〕表达式中特定的具体运算符号。
变量是用来限制数字、排列或逻辑数据的。
表达式指保存字、变量、数据和运算符号的组合,因为它们具有语言的3中类型〔保存字、变量、数据〕中的任一价值。
标点符号用来代表表达式,界定参数,区分词语或重新排列计算顺序。
2.标点符号
字符
名称
描述
;
分号
完毕MetaQuotes4语言指令
()
圆括号
对表达式的值进展分组,改变计算顺序。
标注函数参数并启动变量描述表达式
标注变量的初始值并在变量描述区排列组合
逗号
提取函数值时,对参数进展区分在变量描述区对变量进展区分在描述排列长度时对数字进展区分区分进入排列元素的指标
:
冒号
用在变量描述区,启动变量列表
""
引号
标注一个文本〔字〕串。
[]
方括号
标注数字,确定排列长度标注进入某个特殊排列元素的数字〔指数〕标注进入历史数据的期间数字
{}
波形括号
充当运算括号。
可以用来代替begin...end。
将指令系列隔离成块。
/**/
注解括号
标注注解
//
双斜线
明确说明单串注解的开场
3.运算符号
运算符号分成5组:
分配符号、字串符号、数学运算符号、相关符号和逻辑符号。
3.1.分配符号
分配符号'='〔等号〕是用来将具体数值〔数字、排列或逻辑,视变量类型而定〕分配到变量中。
分配值可以是表达式的结果。
比方:
变量:
Counter(0);
...
Counter=Counter+1;结果,反向变量取值为1。
变量值也可以分配来对元素进展排列。
3.2.字串符号
操作文本串,只有一个运算符可以用上:
'+'〔加号〕。
它是用来连接两个字串的。
比方:
变量:
字串("");
...
字串="some_"+"text";
结果,字串变量包含"some_text〞这样的文本串,允许将字串与数字和逻辑值结合起来。
在后面的这个例子里,数字及或逻辑值在结合前,应转化为字串类型。
比方:
String="string"+1;
因此,字串变量将包含"string1"的文本串。
操作数不仅可以是数值,也可以是相应的含有这样数值类型的变量,以及表达式,经执行后,便产生这样的数值。
3.3.数学符号
4种主要的数学运算:
加法-'+'〔加号〕、减法-'-'〔减号〕、乘法-'*'〔星号〕、除法-'/'〔斜线〕,都用在计算数值的数学表达式里。
数学表达式的例子:
(Ask+Bid)/2,High[1]+20*Point
3.4.相关符号
相关符号用来对同种类型的两个数值进展比较。
第一个数值和第二个数值进展比较,产生逻辑值"真值〞或"假值〞,"小于〞-'<'〔左小于号〕,"大于〞-'>'〔右小于号〕;"等于〞-'='〔等号〕;"不等于〞-'<>';"小于或等于〞-'<=';"大于或等于〞-'>='。
由相关表达式而取得的逻辑值用在MetaQuotesII语言的控制构造里。
比方:
ifFreeMargin<1000thenexit;这个字串按词典顺序进展比较,即,"aaa"字串被认为小于字串"zzz"。
当逻辑值进展比较时,我们应该牢记:
"True〞的逻辑值的数值为1,而"False〞的逻辑值的数值为"0〞。
3.5.逻辑符号
逻辑符号使用户能够将逻辑值结合起来。
逻辑OR-'|'〔垂直线或竖杠〕;逻辑AND-'&'〔"和〞符号〕。
逻辑符号有相应的保存字OR,AND,NOT。
比方:
IfFreeMargin>100andFreeMargin<1000thenprint("Freemarginis",FreeMargin);注意:
当OR和AND运算符号是双值时,即它们有两个值进展运算,NOT运算符号是单值,即它之适用于单值。
比方:
Variable:
Condition1(True);
...
Condition1=FreeMargin>=1000;IfnotCondition1thenexit;
下面是逻辑运算符号的结果表:
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.固定字
MetaQuotes4语言使用下面的几组固定字。
1.逻辑符号。
AND,NOT,OR.
2.MQL4语言指令。
Array,Begin,Break,Continue,Define,Downto,Else,End,Exit,For,If,Input,Then,To,
Variable,While。
界定语言指令构造的固定字也叫做关键字。
3.置函数。
Abs,Acame,AccountName,Alert,Ceil,CloseOrder,ment,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.预先设定交易终端变量。
Acum,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_ISSION,VAL_MENT,VAL_LOTS,VAL_OPENPRICE,VAL_OPENTIME,VAL_PROFIT,VAL_STOPLOSS,VAL_SWAP,VAL_SYMBOL,VAL_TAKEPROFIT,VAL_TICKET,VAL_TYPE.
实际上,上述固定字为宏记录器,即语法分析程序用数值取而代之。
宏记录器的引入简化了编写用户功能要求的程序:
更加方便、无关联的重要词语可以用来替代一些函数参数值。
同样可以用于色彩名称。
7.色彩。
AliceBlue,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.智能交易系统向导
智能交易系统向导提示MQL4允许编写智能交易系统、自编指标、自编脚本和从模板中进展编辑
预先设定参数或变量的名称,将会自动在文本编辑栏中出现参数框架:
4.2.MetaQuotes4语言的指令构造
4.2.1.变量宣告和语句
在计算过程中保存临时数据要求使用变量。
变量在本程序的开头局部就用保存字、变量、排列和定义进展了表达。
他允许使用这些词语的负数形式,即"Variables,ArraysandDefines〞。
这些词中间总有一个开场变量的宣告表达。
这些词语的差异如下:
"variable"语句简单变量,"array"语句排列,"define"语句附加用户定义的变量,类似于预先界定的用户变量,均可以通过设置对话框进展修改,即从外部修改。
然而,又不像预先界定的变量,用户变量可以在程序部的计算过程中进展更改。
变量宣告语法:
变量:
名称〔初期值〕;这里名称就是变量的名字;"初期值〞就是变量的起初值。
初期值对变量的类型
-数字、字串或逻辑值进展界定。
一个数字变量宣告的例子:
Variable:
Counter(0);
一个字串变量宣告的例子:
Variable:
String1("任意字串");
一个逻辑变量宣告的例子:
Variable:
MyCondition(false);
数组声明语法:
Array:
ArrayName[Arraylength](初始值);其中,数组长度有一个或假设干〔多达4〕个数字-数字-number[,number[,number[,number]]].
在MetaQuotes4语言里,数组可能是1-,2-,3-,4-个元素长度,一般情况下,数组就是一组可以用同一个名称查找到的、并按照相继成行定位数组且给定了数组元素的序列号〔数〕的变量。
数组方便于对同样类型的数据排序。
数组的一个典型例子就是交易终端的历史数据,比方,收盘、开盘、高点位、低点位、交易量。
这些数据作为单一元素数组的。
比方,Close[5]指后退5个交易期间的收盘值。
两个元素的数组可能是一个简单表格,其中第一个分量为行而第二个分量那么为列。
Array:
MyTable[10,5](0);//一个10行5列的表格。
...
print(MyTable[2,4]);//打印第二行的第4个元素
数组可能包括任何类型的数值-数字、字串或逻辑值,但是应该为同一类型,其中的初期值在数组被宣告时为特定的。
附加用户定义变量宣告语法:
定义:
名称〔初期数〕;其中名称为变量名称;初期数为变量起初的数字值。
应该注意,附加用户定义变量可能只为数字类型。
如上所述,用户定义变量可以在程序的计算过程中进展修改。
这些修改只能运用到智能交易系统的当前时段,直到特殊的智能交易系统从图表中删除或客户终端的操作完毕。
当新的智能交易系统时段启动时,用户定义变量值将重新初始化。
4.2.2.退出语句
退出报告中断智能系统软件的操作。
也就是所谓的预先设定的程序终止。
4.2.3.IF-THEN条件语句
If-Then条件语句使得控制智能交易系统指令的执行顺序得以可能。
该语句可能有不同的方式编写:
ifConditionthenStatement;orifConditionthenbegin
Statement;Statement;
...
end;其中,条件为一个逻辑表达式,取值为True或False;
"Statement"指MetaQuotesII语言中的任何指令。
符号括号Begin–End可能被波形括号{}所替代。
条件语句可能被用在对程序进展分支。
为到达此目的,另一个关键字Else要用上。
语法:
ifConditionthenStatement1elseStatement2;orifConditionthenbegin
Statement;Statement;
...
endelse
Statement;Statement;
...
end;orifConditionthenbegin
Statement;Statement;...
endelseStatement2;orifConditionthenStatement1else
Statement;
Statement;
...
end;可以使用嵌套式的条件语句。
一般说来,语句可能由MetaQuotesII语言的任何合法指令表示,除非变量宣告,因为严格来说,变量宣告并不是一个可执行语句。
4.2.4.WHILE循环
WHILE循环确保在循环条件有效时,包含在循环主体中的语句的屡次执行。
一个循环可以用Break语句提前终止。
迭代可以通过使用Continue语句停顿。
这个语句造成循环的下一个迭代开场,即Continue后面的语句直到循环主体完毕在本迭代中不得执行。
在条件语句中用Break和Continue是合理的。
语法:
whileConditionbeginStatement;[break;][continue;]
...
end;其中,条件是循环执行条件-在每个循环迭代之前计算出的一个逻辑表达式,取值为True或False;
语句是MetaQuotes4语言的任何指令。
符号括号Begin–End表示循环主体,可以被波形括号{}替代。
"BreakandContinue〞描述也不是强制性的。
Example:
Counter=1;whileCounter<=Barsbeginprint(Close[Counter-1]);Counter=Counter+1;
end;这个例子说明一个将要执行的循环,基准次数,或者,如果基准=0,而且循环就不止一次。
4.2.5.For循环
For循环确保在循环主体中所包含的具体次数的语句执行。
语法:
forNumberVariable=InitialValueto|downtoLimitValuebegin
Statement;[break;][continue;]
...
end;其中数字变量就是在每次