发送自定义事件,有时候不成功返回4203,系统处于假死状态

Jiayou Hu  

Event::FireCustomEvent:27: Error code = 4203

官方错误代码解释

ERR_OBJECT_WRONG_PROPERTY

4203

图解对象属性的错误ID

ERR_OBJECT_WRONG_PROPERTY

4203

Wrong ID of a graphical object property


这个问题也不是每次都出现,但出现了程序就假死了,也不报系统错误,很难理解到底是哪里出问题了?有人遇到过这种情况吗?

Jiayou Hu  
Jiayou Hu:

Event::FireCustomEvent:27: Error code = 4203

官方错误代码解释

ERR_OBJECT_WRONG_PROPERTY

4203

图解对象属性的错误ID

ERR_OBJECT_WRONG_PROPERTY

4203

Wrong ID of a graphical object property


这个问题也不是每次都出现,但出现了程序就假死了,也不报系统错误,很难理解到底是哪里出问题了?有人遇到过这种情况吗?



Event::FireCustomEvent:27: Error code = 4107

有时候会变成4107


Jiayou Hu  

int width_bar = (int)ChartGetInteger(m_chart_id,CHART_WIDTH_IN_BARS) 

ChartGetInteger(m_chart_id,CHART_HEIGHT_IN_PIXELS)


进一步发现,出4107的时候,图表宽度或者高度获取不到属性,不知道是因为4107而获取不到,还是因为获取不到属性产生的4107

GetChartPriceHL:55, ChartId:132843674743317927, width_bar:0, Error code = 4107


出现4107,导致自定义事件无法加入到事件队列,呈阻塞状态。

具体原因不明

Jiayou Hu  

FixChart:110, chart_height:1720512800720, Error code = 4203

这获取的图表的高度不对,导致4203,这些奇怪的问题,怎么来的呢?

为什么MT5,出现这些意外情况,会导致事件队列阻塞?

Jiayou Hu  
long chart_height;

if(!ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, 0, chart_height)){
    Print("chart_height:",chart_height,", Error code = ",GetLastError());
}

Print

chart_height:2879849645767, Error code = 4203


这样的代码再简单不过了,我只是获取图表像素高度,为什么你获取的高度不对,就阻塞了呢?我是允许你MT5某一次计算错误或获取不到,但不要就卡在哪儿,导致我后面的事件无法执行,难以理解


Jiayou Hu  
因为高度不对,MT5函数内部不知道怎么处理的,反正结果就是后面的事件队列都阻塞了,导致后面的事件都不执行了,这算是MT5的BUG吗?@管理员,@Mql5
Jiayou Hu  
这种情况,不知道什么时候发生,有时候发生的概率高,有时候发生的概率低,但不管什么时候发生,都无法确保程序的稳定性,这个问题已经搞了2天了,也没有找到解决方案,有人遇到过类似情况吗?
Jiayou Hu  
管理员可以解答一下吗?
Tiecheng Fu  
Jiayou Hu #:

Print

chart_height:2879849645767, Error code = 4203


这样的代码再简单不过了,我只是获取图表像素高度,为什么你获取的高度不对,就阻塞了呢?我是允许你MT5某一次计算错误或获取不到,但不要就卡在哪儿,导致我后面的事件无法执行,难以理解


一直不明白iyour意思,因为你太吝啬代码了,让别人去猜的话,很难快速解决问题,我只能猜你代码可能是指标非EA代码。这个和同步调用函数机制有关,仅供参考吧

Jiayou Hu  
Tiecheng Fu #:

一直不明白iyour意思,因为你太吝啬代码了,我只能猜你的问题和同步调用函数机制有关,仅供参考吧


ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, 0, chart_height)

哈哈,一句话总结,意思就是我通过上面的代码,希望获取图表的像素高度,但偶尔会因为执行这行代码导致出现4203异常,那么后续的图表事件,包括自定义事件,都不执行了,这样解释能理解吗?

Jiayou Hu  
大白话来说,即便获取不到图表高度,程序也不能中断,现在是获取不到高度,因为后面的事件都不执行,所以系统就卡主了,这显然不合理,这样大白话的描述应该很容易理解。
原因: