非常有用。谢谢。
Andrey Khatimlianskii:
我不建议编辑它。您需要在启用此文件后,但在创建面板前覆盖它。
请你举个简单的例子告诉我怎么做,我不太擅长 OOP。我改变了库中定义的颜色,但面板的颜色没有改变。
我不建议编辑它。您需要在启用此文件后,但在创建面板前覆盖它。
Maxim Dmitrievsky:
请举一个简单的例子告诉我怎么做,我对 oop 了解不多。我改变了库中定义的颜色,但面板的颜色没有改变。
请举一个简单的例子告诉我怎么做,我对 oop 了解不多。我改变了库中定义的颜色,但面板的颜色没有改变。
更改文件后,重新编译 EA,应该可以正常工作。别忘了备份,以便在更新后恢复变量。
重写可以使用 #undef 和 #define。但你需要把它们放在正确的位置;)
Andrey Khatimlianskii:
区分 ...和 ....
使用 #undef 和 #define 可以实现覆盖。但你必须把它们放在正确的位置上;)
Andrey Khatimlianskii:
更改文件后,重新编译 EA,应该就能正常工作了。别忘了备份,以便在更新后恢复变量。
重写可以使用 #undef 和 #define。但你需要把它们放在正确的位置上;)
我就是这么做的,但没有任何效果。面板还是原来的白色
编译器写入了 Macro redifinition,即它是一种覆盖类型....
//+------------------------------------------------------------------+ //|MyPanel.mqh | | //|版权所有 © 2013, DeltaTrader | //|http://www.deltatrader.com.br || //+------------------------------------------------------------------+ #property copyright "DeltaTrader © 2013 #property link "www.deltatrader.com.br" #property version "1.000" #property description "Test Panel" #property indicator_plots 0 //+------------------------------------------------------------------+ //| 包括| //+------------------------------------------------------------------+ #include <Controls\Dialog.mqh> #include <Controls\Label.mqh> #include <Controls\Panel.mqh> #include <Controls\Edit.mqh> #include <Controls\Defines.mqh> #define CONTROLS_DIALOG_COLOR_BORDER_LIGHT C'0x00,0x00,0xFF' #define CONTROLS_DIALOG_COLOR_BORDER_DARK C'0x00,0x00,0xFF' #define CONTROLS_DIALOG_COLOR_BG C'0x00,0x00,0xFF' #define CONTROLS_DIALOG_COLOR_CAPTION_TEXT C'0x00,0x00,0xFF' #define CONTROLS_DIALOG_COLOR_CLIENT_BG C'0x00,0x00,0xFF' #define CONTROLS_DIALOG_COLOR_CLIENT_BORDER C'0x00,0x00,0xFF' //+------------------------------------------------------------------+ //| 全局参数| //+------------------------------------------------------------------+ int panelXX = 200; int panelYY = 200; int panelWidth = 600; int panelHeight = 400; CAppDialog m_panel; //-- 竞标对象 CPanel m_bidcolor; CLabel m_bidlabel; //--- 询问对象 CPanel m_askcolor; CLabel m_asklabel; CEdit m_edit; //+------------------------------------------------------------------+ //| 启动时| //+------------------------------------------------------------------+ int OnInit() { //--- 创建面板 m_panel.Create(0,"blablabla",0,panelXX,panelYY,panelWidth,panelHeight); //--- 投标标签和颜色 m_bidcolor.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30); m_bidcolor.ColorBackground(clrYellow); m_panel.Add(m_bidcolor); m_bidlabel.Create(0,"Bid Text",0,5,5,0,0); m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits)); m_bidlabel.Color(clrBlue); m_panel.Add(m_bidlabel); //--- 询问标签和颜色 m_askcolor.Create(0,"Ask Background Color",0,1,1,panelWidth-30,30); m_askcolor.ColorBackground(clrAqua); m_panel.Add(m_askcolor); m_asklabel.Create(0,"Ask Text",0,5,30,0,0); m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits)); m_asklabel.Color(clrRed); m_panel.Add(m_asklabel); m_edit.Create(0,"Bid Background Color",0,1,1,panelWidth-30,30); m_panel.Add(m_edit); //--- 运行面板 m_panel.Run(); return(0); } //+------------------------------------------------------------------+ //| 注销时| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- 销毁面板 m_panel.Destroy(reason); //-- 删除所有对象 ObjectsDeleteAll(0,0); } //+------------------------------------------------------------------+ //| 计算时| //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //-- 一个非常简单的投标标签 m_bidlabel.Text("Bid "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits)); //--- 一个非常简单的问询标签 m_asklabel.Text("Ask "+DoubleToString(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits)); //--- return(rates_total); } //+------------------------------------------------------------------+ //| 图表事件| //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- 用鼠标移动面板 m_panel.ChartEvent(id,lparam,dparam,sparam); //--- } //+------------------------------------------------------------------+
新文章 向指标或者EA中快速添加控制面板已发布:
你是不是觉得需要向你的指标或者EA中添加图形面板来提升配置参数的速度和便捷性?在本文中,你将学会如何一步一步在你的MQL4/MQL5程序中实现输入参数的交互面板。
你的MQL4/MQL5指标或EA可能是世界上最有效的但是它仍旧有改进的空间。在大多数情况下,你需要进入程序设置来改变其输入参数。然而,这一步可以绕过去。
基于标准类库来开发你自己的控制面板。这将允许您更改设置而无需重新启动程序。此外,这将使你的程序更具吸引力,让它从竞争对手中脱颖而出。您可以在市场中浏览多种图形面板。
在本文中,我将向你展示如何向您的MQL4/MQL5程序添加简易面板。您还将了解到如何让程序读取输入参数并对它们的改变进行响应。
2.2. 面板
最终的PanelDialog2.mqh面板看上去如下:
图 4. 面板2
将MACD Sample.mq5EA和PanelDialog2.mqh面板结合的好处是什么?这允许我们快速的修改EA参数(Lots,Trailing Stop Level (in pips),及其他),以及加载在当前时间框架上的EA的事件发生通知方式(Mail, Push, 和 Alert)。
被修改EA的参数(Lots,Trailing Stop Level (in pips),及其他)在点击Apply changes按钮后生效。 交易事件通知设置的改变(Mail,Push,和Alert)自动生效。没有必要按Apply changes按钮。
作者:Karputov Vladimir