5.1.3 交易单回路

5.1.3 交易单回路

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

我们会把Counter(计数器)的值设为“0”并迭代回路,只要Counter小于等于OrdereTotal()的值减“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()等功能检査交易单信息,进行必要的修改或平仓。