订单修改也是EA中常用的编程事项,移动止损、平均止盈、修正挂单等等,都是属于订单修改。那么能不能修改订单手数呢?最近就碰到有人问这个问题。
在mql4语言中修改订单是通过OrderModify()函数进行,我们看下它的函数构成就清楚哪些可以修改。
bool OrderModify
(
int ticket, //订单编号
double price, // 价格
double stoploss, //止损
double takeprofit, // 止盈
datetime expiration, //有效期
color arrow_color // 箭头颜色
);
下面来理解一下 OrderModify() 函数各参量的意思:
- ticket:订单编号,这是修改订单的重要参量,注意它不是赋值新的订单号,而是用需要修改的订单的订单号填充。通常用 OrderTicket(),如果指定修改某个单一的订单,那要先获取它的订单号;
- price:这个价格对于多单或空单,只能用原订单的OrderOpenPrice()填充,对于未成交的挂单可以用新的挂单价格填充;
- stoploss:不论是多单、空单,还是挂单,都可以用新的合理的止损价格进行修改;
- takeprofit:不论是多单、空单,还是挂单,都可以用新的合理的止盈价格进行修改;
- expiration:仅对挂单而言,可以修改新的有效期;
- arrow_color:可以设置箭头显示修改过的订单止损止盈位置。
从上面 OrderModify() 函数结构及各参量来看,没有手数OrderLots()修改项。所以在智能交易EA编程中是不能通过订单修改函数来修改手数的。对于未成交的挂单,如果要修改手数,可以先删除掉,然后用新的手数重新挂。如果是已经成交的多单或空单,只能通过OrderClose()函数来平仓部分手数,比如一手的单子,可以通过 OrderClose()函数先平仓0.5手。