下载MetaTrader 5

ordersend()正在执行中,会不会导致重复下订单

要添加评论,请登录注册
zbj
144
zbj  
MT4  一个EA的 start()函数有50行, ordersend()函数在第20行。

当遇到一个信号时,  ordersend()正在执行中(因网络或交易商原因 ordersend没有立即执行成功) ,请问这时EA会怎样执行?

我的假设:当ordersend()正在执行中还未成功时,EA继续执行下一个语句(第21行),直到最后一个语句(第50行),然后从start函数第1行重新开始。

由于ordersend()还在执行中,系统判断没有订单,对同一个信号又重复下单了

请问我的假设是错的吗。 正确的EA 执行流程会是什么样的,请指点,谢谢。 
enbo lu
版主
1950
enbo lu  

 用GetLastError()获取未执行成功的原因,然后根据返回错误代码的不同,采取不同的处理方式。处理下单不仅仅是OrderSend()一句就OK的。。

比如,用循环下单直到返回成功再退出,思路:OrderSend() failed  - sleep() - RefreshRates() - OrderSend() ....

我认为对错误的处理以及在可接受的价格范围内确保成功下单,是下单模块必须具备的。

Xiangdong Guo
3812
Xiangdong Guo  
1648401654c:
MT4  一个EA的 start()函数有50行, ordersend()函数在第20行。

当遇到一个信号时,  ordersend()正在执行中(因网络或交易商原因 ordersend没有立即执行成功) ,请问这时EA会怎样执行?

我的假设:当ordersend()正在执行中还未成功时,EA继续执行下一个语句(第21行),直到最后一个语句(第50行),然后从start函数第1行重新开始。

由于ordersend()还在执行中,系统判断没有订单,对同一个信号又重复下单了

请问我的假设是错的吗。 正确的EA 执行流程会是什么样的,请指点,谢谢。 
记得哪篇文档里提过,EA 和 Script 都是独立线程,而在独立的线程中,交易函数都是阻塞型,即 ordersend() 未得到结果前,不会执行后续语句。
zbj
144
zbj  
tradelife:
记得哪篇文档里提过,EA 和 Script 都是独立线程,而在独立的线程中,交易函数都是阻塞型,即 ordersend() 未得到结果前,不会执行后续语句。我最近用EA实测了,确实是阻塞型的。
要添加评论,请登录注册