对MT5的祝愿 - 页 48

 

Yedelkin:

解释一下。如果一个专家顾问不处理它附加在图表上的符号的ticks,这个符号的NewTick 事件的连续产生将导致这个EA处理的事件队列溢出。

你是什么意思?

专家顾问中没有OnTick(),但NewTick事件 却成为队列?

你怎么知道什么分析了队列?)

Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - Документация по MQL5
 
Yedelkin:

如果有必要的话,找不到禁用图表上附有专家顾问的符号的刻度流(NewTick 事件)的方法。


我觉得我从星期天一直工作到星期五,没有任何休息......。:))

 
komposter:

你是什么意思?

你怎么会知道......?

我以两种方式学会了它。首先,我熟悉了EventChartCustom - OnChartEvent的组合,以一个简单的专家顾问为例,从外国符号收集指标信号。同时,专家顾问并不与自己的符号的ticks一起工作,专家顾问代码中的Ontick()函数被注释掉。当在测试器中运行该EA时,我发现行驶时间因EA所连接的符号不同而不同。例如,请看下面的例子。在相同的优化参数下,通过时间明显不同。

OE      0       Tester  15:35:25        Experts\Ye00-01-0 Event.ex5 on USDRUR,M1 from 2010.08.01 00:00 to 2010.08.09 00:00
 CH      0       Tester  15:35:25        complete optimization started
LO      0       Core 1  15:35:25        agent process started
HK      0       Core 1  15:35:25        connecting to 127.0.0.1:3000
OK      0       Core 2  15:35:25        agent process started
DO      0       Core 2  15:35:25        connecting to 127.0.0.1:3001
DG      0       Core 2  15:35:26        connected
EK      0       Core 1  15:35:26        connected
NQ      0       Core 1  15:35:26        authorized (agent build 384)
QK      0       Core 2  15:35:26        authorized (agent build 384)
DI      0       Core 1  15:35:26        pass 0 started
LM      0       Core 2  15:35:26        pass 1 started
QK      0       Core 1  15:35:27        common synchronization completed
FD      0       Core 2  15:35:27        common synchronization completed
GR      0       Core 2  15:36:08        pass 1 returned result 10000.00 in 42 sec
RH      0       Core 2  15:36:08        pass 2 started
ON      0       Core 1  15:36:09        pass 0 returned result 10000.00 in 43 sec
ID      0       Core 1  15:36:09        pass 3 started
GK      0       Core 2  15:36:21        pass 2 returned result 10000.00 in 13 sec
QQ      0       Core 2  15:36:21        pass 4 started
PH      0       Core 1  15:36:21        pass 3 returned result 10000.00 in 12 sec
IR      0       Core 1  15:36:21        pass 5 started
ED      0       Core 2  15:36:34        pass 4 returned result 10000.00 in 13 sec
ON      0       Core 2  15:36:34        pass 6 started
MQ      0       Core 1  15:36:34        pass 5 returned result 10000.00 in 13 sec
GK      0       Core 1  15:36:34        pass 7 started
KN      0       Core 2  15:36:46        pass 6 returned result 10000.00 in 12 sec
ND      0       Core 2  15:36:46        pass 8 started
CJ      0       Core 1  15:36:47        pass 7 returned result 10000.00 in 13 sec
EP      0       Core 1  15:36:47        pass 9 started
PG      0       Core 2  15:36:59        pass 8 returned result 10000.00 in 13 sec
QO      0       Core 1  15:36:59        pass 9 returned result 10000.00 in 12 sec
MD      0       Tester  15:36:59        optimization finished, total passes 10
HS      0       Tester  15:36:59        optimization passed in 1 minutes 34 seconds
CE      0       Core 1  15:36:59        connect closed
PI      0       Core 2  15:36:59        connect closed
ON      1       Tester  15:37:20        genetics turned off because 10 passes, to use genetics increase amount of optimized parameters
RQ      0       Tester  15:37:20        Experts\Ye00-01-0 Event.ex5 on EURGBP,M1 from 2010.08.01 00:00 to 2010.08.09 00:00
 FL      0       Tester  15:37:20        complete optimization started
