3.1 修改交易单

3.1 修改交易单


3.1.1 修改获利价、停损价、挂单价和到期时间

下单后,可用OrderModify( )功能修改获利、停损、挂单价或到期时间。要使用OrderModify ( )功能,须提供欲修改的交易单号。OrderModify( )功能的语法如下:

参数说明:

Ticket 单号一一欲修改的交易单号。

Price 价格一一新的挂单价。

TakePrice 获利一一新的获利价。

Expiration 到期一一新的挂单到期时间。

Arrow 箭头一一可选箭头颜色来分辨修改过的交易单。如未选择,则不会显示箭头。

交易单若修改顺利, OrderModify( )会返回真( true) 的布尔值;反之为假(false) 。修改订单时,必须确保传递的函数的值是有效的。例如: 该单必须是已成交的,我们不能修改一个平仓单。当修改预挂单的价格参数时,该单必须达到订单价格。修改后的订单价格也不能太接近目前的买价或卖价。我们也应该进行检查,以确保止损和停利是有效的。为此,我们可以使用价格确认程序,这个将在本章后面介绍。

如果我们不修改特定的参数,就必须通过原始值的OrderModify( )函数。例如,只是修改了止损挂单,那么就必须获取当前的订单价格和利润,可以使用OrderSelect ( )函数,并且将这些值传递至OrderModify( )函数。

如果不指定变量值来尝试修改订单,将得到一个错误: ”no result“ 。这时验证该代码为什么以不变的值传给该函数。除此之外的错误是可忽略不计的。

3.1.2 为现有的交易单设置停损与获利参数

首先,要确认交易单已正确下单。可用检查OrderSend ( )功能的返回值进行确认,也就是刚才下单的单号。如因错误条件而未下单,单号等于" -1" 。

接着,用OrderSelect ( )功能获取刚下单的信息。传递固定值至OrderModify( )功能时,使用OrderOpenPrice ( )、OrderTakeProfit ( )、OrderStopLoss ( )以及选项OrderExpiration ( )参数。最后,用OrderModify( )设置交易单的停损与获利参数。

OrderSend ( )功能除了用"0" 作为停损与获利参数外,与前例完全相同。零值表示交易单未设停损与获利。BuyTicket 变量储存交易单的单号。

用证语句检查BuyTicket 号码是否有效(即大于零) 。如有效,以BuyTicket 号码调用OrderSelect ( )功能。以OrderOpenPrice ( )顿取交易单的入单价,并将其指定为OpenPrice 变数。

接着,以刚才下单的入单价计算停损与获利。先查看停损与获利的外部变量是否都大于零。若是,计算新的停损价或获利价。

最后,调用OrderModify( )功能来设此单的停损与获利。先检查并确保BuyStopLoss或BuyTakeProfit 的变数皆为非零。如试图以固定值修改交易单, OrderModi句( )功能会显示错误代码"1" 。

OrderModify( )的第一个参数是BuyTicket 号码,也可以用OrderTicket ( ) 。第二个参数是新的交易单价。由于不修改交易单价,以OrderOpenPrice ( )功能代表交易单价不变。

请记住: 我们仅能修改挂单价。因为无法变更市价单价,所以要修改市价单,任何值都能当汇价参数。然而,我们无法假设会一直修改市价单,因此永远都用OrderOpenPrice ( ) 。

BuyStopLoss 和BuyTakeProfit 变量会把变更的停损值与获利值传送至OrderModify( )功能。如计划为挂单设置到期时间,可以OrderExpiration ( )作为固定的到期参数,否则就用"0" 。

虽然以此方式设置市价单的停损与获利会多增加一些步骤,但我们仍建议你在expert advisor 中采用,以确保与所有经纪商兼容。此方式还可让我们准确地设置停损价与获利价,免受滑价影响。