3.1.2 为现有的交易单设置停损与获利参数
首先,要确认交易单已正确下单。可用检查OrderSend()功能的返回值进行确认,也就是刚下单的单号。如因错误条件而未下单,单号等于“-1”。
接着,用OrderSelect()功能获取刚下单的信息。传递固定值至OrderModify()功能时,使用OrderOpenPrice()、OrderTakeProfit()、OrderStopLoss()以及选项功能OrderExpiration()。最后,用OrderModify()设置交易单的停损与获利参数。


OrderSend()功能除了用“0”作为停损与获利参数外,与前例完全相同。零值表示交易单未设停损与获利。BuyTicket变量储存交易单的单号。
用if语句检查BuyTicket号码是否有效(即大于零)。如有效,以BuyTicket号码调用OrderSelect()功能。以OrderOpenPrice()撷取交易单的入单价,并将其指定为OpenPrice变数。
接着,用刚才下单的人单价计算停损与获利。先查看停损与获利的外部变量 是否都大于零。若是,计算新的停损价或获利价。
最后,调用OrderModify()功能来设此单的停损与获利。先检查并确保BuyStopLoss或BuyTakeProfit的变数皆为非零。如试图以固定值修改交易单,OrderModify()功能会显示错误代码“1”。
OrderModify()的第一个参数是BuyTicket号码,也可以用OrderTicket()。第二个参数是新的交易单价。由于不修改交易单价,OrderOpenPrice()功能代表交易单价不变。
请记住:我们仅能修改挂单价。因为无法变更市价单价,所以要修改市价单,任何值都能当汇价参数。然而,我们无法假设会一直修改市价单,因此永远都用OrderOpenPrice()。
BuyStopLoss和BuyTakeProfit变量会把变更的停损值与获利值传送至OrderModify()功能。如计划为挂单设置到期时间,可以OrderExpiration()作为固定的到期参数,否则就用“0”。
虽然以此方式设置市价单的停损与获利会多增加一些步骤,但我们仍建议你在expert advisor中采用,以确保与所有经纪商兼容。此方式还可让我们准确地设置停损价与获利价,免受滑价影响。