QM      0       Core 1  15:37:20        connecting to 127.0.0.1:3000
MG      0       Core 2  15:37:20        connecting to 127.0.0.1:3001
MN      0       Core 1  15:37:20        connected
LR      0       Core 2  15:37:20        connected
FH      0       Core 1  15:37:20        authorized (agent build 384)
QR      0       Core 2  15:37:20        authorized (agent build 384)
DF      0       Core 1  15:37:20        pass 0 started
LJ      0       Core 2  15:37:20        pass 1 started
JR      0       Core 1  15:37:20        common synchronization completed
EK      0       Core 2  15:37:20        common synchronization completed
IK      0       Core 1  15:38:35        pass 0 returned result 10000.00 in 75 sec
KQ      0       Core 1  15:38:35        pass 2 started
QG      0       Core 2  15:38:36        pass 1 returned result 10000.00 in 76 sec
FM      0       Core 2  15:38:36        pass 3 started
JD      0       Core 1  15:39:16        pass 2 returned result 10000.00 in 41 sec
MN      0       Core 1  15:39:16        pass 4 started
QP      0       Core 2  15:39:17        pass 3 returned result 10000.00 in 41 sec
FJ      0       Core 2  15:39:17        pass 5 started
KM      0       Core 1  15:39:56        pass 4 returned result 10000.00 in 40 sec
CG      0       Core 1  15:39:56        pass 6 started
DJ      0       Core 2  15:39:57        pass 5 returned result 10000.00 in 40 sec
LP      0       Core 2  15:39:57        pass 7 started
IF      0       Core 1  15:40:37        pass 6 returned result 10000.00 in 41 sec
FL      0       Core 1  15:40:37        pass 8 started
DS      0       Core 2  15:40:38        pass 7 returned result 10000.00 in 41 sec
GI      0       Core 2  15:40:38        pass 9 started
KP      0       Core 1  15:41:18        pass 8 returned result 10000.00 in 41 sec
NH      0       Core 2  15:41:19        pass 9 returned result 10000.00 in 41 sec
MS      0       Tester  15:41:19        optimization finished, total passes 10
OJ      0       Tester  15:41:19        optimization passed in 3 minutes 59 seconds

康帕斯

专家顾问没有OnTick(),而NewTick事件 是排队的?

为了检查这个问题的答案(第二种方法),我以下列方式修改了专家顾问的代码

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                  )
  {
   EventChartCustom(ChartID(),0,(long)SymbolInfoInteger(_Symbol,SYMBOL_TIME),0,_Symbol);

   if(id==CHARTEVENT_CUSTOM) Print(__FILE__," ",__FUNCTION__,": ",sparam ," ",(datetime)lparam);
  }
也就是说,我插入了一条黄色背景的线,以检测符号收到的新刻度线的事实。结果显示,专家顾问所连接的符号的ticks被定期接收。
DS      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PO      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: GBPUSD 2011.01.21 18:29:38
QI      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURUSD 2011.01.21 18:29:38
PD      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: USDCHF 2011.01.21 18:29:38
IG      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURUSD 2011.01.21 18:29:38
PR      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: GBPUSD 2011.01.21 18:29:38
LO      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PI      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: USDCHF 2011.01.21 18:29:38
DE      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PQ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LR      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HO      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DH      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PD      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LQ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HR      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DO      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PK      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LD      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HQ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DR      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PN      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LK      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HD      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DQ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PM      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LN      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: GBPUSD 2011.01.21 18:29:38
EJ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURUSD 2011.01.21 18:29:38
LE      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: USDCHF 2011.01.21 18:29:38
PP      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LM      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HN      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DK      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PG      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LP      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
HM      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
DN      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
PJ      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38
LG      0       Ye00-01-0 Event (EURGBP,M1)      20:29:36        Ye00-01-0 Event.mq5 OnChartEvent: EURGBP 2011.01.21 18:29:38

好吧,既然手册上说 "NewTick 事件产生于 当一个符号收到一个新的tick时,专家顾问被连接到的图表上。",收到新刻度线的事实应该导致NewTick 事件的产生。

从你的问题来看,你认为当OnTick()被禁用时,不会产生NewTick 事件?但我在手册中没有找到这样的信息。

 
sergeev:

感觉你从周日工作到周五,没有休息......。:))

从这句话判断,你知道正确的解决方案吗?- 给我一个提示!
 
Yedelkin:
也就是说,我插入了一条用黄色背景突出显示的线,以检测新刻度线的事实,通过符号来检测。从结果中你可以看到,由

鉴定师所连接的符号,会定期收到。


你有没有检查过在你调用自定义事件之前,哪个事件会导致OnChartEvent 被调用?

-------------

如果

void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam  // параметр события типа string
                  )
  {
   EventChartCustom(ChartID(),0,(long)SymbolInfoInteger(_Symbol,SYMBOL_TIME),0,_Symbol);

   if(id==CHARTEVENT_CUSTOM) Print(__FILE__," ",__FUNCTION__,": ",sparam ," ",(datetime)lparam);
  }


你把一个简单的EA放进去,让它在测试器中运行,它不会激活。

你有其他调用OnChartEvent的函数吗?

 
sergeev:

你是否有其他调用OnChartEvent的函数。

