来自一个 "傻瓜 "的问题 - 页 7 1234567891011121314...277 新评论 Victor Kirillin 2011.06.01 15:30 #61 kPVT:我有一个专家,我试图用它来处理事件。我得到的事件与行动并不对应。完全匹配点击图表和点击按钮的行为一个有争议的事件id=9(CHARTEVENT_CUSTOM), 它是在例如图表移位和有大约10个类似事件时产生的。没有检查CHARTEVENT_OBJECT_ENDEDIT 事件。 其他的都不清楚。在手动创建对象时,要么描述与事件编号不匹配,要么创建对象的事件被错误地生成。总而言之,请大家帮忙。如果你这样走会更好。//+------------------------------------------------------------------+ //| Expert chart event function | //+------------------------------------------------------------------+ void OnChartEvent(const int id, // идентификатор события const long& lparam, // параметр события типа long const double& dparam, // параметр события типа double const string& sparam) // параметр события типа string { string str_id=""; switch(id) { case CHARTEVENT_KEYDOWN: str_id="KEYDOWN"; break; case CHARTEVENT_OBJECT_CREATE: str_id="OBJECT_CREATE"; break; case CHARTEVENT_OBJECT_CHANGE: str_id="OBJECT_CHANGE"; break; case CHARTEVENT_OBJECT_DELETE: str_id="OBJECT_DELETE"; break; case CHARTEVENT_CLICK: str_id="CLICK"; break; case CHARTEVENT_OBJECT_CLICK: str_id="OBJECT_CLICK"; break; case CHARTEVENT_OBJECT_DRAG: str_id="OBJECT_DRAG"; break; case CHARTEVENT_OBJECT_ENDEDIT: str_id="OBJECT_ENDEDIT"; break; case CHARTEVENT_CHART_CHANGE: str_id="CHART_CHANGE"; break; default: if(id>CHARTEVENT_CUSTOM) str_id="CUSTOM+"+IntegerToString(id-CHARTEVENT_CUSTOM); else str_id="UNKNOWN"; } //--- для отладки printf("ChartEvent :id=%s, l=%d d=%f s=%s",str_id,lparam,dparam,sparam); //--- ExtExpertPrg.ChartEvent(id,lparam,dparam,sparam); } Pavel Tsatsenko 2011.06.01 16:41 #62 我可能做错了什么,但我会试着更详细地描述为什么我有一个误解。AlexSTAL:你最初为已经分配的数字常数CHARTEVENT_XXXXXXXXX分配数字对应关系。我在哪里可以看到CHARTEVENT_XXXXXXXXX常数的数值?我找不到,所以我做了实验,发现CHARTEVENT_KEYDOWN =0, CHARTEVENT_CLICK =4,这与帮助中对这些常数的描述顺序 相一致。我已经相应地给其他事件分配了数字,所以有一个数组event[10]。罗什。不幸的是,我不明白你的问题。究竟是什么出了问题?根据我对事件的编号,并使用我之前帖子中的专家顾问。例如,我画了一条趋势线->事件CHARTEVENT_OBJECT_CHANGE。移动这一行 -> 事件CHARTEVENT_OBJECT_CHANGE。通过菜单改变属性 -> 2个事件CHARTEVENT_CHART_CHANGE和 CHARTEVENT_CUSTOM。按Del键->只发生CHARTEVENT_KEYDOWN 事件来删除它,(如果事件编号有误,应该仍有2个事件,删除和按下按钮)。所有这些都是基于我的编号。下一步...我正在使用一个专家顾问。绘制趋势线 -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1趋势线 40716移动此线 -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1趋势线 40716我通过菜单->ChartEvent :id=OBJECT_CHANGE, l=0 d=0.000000 s=H1 Trendline 40716和ChartEvent :id=CHART_CHANGE, l=0 d=0.000000 s=.我按Del键删除它 -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=这种情况还没有得到澄清。以防万一。MT5 64x - build 458。系统是W7 64x Home Extended。谢谢你的回应))。 Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика www.mql5.com Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5 Questions from a "dummy" Aleksandr Chugunov 2011.06.01 16:57 #63 kPVT: 我可能做错了什么,但我会试着更详细地描述我产生误解的原因。我在哪里可以找到CHARTEVENT_XXXXXXX常数的数值?我找不到,所以我做了实验,发现CHARTEVENT_KEYDOWN =0, CHARTEVENT_CLICK =4,这与帮助中对这些常数的描述顺序 相一致。我给其余的事件相应的编号,这就是数组事件[10]的结果。 绝不能以任何方式这样做!数值是由开发者指定的,可以在任何时候改变。只能使用字符常数--------------uncleVic 给了你一个正确用法的例子(或我的帮助片段)。--------------你在做什么?为什么你需要一个数字表示? Pavel Tsatsenko 2011.06.01 17:08 #64 AlexSTAL:在任何情况下都不能这样做。数值是由开发者指定的,可以在任何时候改变。只能使用字符常数好的。我同意你一定不要这样做。忘了我的手艺吧)。继续前进...AlexSTAL。UncleVic 给了你一个正确使用的例子(好吧,或者说是我的一片帮助)。正如我在上面写的,使用uncleVic的 例子,你也会得到不符合行动的事件。kPVT。绘制趋势线 -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 趋势线 40716 而不是CHARTEVENT_OBJECT_CREATE。.....按Del->ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=而不是CHARTEVENT_OBJECT_DELETE,然后再 按CHARTEVENT_KEYDOWN 来删除它。AlexSTAL。你在做什么?为什么你需要一个数字表示?这是个很长的解释,而且这并不重要。让我们忘记我的编号。最主要的是,我试图让事件变得有意义,但即使使用uncleVic的 例子,我也不明白产生的事件和执行的动作之间的不一致。 Aleksandr Chugunov 2011.06.01 17:13 #65 kPVT:好的。我同意,你不能这样做。忘掉我的手忙脚乱吧)。继续前进...正如我在上面写的,使用uncleVic的 例子,你也会得到不符合行动的事件。kPVT。把它添加到初始化中。 ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true); ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);你会没事的。Создание: DS 0 _err (EURUSD,M30) 17:13:18 ChartEvent :id=OBJECT_CREATE, l=0 d=0.000000 s=M30 Horizontal Line 58241 DG 0 _err (EURUSD,M30) 17:13:18 ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=M30 Horizontal Line 58241 Удаление кл. Del: EH 0 _err (EURUSD,M30) 17:13:21 ChartEvent :id=OBJECT_DELETE, l=0 d=0.000000 s=M30 Horizontal Line 58241 QD 0 _err (EURUSD,M30) 17:13:21 ChartEvent :id=KEYDOWN, l=46 d=0.000000 s= Pavel Tsatsenko 2011.06.02 05:35 #66 亚历克斯非常感谢你把它整理出来了。AlexSTAL:添加到初始化中。....添加到专家区块void OnInit() { ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true); ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true); }一切都在它的位置上。看了一下帮助,没有任何地方写到这两个事件需要被 "初始化 "以获得所有其他事件的正确性。我把它们注释出来,一切都正常了。事实证明,如果专家顾问/指示器没有OnInit 块,它就会把事件搞乱。也许是这个想法,但是mql5的程序员应该知道它,以防万一。 Europa 2011.06.02 11:32 #67 我在Wizard中生成了一个Expert Advisor,但是测试器生成的Core 1测试器因为OnInit临界错误而停止,有人遇到过这种情况吗? 如何解决? 毕竟,Wizard,OK,我在那里会犯错误... Victor Kirillin 2011.06.02 11:41 #68 Europa: 我在Wizard中生成了一个Expert Advisor,但测试器给出的错误是Core 1测试器因OnInit关键错误而停止,有人遇到过这种情况吗? 如何解决? 毕竟Wizard,我在那里会搞砸一些事情... 请附上源代码。和测试参数。 Europa 2011.06.02 12:01 #69 uncleVic: 附上产生的源代码。和测试参数。 附加的文件: TheFirst.mq5 7 kb Victor Kirillin 2011.06.02 12:45 #70 Europa: 它没有重现。我要求提供更多的测试参数。我做到了。符号。期间。间隔。交易模式。MT5的版本和比特率都是如此。 1234567891011121314...277 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我有一个专家,我试图用它来处理事件。
我得到的事件与行动并不对应。
完全匹配点击图表和点击按钮的行为
一个有争议的事件id=9(CHARTEVENT_CUSTOM), 它是在例如图表移位和有大约10个类似事件时产生的。
没有检查CHARTEVENT_OBJECT_ENDEDIT 事件。
其他的都不清楚。在手动创建对象时,要么描述与事件编号不匹配,要么创建对象的事件被错误地生成。
总而言之,请大家帮忙。
如果你这样走会更好。
我可能做错了什么,但我会试着更详细地描述为什么我有一个误解。
你最初为已经分配的数字常数CHARTEVENT_XXXXXXXXX分配数字对应关系。
我在哪里可以看到CHARTEVENT_XXXXXXXXX常数的数值?
我找不到,所以我做了实验,发现CHARTEVENT_KEYDOWN =0, CHARTEVENT_CLICK =4,这与帮助中对这些常数的描述顺序 相一致。
我已经相应地给其他事件分配了数字,所以有一个数组event[10]。
不幸的是,我不明白你的问题。究竟是什么出了问题?
根据我对事件的编号,并使用我之前帖子中的专家顾问。
例如,我画了一条趋势线->事件CHARTEVENT_OBJECT_CHANGE。
移动这一行 -> 事件CHARTEVENT_OBJECT_CHANGE。
通过菜单改变属性 -> 2个事件CHARTEVENT_CHART_CHANGE和 CHARTEVENT_CUSTOM。
按Del键->只发生CHARTEVENT_KEYDOWN 事件来删除它,(如果事件编号有误,应该仍有2个事件,删除和按下按钮)。
所有这些都是基于我的编号。
下一步...
我正在使用一个专家顾问。
绘制趋势线 -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1趋势线 40716
移动此线 -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1趋势线 40716
我通过菜单->ChartEvent :id=OBJECT_CHANGE, l=0 d=0.000000 s=H1 Trendline 40716和ChartEvent :id=CHART_CHANGE, l=0 d=0.000000 s=.
这种情况还没有得到澄清。
以防万一。
MT5 64x - build 458。
系统是W7 64x Home Extended。
谢谢你的回应))。
我可能做错了什么,但我会试着更详细地描述我产生误解的原因。
我在哪里可以找到CHARTEVENT_XXXXXXX常数的数值?
我找不到,所以我做了实验,发现CHARTEVENT_KEYDOWN =0, CHARTEVENT_CLICK =4,这与帮助中对这些常数的描述顺序 相一致。
我给其余的事件相应的编号,这就是数组事件[10]的结果。
绝不能以任何方式这样做!
数值是由开发者指定的,可以在任何时候改变。
只能使用字符常数
--------------
uncleVic 给了你一个正确用法的例子(或我的帮助片段)。
--------------
你在做什么?为什么你需要一个数字表示?
在任何情况下都不能这样做。
数值是由开发者指定的,可以在任何时候改变。
只能使用字符常数
好的。我同意你一定不要这样做。
忘了我的手艺吧)。
继续前进...
UncleVic 给了你一个正确使用的例子(好吧,或者说是我的一片帮助)。
正如我在上面写的,使用uncleVic的 例子,你也会得到不符合行动的事件。
kPVT。
绘制趋势线 -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 趋势线 40716 而不是CHARTEVENT_OBJECT_CREATE。
.....
你在做什么?为什么你需要一个数字表示?
这是个很长的解释,而且这并不重要。让我们忘记我的编号。
最主要的是,我试图让事件变得有意义,但即使使用uncleVic的 例子,我也不明白产生的事件和执行的动作之间的不一致。
好的。我同意,你不能这样做。
忘掉我的手忙脚乱吧)。
继续前进...
正如我在上面写的,使用uncleVic的 例子,你也会得到不符合行动的事件。
kPVT。
把它添加到初始化中。
你会没事的。
亚历克斯非常感谢你把它整理出来了。
添加到初始化中。
....
添加到专家区块
一切都在它的位置上。
看了一下帮助,没有任何地方写到这两个事件需要被 "初始化 "以获得所有其他事件的正确性。
我把它们注释出来,一切都正常了。
事实证明,如果专家顾问/指示器没有OnInit 块,它就会把事件搞乱。
也许是这个想法,但是mql5的程序员应该知道它,以防万一。
我在Wizard中生成了一个Expert Advisor,但测试器给出的错误是Core 1测试器因OnInit关键错误而停止,有人遇到过这种情况吗? 如何解决? 毕竟Wizard,我在那里会搞砸一些事情...
附上产生的源代码。和测试参数。
它没有重现。
我要求提供更多的测试参数。我做到了。
MT5的版本和比特率都是如此。