5.2.2 多张交易单平仓

5.2.2 多张交易单平仓

更多时候,我们需要把同类型的多张交易单平仓。我们结合交易单回路和平仓程序,一次平仓多张交易单。此功能是将expert advisor的所有市价买单平仓:

请注意:我们是以void(无效)作为功能数据类型的。我们已确定此功能无有用数据可返回,因此在功能中不要求return操作。

你会认出交易单回路代码的for回路和OrderSelect()功能。我们会进行回路通过交易单库,并査看每张单是否需要平仓。如果目前的交易单是以OP_BUY表示的市价买单,并符合图表符号和自定义数字自变量,我们就会把交易单平仓。

我们调用OrderTicket()功能来获取目前的交易单单号。从这里开始,我们的代码与前面各章的市场买单平仓代码是相同的。请注意最后那个语句:Counter--(计数器),如果交易单顺利平仓,Counter变数则会减“1”。

我们之前有解释过,交易单平仓时,所有后续交易单的指数都会减“1”。交易单平仓后,若没有减去计数器变量,随后的交易单就会被跳过。

交易单从旧到新依序进行回路通过,背后有很好的理由:依据2009年生效的NFA规定,美国经纪商必须依下单顺序将同个商品符号的多张交易单平仓。此即所谓的FIFO(先进先出法)。交易单从旧到新依序进行回路通过,确保我们在平仓交易单时遵守FIFO。

使用上面的代码平仓市价卖单,只需把交易单类型变更为OP_SELL和ClosePrice至符号的卖价。附录D中可检视卖单平仓功能源代码。

我们来检查平仓多张挂单的代码。此例会将所有停损买单平仓。此代码和上述平仓市价买单代码之区别在于,我们指定OP_BUYSTOP作为交易单类型,并以OrderDelete()平仓此单。

此代码适用于所有挂单类型,只要将交易单类型比对改成你想平仓的交易单类型即可。附录D中可检视所有挂单的平仓功能源代码。