是的,当然了。由于Expert Advisor使用EventChartCustom - OnChartEvent绑定从第三方符号收集指标信号,每个这样的指标都有自己的EventChartCustom()函数 实例。EventChartCustom()函数的每个实例的第一个参数包含一个图表标识符,我们的EA与之相连;第二个参数为零。

sergeev:

如果在任何专家顾问中插入,它将不会被激活。

这只是代码的一部分,--来自专家顾问,从其他符号中收集指标信号。如果没有指标,这部分代码(OnChartEvent 函数)将不会因为没有指标而处理自定义事件。

sergeev:

在调用自定义事件之前,你是否检查过哪个事件导致OnChartEvent被调用?

不,有点错。我想看看,当OnChartEvent()函数处理来自其他符号的指标的自定义事件时,符号是否接收到了专家顾问所连接的图表的ticks。可以看出,收到的是欧元兑英镑的点子。根据参考资料,我得出结论,当符号出现新的点数时,会产生 NewTick 事件。

 

不可能弄清楚你使用的哪个函数导致了不同的计时结果。没有完整的代码,就只能靠咖啡渣猜测。

NewTick与OnChartEvent 没有任何直接 关系。这就是为什么你建议的队列跟踪机制是相当人为的。我不确定这是否正确。

在这种情况下,我不会声称是NewTick创造了测试延迟。而且我认为这是你的绑定机制造成的,而不是事件本身。

 
sergeev:

不可能弄清楚你使用的哪个函数导致了不同的计时结果。没有完整的代码,就只能通过咖啡渣来猜测。

NewTick与OnChartEvent没有任何直接 关系。这就是为什么你建议的队列跟踪机制是相当人为的。我不确定这是否正确。

在这种情况下,我不会声称是NewTick创造了测试延迟。而且我认为是你的绑定机制有问题,而不是事件本身。

这件事从一开始就不是我的意思。在我的第一条信息中,我说我没有找到一种方法来禁用附在图表上的专家顾问的符号的勾选事件。你已经对这句话做出了反应,但你没有提供一种方法,在必要时禁止所需符号的流转。我的结论是,不仅是我,而且你也不知道这样的方法。所以我的建议仍然有效:引入一个切换功能,允许你以编程方式禁用事件的生成。 鏂囩歞ean符号,该符号在其图表上附有一个专家顾问

至于关于 "靠猜 "和 "队列跟踪机制的人为性 "的评论--我没有提出从一开始就研究代码并寻求 "为什么会这样 "的答案。从我的建议中可以看出,我已经为自己找到了答案。但是,让我们从一个更抽象的角度来考虑这个问题,不要把注意力集中在某个特定的专家顾问的代码上。

sergeev:

NewTick与OnChartEvent没有任何直接 联系。

好吧,让我们假设它是。所以,NewTick与OnChartEvent是间接 相关的,但它是有联系的。我在解释 中已经说过了,但我要再重复一次。你比我更清楚,有一些 "共同的事件队列",所有发生的事件都堆积在那里,包括预定义的和用户定义的。这些事件是按照收到的顺序一个一个地处理的。由于队列有一定的规模限制,当它满了之后,旧的事件就会被删除而不被处理。是这样吗?

因此,事实证明,如果Expert Advisor没有规定处理NewTick事件,但这些事件仍然产生,那么我的一般事件队列将被不必要的NewTick事件简单地堵塞,而且会有不处理过时的用户事件的风险,这些事件必须由Expert Advisor处理。 我希望你同意这个结论。这就是我提出上述建议的原因。

当然,我不知道事件队列和NewTick事件如何工作的所有微妙之处。因此,我的一些结论可能是错误的,我将饶有兴趣地考虑任何解释。

sergeev:

在这种情况下,我不会声称是NewTick造成了测试延迟。而且我认为这是你的绑定机制 造成的,而不是事件本身。

供参考。专家顾问以相同的参数和相同的 "绑定机制 "将一个相同的指标实例悬挂在相邻的符号上,在一个相同的时间间隔内。绑定是相同的:EventChartCustom - OnChartEvent。

我是否正确理解,你同意 "如果专家顾问中没有OnTick(),NewTick事件 根本就不会被排队 "的说法?

 

为什么要猜测和编造假说?

你要求"引入一个开关函数,使你能够以编程方式禁用事件生成 "。 鏂囩歞ean为专家顾问连接到图表上的符号。"是明确的。

写信给servicedesk

其他一切都在与风车斗争。

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
sergeev:

为什么要猜测和炮制假说?

其他都是与风车的斗争。

你不说 :)一些人习惯于盲目地工作,而另一些人则试图更多地了解要遏制的现象。假设是在缺乏这种或那种信息的情况下产生的。谢谢你参加讨论。

我写信给SD。我不知道建议可以在那里得到解决。