4.固定字
MetaQuotes 4 语言使用下面的几组固定字。
1. 逻辑符号。
AND, NOT, OR.
2. MQL 4语言指令。
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. 色彩。
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. 智能交易系统向导
智能交易系统向导提示MQL 4允许编写智能交易系统、自编指标、自编脚本和从模板中进行编辑
预先设定参数或变量的名称,将会自动在文本编辑栏中出现参数框架。
4.2. MetaQuotes 4 语言的指令结构
4.2.1. 变量宣告和语句
在计算过程中保存临时数据要求使用变量。变量在本程序的开头部分就用保留字、变量、排列和定义进行了叙述。他允许使用这些词语的负数形式,即“ Variables, Arrays and Defines”。 这些词中间总有一个开始变量的宣告叙述。这些词语的差别如下:"variable" 语句简单变量,"array"语句排列, "define"语句附加用户定义的变量,类似于预先界定的用户变量,均可以通过设置对话框进行修改,即从外部修改。然而,又不像预先界定的变量,用户变量可以在程序内部的计算过程中进行更改。
变量宣告语法:
变量:名称(初期值);这里名称就是变量的名字;“初期值”就是变量的起初值。初期值对变量的类型-数字、字串或逻辑值进行界定。
一个数字变量宣告的例子:
Variable : Counter( 0 );
一个字串变量宣告的例子:
Variable : String1( "任意字串" );
一个逻辑变量宣告的例子:
Variable : MyCondition( false );
数组声明语法:
Array : ArrayName[Array length]( 初始值 );其中,数组长度有一个或若干(多达4)个数字-数字 -number[, number [, number [, number]]].
在MetaQuotes 4语言里,数组可能是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条件语句使得控制智能交易系统指令的执行顺序得以可能。该语句可能有不同的方式编写:
if Condition then Statement;or
if Condition then begin
Statement;
Statement;
...
end;其中,条件为一个逻辑表达式,取值为True 或 False;
"Statement" 指MetaQuotes II语言中的任何指令。符号括号Begin – End可能被波形括号{}所替代。
条件语句可能被用在对程序进行分支。为达到此目的,另一个关键字Else要用上。语法:
if Condition then Statement1 else Statement2;or
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;
...
end;可以使用嵌套式的条件语句。一般说来,语句可能由MetaQuotes II语言的任何合法指令表示,除非变量宣告,因为严格来说,变量宣告并不是一个可执行语句。
4.2.4. WHILE循环
WHILE循环确保在循环条件有效时,包含在循环主体中的语句的多次执行。一个循环可以用Break语句提前终止。迭代可以通过使用Continue语句停止。这个语句造成循环的下一个迭代开始,即Continue后面的语句直到循环主体结束在本迭代中不得执行。在条件语句中用Break和 Continue是合理的。语法:
while Condition begin
Statement;
[break;][continue;]
...
end;其中,条件是循环执行条件-在每个循环迭代之前计算出的一个逻辑表达式,取值为True 或 False;
语句是MetaQuotes 4语言的任何指令。
符号括号Begin – End表示循环主体,可以被波形括号{ }替代。
“Break and Continue”描述也不是强制性的。
Example:
Counter = 1;
while Counter <= Bars begin
print( Close[ Counter - 1 ] );
Counter = Counter + 1;
end;这个例子说明一个将要执行的循环,基准次数,或者,如果基准=0,而且循环就不止一次。
4.2.5. For 循环
For循环确保在循环主体中所包含的具体次数的语句执行。语法:
for NumberVariable = InitialValue to|downto LimitValue begin
Statement;
[break;][continue;]
...
end; 其中数字变量就是在每次迭代之后循环要么增加或者减少到1的循环变量 (视使用关键字To 或 Down to而定);
初期值指循环变量的起初数值。
语句指MetaQuotes 4 语言的任何指令。
To or Downto确定循环变量增加到1(To)或者减少到1(Downto);
限值是循环变量的边际数值。
操作符brackets Begin –End表示循环主体,可以被波形括号{}取而代之。
Example: 比如:
for Counter = 1 to 10 begin
if Counter > Bars then break;
print( Close[ Counter ] );
end; 这个例子说明一个可能被执行10次的环。但是,若基准值小于10, 循环就会提前终止,也就是说循环执行BARS次。
4.2.6. BREAK中断语句
中断语句确保一个For循环或一个While循环早点终止。前例不仅说明循环执行,也说明了中断语句的使用。“Break”语句不仅用于循环主体之外。循环是嵌套式的,中断语句中离其最近的循环。换言之,中断内部循环的语句并没中断外部循环。
4.2.7. CONTINUE继续语句
CONTINUE继续语句提前终止循环的迭代,并从循环主体开始下一个迭代。换句话说,在Continue之后语句被忽略。比如:
for Counter = 1 to 10 begin
...
if Counter > Bars then continue;
print( Close[ Counter ] );
...
end;这个例子说明一个将被执行了差不多10次的循环。但收盘值(counter)被打印不会比基准次数多。"..."代表MetaQuotes4 语言的其他语句。
4.3.交易中断的预选界定变量
为了最大的方便用户,交易中断的一些变量可以从智能系统输入。
应注意到,Close, Open, High, Low, Volume,Time为历史数据数组(seriesarrays),在上个交易期间允许进入这些数据。
4.4.内置函数
MetaQuotes4语言提供许多功能,可用于多种多样的场合。这些包括技术指标、交易功能、时间功能、数学和三角函数功能、数据转换和输出函数,等。
语法:Abs函数 (n个表达式)
参数: 数值
语法: Alert(...)
参数的任何非零数都可能。
语法:Ceil( n个表达式 )
参数:数值
CloseOrder –收盘头寸(部位)
语法:收盘头寸(订单、单位、价格、滑动量、色彩)
Parameters: 参数:
price –优先收盘价
语法: Comment(...)
参数的任何非零数都可能。
语法: Cos( n分表达式 )
参数:数值
语法:DeleteOrder( 订单 )
参数: 订单-延迟部位的订单数
语法:
参数:数值
语法: Floor( n个表达式)
参数:数值
Highest – 返回期间特定数间的 Open, Low, High, Close or Volume(取决于“类型”参数)的最大值。
语法: Highest( 类型、beginbar、期间 )
Parameters: 参数:
Type 类型 – 一个返回变量,可能去下列数值: MODE_OPEN, MODE_LOW, MODE_HIGH,MODE_CLOSE, MODE_VOLUMEbeginbar –表示条形的转换,与当前条形有关,并从中取值。
periods期间 – 计算执行依据的期间数
Hour –返回在24小时期间内当前小时的序列数。
iADX -平均指导动作目录
语法:iADX( 期间、模式、转换)
参数:
period – 计算的期间数;
mode – 数据类型,可以取下列数值:MODE_MAIN(主要指标)、MODE_PLUSDI(line +DI),MODE_MINUSDI(line -DI).
shift – 与当前条形有关的转换 (后退期间数),为数据待取值的依据。
iATR - 平均间距的指标
语法:iATR( 期间、转换)
参数:
period – 计算期间数;
shift – 与当前条形(后退期间数)相关的转换,为数据待取值的依据。
平均移动收敛/发散指标(iBANDS –– 布林带指数
语法: iBANDS(期间,误差,模式,转换)
参数:
period – 计算的期间数;
deviation -误差;
mode – 可以取下列值: MODE_MAIN(主线、滑移)、 MODE_LOW(下边线),MODE_HIGH(上边线).
shift – 与当前条形(后退期间数)相关的转换,为数据待取值的依据。
语法: iCCI(期间、转换)
参数:
period – 计算的期间数
shift – 与当前条形(后退期间数)相关的转换,为数据待取值的依据。
语法: iMA( 期间、模式、转换)
参数:
period – 计算的期间数
mode – 计算模式,可以取下列值: MODE_SMA, MODE_EMA, MODE_WMA.
shift – 与当前条形(后退期间数)相关的转换,为数据待取值的依据。
iMACD -平均移动收敛/发散指标
语法: iMACD( fast_ema_period, slow_ema_period, signal_period,mode, shift )
参数:
fast_ema_period -计算’快’ 平均移动期间(通常12);
slow_ema_period - number of periods for calculation of the ’slow’moving average (usually 26);
signal_period计算’慢’ 平均移动期间(通常12);
mode 数据源,可以取下列值:MODE_MAIN (主要指标)、MODE_SIGNAL (信号列);
shift -与当前条形(后退期间数)相关的转换,为数据待取值的依据。
语法: iMFI( 期间、转换)
参数:
period – 计算期间数;
shift – 与当前条形(后退期间数)相关的转换,为数据待取值的依据。
iMOM – 动量指标
语法:iMOM( 期间、转换)
参数:
period – 计算期间数;
shift – 与当前条形(后退期间数)相关的转换,为数据待取值的依据。
iRSI – 相对强弱指标
语法:iRSI(期间、转换)
参数:
期间 – 计算期间数;
iSAR -抛物线
语法: iSAR(步骤,最大值,转换)
参数:
步骤-增量,通常是0.02;
最大值 – 最大值, 通常是0.02;
iSTO - "随机振荡"指标
语法: iSTO( %K期间、 %D期间、 慢、方法、模式、转换)
参数:
%Kperiod - %K线期间;
%Dperiod - %D线期间;
slowing – 慢值;
method – 计算方法,取下列值: MODE_SMA (简单平均)、MODE_EMA (指数值)、 MODE_WMA(权重值);
mode – 数据源,可以取下列值: MODE_MAIN (主指标线), MODE_SIGNAL (信号指标线);
shift -与当前条形(后退期间数)相关的转换,为数据待取值的依据。
语法:iWPR( 期间、转换)
参数:
期间 – 计算期间数;
shift – 与当前条形(后退期间数)相关的转换,为数据待取值的依据。
IsDemo – 如果智能交易系统系统在试用帐户运行,返回逻辑值,否则会返回错误值.
Log (-特定正数值的对数
语法:日志( n个表达式)
参数: 正数值
Lowest - 特定期间返回开仓,低,高,收盘或交易量最小值(依据"类型"参数而定)...returns
语法:最低点(类型、beginbar、 期间)
参数:
type – 可以取下列值: MODE_OPEN, MODE_LOW, MODE_HIGH, MODE_CLOSE,MODE_VOLUME
beginbar –表示条形的转换,与当前条形有关,并从中取值。
periods期间 – 计算执行依据的期间数
Minute –返回当前小时的分钟序列数。
Mod -返回代表着一个接着一个的数值的整数
语法:Mod( n个表达式1, n个表达式2)
参数: 数值1、数值2
语法:ModifyOrder( 订单、价格、止损、获利、色彩)
参数:
order – 开仓或延迟部位的数目或订单;
price – 新的价格 (仅适用于延迟部位!);
stoploss – 新的止损水平线;
takeprofit – 新的获利水平线;
color – 图表上象形图 的色彩
Month –返回当前月的续列号
语法:MoveObject( 名称、类型、时间、价格、 时间2、时间2)
参数:
name – 文本串形式的名称;
type – 对象类型,可以取下列值:OBJ_HLINE (水平线)、 OBJ_VLINE (垂直线), OBJ_TRENDLINE(趋势线)、 OBJ_SYMBOL (设定象形图)、 OBJ_TEXT (文本串);
time – 参照图表第一时间;
price -参照图表第一价格;
time2 -参照图表第二时间;
price2 -参照图表第二时间
语法: NumberToStr(数字、准确性)
参数:
number – 特定数值;
precision – 准确格式、十进位点数的数字
OrderValue – 返回订单特定价值的之一
语法:OrderValue(部位、模式)
参数:
position – 交易终端列表的订单头寸部位,从1开始;
mode – 返回数据类型,可以取下列值:VAL_TICKET (订单数), VAL_OPENTIME (定定开仓时间),VAL_TYPE (订单类型), VAL_LOTS (要求单位数目), VAL_SYMBOL (工具名称,以文本串的形式),VAL_OPENPRICE (开盘价), VAL_STOPLOSS (止损水平线), VAL_TAKEPROFIT (获利水平线),VAL_CLOSEPRICE (收盘价), VAL_COMISSION (委托交易量), VAL_SWAP(部位展期的展期费用数额), VAL_PROFIT (交易利润数), VAL_COMMENT (以文本串形式对特殊部位的注解),VAL_CLOSETIME (订单收盘时间)。
Ord –和OrderValue完全相同。
语法:Pow( nBaseExpression, nExponentExpression )
参数:数值1、数值2。
Print – 打印由用户在系统日志里界定的数据。
语法: Print(...)
参数的任何非零数均可能。
语法:PrintTrade( 部位 )
参数:部位 –在交易终端里已开仓部位数字
语法: Round( n个表达式)
参数: 一个数值
SetArrow –设定图表绘图标志
语法: SetArrow( 时间、价格、标志和色彩)
参数:
time -参照图表第一时间;
price -参照图表第一价格;
symbol -从Wingdings字体设定标志 的数值;
color -图表颜色
SetObjectText -指定文本串到特定的对象
语法: SetObjectText(称,文本,字体, 尺寸,颜色)
参数:
name – 对象名称;
text – 特定文本;
font – 字体命;
size – 字体大小;
color – 文本色彩.
SetOrder –用于开仓或设定延迟订单的主函数。
语法:SetOrder( 操作、单位、价格、滑动、止损、获利、色彩)
参数:
operation – 操作类型,可以取下列值:OP_BUY (开始购买部位), OP_SELL (开始出售部位),OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP (提交延迟订单);
lots – 单位数;
price – 交易优先收盘价;
slippage - OP_BUY 和OP_SELL操作的最大价格滑动;
stoploss – 止损水平线;
takeprofit – 获利水平线;
color – 当提取函数时,图表上箭头的色彩
语法:SetText( 时间、价格、字符串、色彩 )
参数:
time -参照图表第一时间;
price -参照图表第一价格;
string – 文本串;
color – 文本色彩
Sin -计算并返回代表弧度角度的数值
语法:Sin( n个表达式)
参数: 数值
语法:
参数: 正数值
语法:Srand( 时间)
参数: 正数值
Tan -计算并返回代表角度弧度的正切数值。
语法: Tan( n个表达式)
参数: 数值
TimeToStr – 返回带有"yyyy.mm.dd hh:mi"类型的文本串,由代表经过1970元月1日起的秒钟数的特定数值。
语法: TimeToStr( 时间)
参数: 正数值
联系客服