8.11 多笔订单
你可能想要在一个时间点下多笔订单,而该订单中有分别不同的停损点和停利点。有许多方法可以做到这点。
一种方法是简单地对每一笔想要开启的订单使用一个不同的OrderSend ( )语法,但是这种方法假设每次都计划下同样数量的单。
另一种方法是使用for 循环开启订单,这种方法可以调整每次下单的数量。可先加载停损价和获利价到数组中,然后在for 循环中递增该数组。
我们先定义三个停损和停利的外部变量。任何三个以上额外的订单将不会有停损或获利的设置。我们也加入一个外部变量,以调整要开启的订单数量。程序源代码如下:

下一步则是该数组计算停损价和获利价,并将我们所计算的价格加载到数组中:


该数组保存停损和获利价格( BuyTakeProfit 和BuyStopLoss) 。当使用该函数,其数组其内的程序代码就会替我们标明出来。数组指数从0 开始,并设定大小为3 ,我们的起始指数是0 ,最大指数是2 。
接着,我们用本书第四章所定义的CalcBuyStopLoss ( )及CalcBuyTakeProfit ( )函数计算停损价和获利价。将我们所计算出的停损值或获利值传到适当的数组元素。要注意:第一个数组指数是"0"; 而第三个数组指数是"2" 。
下列是要开启订单的for 循环:

Count 变量从"0" 开始,和我们的第一个数组相符合。循环次数(也就是下单数)由MaxOrders -1 决定。每以次重复循环,我们对停损及获利数组递增"1" 。
我们使用Ordlnt 变量在订单注释中递增订单总数。第一个订单注释将是"下单1" ,下一个将是"下单2" ,以此类推。OrderSend ( )函数使用Count 变量以选择相关的数组元素,以合适的停损值和获利值下单。
这只是处理多笔订单的一种方法,虽然它可能是最有效的,但其主要的缺点是只能计算有限数量订单的停损价和获利价。另有一种方法是,我们可以借明确定义一个数量来限制获利值和停损值,并可交易订单,且没有限制数量。源代码如下:


在上述范例中,首单的停损都是20 点,每增加一份订单将递增停损20 点。对于获利也是一样,所不同的是起始和递增皆为40 点。
我们将舍数组,而以for 循环计算停损和获利。源代码如下:

将StopLosslncr 或TakeProfitlncr 变数和Count 相乘,并和StopLossStart 或TakeProfitStart 值相加,以决定获利和停损水平点。对第一个订单,停损或获利水平将等于StopLossStart 或TakeProfitStart 。接着,我们使用本书第四章的函数计算订单的停损价和获利价。最后,我们用OrderSend ( )开启订单。循环将持续到MaxOrders所明确定义的下单数量被完全成交为止。这个方法允许我们使用MaxOrders变量明确定义我们想要的下单数量,并确保所开启的每个订单皆有停损和获利。