如何在MT5中正确使用OrderSend? - 页 6

 
Alexey Viktorov:

第一个EA意识到,在它的OrderSend 之后,历史记录还没有同步。他只是在等待同步化的事件。

但第二个专家顾问如何理解历史是否同步?

 
fxsaber:

第一个EA意识到,在它的OrderSend之后,历史记录还没有同步。他只是在等待同步化的事件。

但第二个专家顾问如何理解历史是否同步?

忘记历史。试着研究一下函数OnTradeTransaction()的 行为。

第一个专家顾问已经建仓,这个事件在OnTradeTransaction中处理,错误的订单被激活......这个事件在OnTradeTransaction中也被处理。

第二个专家顾问也会筛选出不属于自己的订单、头寸和交易。

我有2个EA在真实账户中工作。在其中一个中,位置魔术师将一张票分配到它应该附着的位置上。而你自己也明白,他们不是两个不同的魔术师......

我想你的名字是维克多?在调试中开始设置两个具有不同法师的头寸,并在OnTradeTransaction中追踪它们的结构。

 
Alexey Viktorov:

忘记历史。尝试研究OnTradeTransaction()函数的 行为。

第一个专家顾问下了一个头寸,OnTradeTransaction处理这个事件,"不是他们的 "被筛选出来,订单被激活......。OnTradeTransaction也会处理这个事件。

第二个专家顾问也会筛选出不属于自己的订单、头寸和交易。

我有2个EA在真实账户中工作。在其中一个中,位置魔术师将一张票分配到它应该附着的位置。而你自己也明白,他们不是两个不同的魔术师......

我想你的名字是维克多?在调试中开始设置两个具有不同法师的头寸,并在OnTradeTransaction中追踪它们的结构。

如果你仔细看我的日志,你可以看到

收到票据的速度比触发OnTradeTransaction的速度快,所以

足够了。

虽然,当然(在这种情况下)最好是使用马吉克。

而且(更好的是)使用OrderSendAsync - 没有错误,无论是在FOREX还是FORTS上。

 
prostotrader:

如果你仔细看我的日志,你可以看到。

收到票据的速度比OnTradeTransaction快,所以

足够了。

当然,(在这种情况下)使用魔术师会更好。

而且(目前)最好使用OrderSendAsync - 没有错误,无论是在FOREX还是FORTS上。

也许,这可能是这样的。但如果挂单被激活了呢?我们应该分析一下历史吗?环境同步速度的另一个问题?

总而言之,这是一个业余爱好者的游戏。最主要的是要让它发挥作用,不要太慢,避免...

 
Alexey Viktorov:

忘记历史。尝试研究OnTradeTransaction()的 行为。

在非同步的历史中,第二个是如何工作的?

这个问题不仅影响到MT5,而且还影响到四倍。

 
fxsaber:

在不同步的历史中,第二个是如何工作的?

这个问题不仅影响到MT5,也影响到四合院。

我越来越确定你的名字是维克多。我不会告诉任何人你过去的绰号。

你在很短的时间内就掌握了高于平均水平的编程,在我看来,甚至高于平均水平。但要把你从你的错误立场上移开是非常困难的。而现在你的编程知识水平比我高,我甚至不打算尝试。

忘记历史,请看OnTradeTransaction函数的 结构。

试着用语言解释一下,你如何在mql5中确定一个挂单被激活?

 
Alexey Viktorov:

我越来越确定你的名字是维克多。我不会告诉任何人你以前的绰号。

你在很短的时间内掌握了编程...

实际上,这是hrenfx的另一个转世。决定以一种新的方式来。
 
prostotrader:

如果你仔细看我的日志,你可以看到。

收到票据的速度比OnTradeTransaction快,所以

足够了。

当然,(在这种情况下)使用魔术师会更好。

而且(目前)最好使用OrderSendAsync - 没有错误,无论是在FOREX还是FORTS上。

那么OrderSendAsync() 的优势是什么?它不等待结果的回应。这意味着它必须在以后被抓住。目前还不清楚什么是优势。
 
prostotrader:

OrderSend()是一个绝对同步的函数--如果收到票据,一切都会执行。

下面是一个例子

已添加,这里是日志

https://www.mql5.com/ru/forum/38456/page85#comment_2888263

谢谢你!
 

关于交易、自动交易系统和交易策略测试的论坛

在没有开仓的情况下,我如何知道我的佣金?

fxsaber, 2016.11.08 20:30

#include <MT4Orders.mqh>

void OnStart()
{
  const int Ticket = OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, 0);
  
  OrderClose(Ticket, 0.3, SymbolInfoDouble(_Symbol, SYMBOL_BID), 0, clrNONE);

  Sleep(1000); // ждем обновления истории
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    Alert(OrderCommission());
}

我想这个例子可以说明问题。

如果你不做Sleep,你经常会遇到这样的情况:在OrderClose之后,历史记录还没有来得及更新,OrderCommission返回的值就像OrderClose还没有被完成。

请注意,这是一个脚本,不可能有Event-over。唯一的出路是一个愚蠢的睡眠。

如果你用SB重写这个脚本,什么也不会改变。