新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 251

 

你好,我想为我的EA写一个交易面板,有两个版本mql4和mql5。我对图形对象还不熟悉。 我使用了标准库中 CLabel类的一个例子来创建一个移动菜单。在mql5中,该菜单工作正常,但在mql4中不正常。当一个图表周期被改变时,菜单对象被复制,它们的相对位置也会改变。也许,mql4在CLabel类中缺少一些方法,而mql5有?你能否建议在这个班级中加入什么内容以避免此类问题?

另外,在CLabel类的示例代码中,我不清楚这些行的作用。

EVENT_MAP_BEGIN(CControlsDialog) 
  
EVENT_MAP_END(CAppDialog)
 
Aleksandr Teleguz:

你好,我想为我的EA写一个交易面板,有两个版本mql4和mql5。我对图形对象还不熟悉。 我使用了标准库中 CLabel类的一个例子来创建一个移动菜单。在mql5中,该菜单工作正常,但在mql4中不正常。当一个图表周期被改变时,菜单对象被复制,它们的相对位置也会改变。也许,mql4在CLabel类中缺少一些方法,而mql5有?你能建议在这个班级中加入什么内容来避免这种问题吗?

另外,我不清楚这些字符串在CLabel类例子的代码中做什么。


指定的行是写在文件Defines.mqh中的宏。从字面上看,宏的第一行将控制传递给CControlsDialog 类的事件处理函数,然后在这些宏之间执行函数,最后一个宏将控制传递给CAppDialog

 
Алексей Барбашин:

指定的行是宏,写在Defines.mqh文件中。从字面上看,宏的第一行将控制传递给CControlsDialog 类的事件处理函数,然后执行这些宏之间的函数,最后一个宏将控制传递给CAppDialog


谢谢你,有些东西开始变得清晰了),你能给我一个关于宏主题的文档链接吗?

 
Aleksandr Teleguz:

谢谢你,这开始有意义了)你能给我一个关于宏主题的文档链接吗?


https://www.mql5.com/ru/docs/basis/preprosessor/constant

Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
Документация по MQL5: Основы языка / Препроцессор / Макроподстановка (#define)
  • www.mql5.com
Основы языка / Препроцессор / Макроподстановка (#define) - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

int OnDeinit()

{

Alert("beg OnDeinit()")。

// err=StringToInteger(err)。

//------------------------

return(0);

Alert("end OnDeinit()")。

}

//OnDeinit();-----------

俘虏呃被描述为一个整数


我不明白问题出在哪里。

收到消息

 
buyanov:

int OnDeinit()

{

Alert("beg OnDeinit()")。

// err=StringToInteger(err)。

//------------------------

return(0);

Alert("end OnDeinit()")。

}

//OnDeinit();-----------

俘虏呃被描述为一个整数


我不明白问题出在哪里。

我收到一条信息


我不太清楚问题是什么,以及错误是在哪里产生的。如果你有一个int类型的 err变量,为什么在注释的行中你要把它从字符串转换为int?错误究竟发生在哪里?

 
Алексей Барбашин:

目前还不清楚问题是什么,以及错误来自哪里。如果你有一个int类型的 变量err,你为什么要在注释的字符串中把它从字符串转换成int类型?在什么地方出现了错误?

问题是,我没有看到任何错误,但我得到一个警告信息,即整数到字符串的转换。在任何情况下,我们都需要搞清楚。
 
buyanov err字符串被描述为一个整数,不清楚问题出在哪里。

编译器信息指出错误的行和位置。你可以点击描述行(图中最下面一行),光标将显示程序文本中的错误。DeInit函数在指标或专家顾问从图表中删除之前被执行。例如,这里可以删除创建的图形元素。如果没有要执行的行动(该函数为空)--该函数可以被删除...如果你有像字符串x=125这样的东西,纠正为字符串x=(字符串)125

而不是err=StringToInteger(err); err=StringToInteger((string)err); 虽然有些人可能会觉得好笑

 
STARIJ:

编译器信息指出错误的行和位置。你可以点击描述行(图中最下面一行),光标将显示程序文本中的错误。DeInit函数是在指标或专家顾问从图表中删除之前执行的。例如,这里可以删除创建的图形元素。如果没有要执行的行动(该函数为空)--该函数可以被删除...如果你有像字符串x=125这样的东西,正确的是字符串x=(字符串)125

而不是err=StringToInteger(err); err=StringToInteger((string)err); 虽然有些人可能会觉得好笑


硕士...

我按照你的建议做了

err=StringToInteger((string)err) 一行放在Option函数中;没有错误。

但从字符串到数字的隐含信念的警告仍然存在,我想终端终究要重新安装。

 
buyanov: 我按照你的建议,在OnDeinit函数中加入了err=StringToInteger((string)err) 一行;没有错误

但从字符串到数字的隐含信念警告仍然存在,我想我终究要重新安装终端。

请公布你的OnDeinit函数--我会看一下的。并告诉我你想从它那里得到什么。MetaEditor给出了这个错误。有一个终端文件夹的 副本。这里Alexey Viktorov 告诉大家 如何快速重新安装

原因: