错误、漏洞、问题 - 页 2220

 
1861 - 无法在Alpari上打开一个演示。选择一个经纪人是不行的。
 
fxsaber:

在我看来,当一个订单在交易服务器上,但在终端上的同步OrderSend之后,就没有任何迹象了,这是一个错误。

我决定检查一下,当订单出现在系统中,但不在终端中时,这种幻象订单会持续多久。

// Советник отслеживает длительность ситуаций, когда ордер отсутствует среди текущих и исторических

#define  TOSTRING(A)  #A + " = " + (string)(A) + "\n"
#define  TOSTRING2(A) #A + " = " + EnumToString(A) + " (" + (string)(A) + ")\n"

bool OrderIsExist( const ulong &OrderTicket )
{
  return(OrderTicket ? OrderSelect(OrderTicket) || HistoryOrderSelect(OrderTicket) : true);
}

void OnTradeTransaction ( const MqlTradeTransaction &Trans, const MqlTradeRequest&, const MqlTradeResult& )
{
  static bool PrevIsExist = true;
  static ulong StartTime = 0;
  static ulong MaxInterval = 0;
  
  const ulong NowTime = GetMicrosecondCount();
  const bool IsExist = OrderIsExist(Trans.order);
    
  if (!IsExist)
  {
    Print(TOSTRING2(Trans.type) + TOSTRING(Trans.order) +
          TOSTRING(OrderSelect(Trans.order)) + TOSTRING(HistoryOrderSelect(Trans.order)));       
  
    if (PrevIsExist) 
      StartTime = NowTime;
  }
  else if (!PrevIsExist)
  {
    const ulong Interval = NowTime - StartTime;
    
    Print(TOSTRING(Interval) + TOSTRING2(Trans.type) + TOSTRING(Trans.order) +
          TOSTRING(OrderSelect(Trans.order)) + TOSTRING(HistoryOrderSelect(Trans.order)));       
    
    if (Interval > MaxInterval)
    {
      MaxInterval = Interval;
      
      Comment(TOSTRING(MaxInterval) + TOSTRING(Trans.order)); // mcs.
    }
  }
          
  PrevIsExist = IsExist;
}


其结果是

2018.06.21 00:10:31.047 Trans.type = TRADE_TRANSACTION_ORDER_DELETE (2)
2018.06.21 00:10:31.047 Trans.order = 2210967406
2018.06.21 00:10:31.047 OrderSelect(Trans.order) = false
2018.06.21 00:10:31.047 HistoryOrderSelect(Trans.order) = false
2018.06.21 00:10:31.047 
2018.06.21 00:10:31.080 Interval = 32643
2018.06.21 00:10:31.080 Trans.type = TRADE_TRANSACTION_HISTORY_ADD (3)
2018.06.21 00:10:31.080 Trans.order = 2210967406
2018.06.21 00:10:31.080 OrderSelect(Trans.order) = false
2018.06.21 00:10:31.080 HistoryOrderSelect(Trans.order) = true


一个订单出现在系统中,但在终端中却没有32毫秒的时间!试想一下,如果交易逻辑在这个区间内执行,后果会怎样......。


有趣的是,幽灵订单最常出现在TRADE_TRANSACTION_ORDER_DELETETRADE_TRANSACTION_DEAL_ADD(更罕见)交易类型


非常糟糕的平台细微差别。


ZZY 遗憾的是,5号的贸易交易速度值得怀疑。

Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее?
Сравнение MQL5 и QLUA - почему торговые операции в MQL5 до 28 раз быстрее?
  • 2016.09.13
  • MetaQuotes Software Corp.
  • www.mql5.com
Многие трейдеры зачастую не задумываются над тем, как быстро доходит их заявка до биржи, как долго она там исполняется и когда торговый терминал трейдера узнает о результате. В результате они не знают, что легко могут улучшить качество исполнения своих сделок за счет более быстрой реакции и скорости проведения транзакций. 12 сентября 2016 года...
 
