OrderSendAsync()函数 - 页 3

 

技术信息。将有趣的语句收集到一个主题中。

sergeev:

Yedelkin:
哪个账户属性将负责执行队列中同时订单的限制?是否有可能以编程方式找出这个数字?

OrderSendAsync= false函数的 结果将只是

以此为指导

 
Rosh:

饶有兴趣地重读了这个话题,甚至在实践中进行了测试,在这里我发现了自动交易的公然歧视。

以下是手动平仓 的记录:(可理解的时间顺序从下到上)。

2012.04.26 22:32:05     Trades  '686934': deal #9256820 sell 0.02 EURUSD at 1.32391 done (based on order #10091825)
2012.04.26 22:32:05     Trades  '686934': order #10091825 sell 0.02 / 0.02 EURUSD at 1.32391 done
2012.04.26 22:32:05     Trades  '686934': accepted instant sell 0.02 EURUSD at 1.32391
2012.04.26 22:32:04     Trades  '686934': instant sell 0.02 EURUSD at 1.32391

我们在这里看到的是:订单被发送,订单被接受,一个票据被分配给订单,最后订单被执行(可能有一些解释上的转变,但也就这样了)。一切都是经典。

唯一奇怪的是,Trades事件肯定知道(在终端内)它是由哪个类别触发的,以及哪个顺序(对于最后两个类别);否则就不可能输出这样的评论,程序员必须重新发明轮子来获得这些信息。而OrderSendAsync函数 的情况完全没有增加任何简单性。

然而,我们应该注意到,订单的执行速度已经提高。现在我们没有时间注意到订单被放在队列中,它已经被执行了。


所以我们有一包订单,每个订单理论上有4个交易,在每个交易中我们需要控制每个订单。

因此,我们有4*Number_Order*Number_Order 控制点,即10个订单有400个,100个有40000个。上帝保佑,任何订单的交易量都少于4,那么整个控制逻辑就会崩溃,因为在发送第二个订单之前的等待(如果第一个请求没有被执行)正好发生在4号。

 

你已经向服务器发送了一叠交易指令

对于每个订单,你是否需要保持单独的执行检查?那我们要等多久才能得到答复?

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Типы торговых операций - Документация по MQL5
 
joo:

每个订单是否都要单独监测?


那我要等多久才能得到答复?

各个经纪人的情况各不相同。如果是STP,那更多的是其流动性提供者的问题。
 
sergeev:

是的

他们对不同的经纪人没有相同的功能。如果是STP,那么对他们的流动资金提供者来说,这更是一个问题。

不,这都是由咖啡渣猜出来的。 当你手动打开窗口时,你按下购买,等待重新报价 或执行,按确定,你就完成了。

当你在自动模式下打开时,也应该有一个参考点,你必须从这个参考点发出第二个请求,否则一切正常。

SZS加在上面的帖子里,重读。

 
Urain:

不,这都是猜测,当你手动打开一个窗口,按下购买,等待重新报价或执行,按下确定,你就完成了。

没有。当返回代码为DONE(10009)时就是这种情况。

但也有经纪人将你的交易转给供应商。而在这种情况下,他们会立即返回给你PLACED(10008)。顺便说一下,如果是市场订单,这个回复中就没有交易单。 只有订单单

而在OrderSendAsync的情况下,甚至不会有一张订单的票。

在自动模式下,应该是参考点,你想从这个参考点发送第二个请求,否则一切正常。

那么,即使是在MT4上,重新报价的参考点是什么?你不会做一个无休止的循环,等待删除或打开一个订单。

所有的东西都是勾选的,有对保存状态的检查,等等。

Документация по MQL5: Торговые функции / OrderGetTicket
Документация по MQL5: Торговые функции / OrderGetTicket
  • www.mql5.com
Торговые функции / OrderGetTicket - Документация по MQL5
 

尝试运行OrderSendAsync()函数

//+------------------------------------------------------------------+
//|                                               OrderSendAsync.mq5 |
//+------------------------------------------------------------------+
MqlTradeResult  res={0};
MqlTradeRequest req={0};
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   req.action=TRADE_ACTION_PENDING;
   req.symbol=_Symbol;
   req.volume=1.0;
   req.price=3.0;
   req.type=ORDER_TYPE_BUY_STOP;
   req.type_filling=ORDER_FILLING_RETURN;
   switch(OrderSendAsync(req,res))
     {
      case  true:
         Print("retcode=",res.retcode,", order=",res.order,", deal=",res.deal);
         break;
      default: Print("Неудача при отправке запроса функцией OrderSendAsync()");
     }
  }

它的回应是

2012.05.02 21:12:33 OrderSendAsync (USDCHF,M1) retcode=10008, order=0, deal=0

一个快速的问题出现了:当使用OrderSendAsync()函数发送交易请求 时,如果我们甚至不知道订单票据,我们打算如何追踪它的命运?该意见必须由经纪人填写。

 
异步模式是为批量输入订单而设计的,但不适合单笔交易。对于单个事务,最好使用同步模式--一切都将以相同的速度执行,并提供全面的服务。

追踪OnTrade中的异步交易的执行情况。是的,这是一个更复杂的路径,但这是异步的代价。
 
Renat:
异步模式是为批量输入订单而设计的,但不适合单笔交易。对于单个事务来说,最好使用同步模式--一切都将以相同的速度和全面的服务来执行。

追踪OnTrade中的异步交易的执行情况。是的,这是个更复杂的方法,但这是异步的代价。
好吧,让我澄清一个问题:在大规模批量发送订单的过程中,有人要如何跟踪五百个交易请求 的命运?由于任何批量发送的订单都是由大量的单笔交易组成的,大家会不会使用比较以前和现在的历史状态的原则?没有其他的方法吗?
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура торгового запроса - Документация по MQL5
 
理解的根源在于,异步进程
1)不保证响应的及时性,甚至不保证响应的可用性
2)明确要求开发商单独排队操作

换句话说,我们必须生成一个订单清单,然后在OnTrade中检查和填补这些订单。当然,这是很痛苦的。

就我们而言,我们可以透明地维护异步队列,用答案填充它们,并为交易者提供方便的函数,以检查和检索队列中已处理的条目。你可以在OnTrade中异步检查队列,也可以在发送一批订单后立即在循环中进行轮询,从而同步检查。

我们会考虑这样的机制--这将使EA开发者的生活更轻松,因为他们可以解除日常工作。