从专业人员到超级专业人员的任何问题 - 1。 - 页 43

 
fxsaber:

我不明白。如果数据库中的某些东西发生了变化,发现的唯一方法就是与数据库的先前状态进行比较。

你可以比较每个相应的数据库元素。或者你可以从它们中计算出哈希值并比较哈希值。

终端已经知道这一变化(OnTrade)。这就是为什么我想在我的职能中了解它。

 
fxsaber:

特别是对MT4来说,时间_msc的步长变化是1000ms。

太糟糕了,这使得我目前无法使用最简单的选项。

 
Andrey Khatimlianskii:

终端已经知道这一变化(OnTrade)。这就是为什么我想在我的职能中了解它。

在MT4中没有交易事件。

 
fxsaber:

交易事件不在MT4中。

它只是没有被输送到MKL。终端不更新定时器上的交易列表。

 
Andrey Khatimlianskii:

它只是还没有被连接到MCL 中。终端不更新定时器上的交易列表。

因此,只有通过核查。

 
Andrey Khatimlianskii:

1.有什么最便宜的方法可以知道函数的调用与上一次调用是在同一个刻度上?

时间(TimeCurrent)可以保持不变,从SymbolInfoTick开始的时间是ms,理论上也是如此。

比较买入价、卖出价和ms时间是相当昂贵的。

我不建议在专家顾问本身组织控制,我想得到一个通用的独立功能。


同样的问题涉及贸易业务。我们如何知道自上次运行以来,订单/仓位列表(包括开仓位、SL和TP)有什么变化?

我必须在OnTrade中放置一些标志(完成后重置),这是最便宜的方法。

但是,我还是希望有一个普遍的解决方案。


谁有什么想法?

对。

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   int count = 0;
   if ( A ) some_func( count );
   if ( B ) some_func( count );
   if ( C ) some_func( count );
}
//+------------------------------------------------------------------+
void some_func( int& count )
{
   if( count++ > 0 )
      return;
      
   // recalculate only once on each tick
}
//+------------------------------------------------------------------+
 
Koldun Zloy:

好的。

谢谢你。

安德烈-哈蒂姆连斯基

我不建议在EA本身组织控制的选项,我只想得到一个通用的独立功能。

 
Andrey Khatimlianskii:

谢谢。

既然还没有人建议,我给你一个想法,我会在哪里挖掘,检查最后一个PostMessage的时间或其他东西,可能是胡说八道,我对Api不是那么精通。

 
Aleksey Mavrin:

检查最后一条PostMessage的时间或什么的可能是无稽之谈,我对Api不是很了解。

是的,它看起来像胡说八道)

谢谢你的尝试。

 
Andrey Khatimlianskii:

如果不对EA本身进行控制,是不现实的。

不仅如此,这也是没有必要的。所请求的函数将在EA中被调用,也就是说,它在EA中基本上是相同的控制,只是侵入性较小。