fxsaber:

我决定检查一下,当一个订单在系统中但不在终端中时,这种幻象订单的情况会持续多久。


其结果是


在32毫秒内,有一个订单,但它不在终端中!试想一下,如果交易逻辑在这个区间内执行,后果将不堪设想。

是的,这不好。 正如你所看到的,这些交易结果是在不同的数据包中发送的。 它们应该在一起。

 
Alexey Navoykov:

正如你所看到的,这些交易结果是在不同的包中发送的,而它们应该是在一个包中。

事实证明,在OrderSend之后,订单可能会出现幻影,带有OnTradeTransaction 的并行专家顾问不能总是捕捉到这种状态。也就是说,OnTradeTransaction本身有时会变慢。


一般来说,MT5的架构在不同的地方有滞后性,很难消除。这些是蜱虫到达的滞后,现在是贸易交易的滞后。如果你寄希望于执行速度,你需要清楚地了解平台的能力。例如,刻度线进来时有适当的延迟,然后是交易......最终MT5或其他平台上的其他人可以超越,即使你自己就坐在交易所旁边。

 
贸易交易 以优先包的形式进行,超过了其他的交易。这严重降低了延迟。
 
Renat Fatkhullin:
贸易交易以优先包的形式进行,超过了其他交易。这严重降低了延迟。

脚本在OrderSend之后检测到了幻影订单的情况,但平行EA上的OnTradeTransaction 却没有检测到,这怎么可能呢(不一定,但会发生)?

 
Renat Fatkhullin:
贸易交易以优先包的形式出现,超过了其他交易。这严重降低了延迟。

问题是TRADE_TRANSACTION_ORDER_DELETETRADE_TRANSACTION_HISTORY_ADD 交易是在不同的数据包中进行的,这就是为什么它们的优先级并不重要,反正网络延迟 也是如此。而这些交易必须同步执行,一个接一个,没有任何中间状态。 也就是说,这本质上是一个原子操作,因为把一个被删除的订单放入历史列表与交易所无关。

也就是说,这里有两个选择:要么这两个交易一起出现在一个包里,要么第一个交易在第二个交易到来之前不在终端执行。

 
Alexey Navoykov:

也就是说,有两种选择:要么这两笔交易一起出现在一个包里,要么第一笔交易在第二笔交易到来之前不会在终端执行。

有些情况下,TRADE_TRANSACTION_DEAL_ADD在TRADE_TRANSACTION_ORDER_DELETE交易之前出现。在这种情况下,即使在TRADE_TRANSACTION_ORDER_DELETE之前,订单仍然是幻影。

 

远程代理已停止优化

2018.06.22 14:05:24.901 SVA_03  pass 19 tested with error "task rejected by tester agent" in 0:00:00.000
2018.06.22 14:05:27.387 SVA_03  pass 19 tested with error "task rejected by tester agent" in 0:00:00.000

我想这是因为新的编译器的缘故,如何更新它们才能使其发挥作用?

另外,由于这个错误,28个优化器中只有部分通过了13个。
 

翻看Alglib包的代码。它充满了这些结构,使代码 更加难以阅读

         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=xy[i][i_];
         for(i_=0;i_<=nvars-1;i_++)
            tmp[i_]=tmp[i_]-ct[xyc[i]][i_];
         //--- calculation
         v=0.0;
         for(i_=0;i_<=nvars-1;i_++)
            v+=tmp[i_]*tmp[i_];

这样不是更简单吗?

v=0.0;
for(i_=0;i_<=nvars-1;i_++){
   tmp=xy[i][i_]-ct[xyc[i]][i_];
   v+=tmp*tmp;
}

在我看来,执行速度会更快。

他们为什么要把代码弄得这么复杂?或者只是从另一种语言移植过来,没有任何调整?但我还是想知道为什么在原作中会有这样的复杂情况?