MT4里的OrderSend和OrderClose容错问题

 
在MT4里,OrderSend和OrderClose是需要网络交互的,也就是说,下单和平仓指令需要发送到交易服务器进行执行,并通过网络返回结果的。那么,如果指令发送成功,也执行成功,但是结果返回时出现网络故障,OrderSend和OrderClose应该返回false,即执行失败吧,但是指令却执行成功了。这种情况在MT4的程序设计中有没有一些规范的容错机制和处理方式呢?谢谢!
 
Amy Liu:
在MT4里,OrderSend和OrderClose是需要网络交互的,也就是说,下单和平仓指令需要发送到交易服务器进行执行,并通过网络返回结果的。那么,如果指令发送成功,也执行成功,但是结果返回时出现网络故障,OrderSend和OrderClose应该返回false,即执行失败吧,但是指令却执行成功了。这种情况在MT4的程序设计中有没有一些规范的容错机制和处理方式呢?谢谢!
如果执行成功,将会返回成功信息(正整数或true值)。网络出现故障,这个信息可能无法返回到客户端。但不影响交易结果。另外服务器返回的出错日志可能不是最新的信息(没有及时刷新)。要了解实际交易结果,还是要通过帐户记录查询。在编写EA时,对这类交易故障和其他各种实际交易中出现的问题,要采取一些机智的手法进行处理。这就是为什么说一个EA程序作者本身应该是一个经验丰富的交易者。单纯的程序员我认为不适合做EA开发之类的工作,即便他是一个优秀的程序员。一个优秀的EA应该是出自一个交易和编程的双料高手。
 
Amy Liu:
在MT4里,OrderSend和OrderClose是需要网络交互的,也就是说,下单和平仓指令需要发送到交易服务器进行执行,并通过网络返回结果的。那么,如果指令发送成功,也执行成功,但是结果返回时出现网络故障,OrderSend和OrderClose应该返回false,即执行失败吧,但是指令却执行成功了。这种情况在MT4的程序设计中有没有一些规范的容错机制和处理方式呢?谢谢!

若要容错的话,不管返回结果如何,再到服务器上验证一次就好了。

如果恰好网络故障,就一直等到故障恢复再验证,直到结果确认。 

原因: