5.1.3 交易单回路

5.1.3 交易单回路

此为我们用来进行回路通过未平仓交易单库源代码:


我们会把Counter( 计数器)的值设为"0"并迭代回路,只要Counter小于等于OrdersTotal( )的值减"1"。每次迭代回路后,Counter就会加"1"。

OrdersTotal( )是返回目前开仓单数的功能。我们为何要把OrdersTotal( )的值减"1",让我们从交易单库是如何运作中了解。

交易单库内含终端机中目前所有未平仓的交易单,包括手动以及expert advisor所下的单。交易单指数从零开始编号。如有一张单未平,指数为"0"。第二张单未平时,指数为"1"。如有第三张单未平,指数为"2",以此类推。指数"0"是最旧的单,指数"2"是最新的单。

OrdersTotal( )会返回目前未平的单数。在上述的例子中,我们有三张单未平仓。但由于交易单指数从"0"开始,我们希望计数器变量最多算到"2"。Counter的值必须对应我们的交易单指数,这就是为什么我们必须把OrdesTotal( )减"1" 。交易单库中的单平仓时,库中任何较新的单的指数都会递减。例如,如指数为"0"的交易单平仓了,那么指数"1"的交易单会成为指数"0"的交易单,而指数"2"的交易单会成为指数"1"的交易单。这在交易单平仓时是相当重要的,我们下面会介绍更多的详情。

返回交易单回路:OrderSelect( )语句使用Counter变量作为交易单部位的指数。如上面所解释的,我们透过交易单库方式,从最旧的到最新的单依序递增。SELECT_BY_POS参数指出,在交易单库中,我们将依部位而非依单号选择交易
单的。

对于这个回路的首次迭代,Counter 会等于"0",且我们会以OrderSelect( )选择交易单库中最旧的单。然后,可以OrderTicket( )或OrderStopLoss( )等功能检查交易单信息,进行必要的修改或平仓。