MQL4语言教程应用与循环语法详解

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语句可以跳过本次迭代中剩余的语句,直接进入下一次循环。在条件语句中合理使用Break和Continue是很常见的做法。语法如下:

while Condition begin

Statement;

[break;][continue;]

...

end;其中,条件是在每次循环迭代前计算的逻辑表达式,结果为True或False;

语句是MetaQuotes 4语言中任意合法指令。

符号括号Begin–End用于表示循环主体,也可以用波形括号{ }替代。

“Break和Continue”并不是强制要求的。

示例:

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还是Downto;

InitialValue是循环变量的起始数值。

Statement是MetaQuotes 4语言中的任意合法指令。

To或Downto决定了循环变量是增加1(To)还是减少1(Downto);

LimitValue是循环变量的边界数值。

操作符brackets Begin–End用于表示循环主体,也可以使用波形括号{}代替。

Break和Continue语句并非强制性的。

示例:

for Counter = 1 to 10 begin

if Counter > Bars then break;

print( Close[ Counter ] );

end; 这个示例演示了一个可能会执行10次的循环。但如果基准值(Bars)小于10,循环会提前终止,也就是说循环实际执行BARS次。

4.2.6. BREAK中断语句

中断语句用于让For循环或While循环提前结束。前面的示例不仅展示了循环的执行,也展示了中断语句的用法。“Break”语句通常用在循环主体中。当循环嵌套时,Break语句只会终止离它最近的循环,也就是说,内部循环的中断不会影响外部循环。

4.2.7. CONTINUE继续语句

CONTINUE继续语句会提前终止当前迭代,并直接进入循环的下一次迭代。换句话说,Continue之后的语句会被跳过。示例:

for Counter = 1 to 10 begin

...

if Counter > Bars then continue;

print( Close[ Counter ] );

...

end;这个示例展示了循环可能执行约10次。但收盘值的打印次数不会超过基准次数。"..."代表MetaQuotes 4语言中的其他语句。

4.3. 交易中断的预选界定变量

为了方便用户使用,智能交易系统中的一些变量可以直接从输入中获取。

AccountNumber-账号(同义词:AccNum)

Ask –卖价(买方出价)

Balance – 交易账户的余额值

Bars – 图表上条形的数量,这是反映图表数据填充程度的重要变量。

Bid -买入价(卖方要价)

CloseCWG官网 –收盘价格

Credit –信用额度

Equity –账户净值,包含未实现利润

FreeMargin –交易账户的自由保证金,用于检查账户资金是否充足;

High –期间最高价位

Low -期间最低价位

Margin –用于支撑开仓部位的资金(保证金)

Open –开盘价

Point – 当前金融工具单点的价值(此时智能交易系统运行),比如,USD/JPY - 0.01, USD/CHF - 0.0001等。

PriceAsk –在市场观测窗口显示的当前卖价。

PriceBid -在市场观测窗口显示的当前买价。

PriceHigh – 当前24小时期间的最高买价。

PriceLow -当前24小时期间的最高卖价。

PriceTime -在市场观测窗口显示的当前时间。

Time – 价格图表上的条形时间的基准时间;

TotalProfit – 所有开仓部位的总未实现利润;

TotalTrades –开仓部位的总数以及交易中断上的延迟订单;

Volume – 交易量(期间交易的笔数)

需要注意的是,Close, Open, High, Low, Volume, Time属于历史数据数组(series arrays),允许访问上一个交易周期的数据。