MT5和速度在行动 - 页 7

 
fxsaber:

你什么都不懂。当我们真的返回时,我们正在进入生成队列的On-functions。这可能会导致暂停,使第一个OrderSend无法发送正确的第二个。

暂停/延迟的时间是多少?在复制3个结构?

OnTradeTransaction( параметры )
{
        поместить параметры в очередь
        OnMain();
}

你建议通过保存所有返回后的On-functions来积累 队列,等待On-function,这将表示第一个OrderSend已经完成。然后只发送第二个OrderSend。

没有必要 积累所有的事件。不要等待下一个事件的复制--你可以在返回前处理事件,并在前提条件到达后立即发送第二个OrderSend,这样做

你也没有意识到,在第一个OrderSend期间可以执行持仓,但它的OnTradeTransaction 比第一个OrderSend的最终OnTradeTransaction更晚进入队列(在同一个微秒内,但更晚)。

那么在这种情况下,它是如何帮助你的呢?

bool HandleNextEvent(ENUM_EVENT_TYPE);

在这里和在那里都将是最后一次

 
fxsaber:

你什么都不懂。当我们真的返回时,我们正在进入生成队列的On-functions。这可能会导致暂停,使第一个OrderSend无法在第一个订单后立即发送正确的第二个订单。

你建议通过在返回后保存所有的On-functions来积累队列,等待On-function,其中会有一个关于第一个OrderSend结束的消息。然后只发送第二个OrderSend。

同时,你不明白,在第一个OrderSend期间可以执行持仓,但它的OnTradeTransaction将比第一个OrderSend的OnTradeTransaction完成时间更晚(在同一微秒内,但更晚)进入队伍。

没有排队。新事件将在当前事件之后被处理,在此期间发生的所有事件将被忽略。

 
队列或堆栈是由你形成的,MQ不做这个。
 

在我看来,解决问题的方法是能够 "订阅 "一个订单。也就是说,当一个订单的交易发生时,终端要产生一个事件。

但这应该由开发商来实施,而不是由我们。我们所有的解决方案,或多或少都会回归到交易的历史。我没有这种微秒级的关键性,但这真的是

但是,写复杂的自行车来发现交易是否通过,水平是否被触发,或者是否有人在终端纠正了头寸,这真的很烦人。

尽管这似乎是一件简单的事情--一个关于仓位交易的事件--一切都会变得更加容易。

 
Maksim Emeliashin:

但这要由开发商来实现,而不是我们。

开发者应该只提供工具。MQL本质上是一种低级别的编程语言(就像C++)。你不是在任务方面而是在计算方面使用它。而你自己做所有的高层决策。你可能缺乏工具,但不缺乏现成的解决方案

 
A100:

What's the pause\delay?在复制3个结构?

在处理各种事件的队列中。

在这种情况下,它将如何帮助你?

这将是这里或那里的最后一个。

我将会注意到收货时的情况。

 
Алексей Тарабанов:

没有排队。新事件将在当前事件之后被处理,在此期间发生的所有事件将被忽略。

无能。

 
fxsaber:

在处理过程中,队列中有各种事件。

我会注意到发球台上的关闭。

让我们停在我真的(没有HandleNextEvent 的代码 不理解基本的东西。

最后,建议的HandleNextEvent 和我写的不同之处在于,它是通过递归,而我是通过一个循环。此外,队列最初形成,你可以管理它......你一次处理一些事件,把它们推迟到其他时间,你有完全的自由。

 
这个EA不报警的原因是什么?
const MqlTick GetMarketWatchTick( void )
{
  MqlTick Tick = {0};
  
  ::SymbolInfoTick(_Symbol, Tick);
  
  return(Tick);
}

const MqlTick GetLastHistoryTick()
{
  MqlTick Tick[1];
  
  ::CopyTicks(_Symbol, Tick, COPY_TICKS_ALL, 0, 1);
  
  return(Tick[0]);
}

void OnTick()
{
  if (GetMarketWatchTick().time_msc > GetLastHistoryTick().time_msc) // Тик из Обзора рынка свежее, чем последний тик из истории.
    Alert("Hello!");
}


同时,同样的检查,缝在同一个终端上的战斗交易顾问,警报。可能的原因是什么?

 

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

MT5和速度在行动

安东, 2020.05.29 16:21

用于测试最大和平均时间的脚本。

2474.

        Last tick time. Selected orders: 0; max time: 0.187 ms; avr time: 0.022 ms; 100000 iterations
        Last 3 days. Selected orders: 1956; max time: 1.832 ms; avr time: 0.301 ms; 100000 iterations
        Orders total: 56561

它已经变得非常好。如果你已经改变了它--谢谢你。我将继续关注战斗模式下的表现。


PS 在战斗模式下,当进行交易时,它几乎总是滞后(只输出大于5毫秒的情况)。

2020.06.03 13:57:27.895 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 14 ms.
2020.06.03 13:57:47.780 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 5 ms.
2020.06.03 14:03:49.844 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 9 ms.
2020.06.03 14:03:51.063 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 8 ms.
2020.06.03 14:03:55.115 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 12 ms.
2020.06.03 14:03:56.935 Alert: Time[NewTicks.mqh 112: ::HistorySelect(TimeMsc/1000,INT_MAX)] = 6 ms.

否则似乎比2470好得多。