时间周期改变ea的控件位置会出错

 

如图所示,开始的时候ea的控件正常(刚开始加载在M30),然后把周期换成H1就出现图2 的样子,这是为什么?

开始


改变K线周期后

 

有的EA对运行周期有要求,更换周期会自动停止。

 

这个是控件的类 有问题或者说兼容性问题 ,一样的代码,在mt4里面 出现上面情况,在mt5里面就正常, 我研究很久 没找到解决办法,就不用他了 自己写把.

 

你这个是从MT5中拷贝过来的吧,MT4中没有这样的实例。

这个问题的原因是对象没有正确析构。

用指针就能解决。

 

解决办法:new个对话框的指针,在OnDeinit()中析构。

#include "ControlsDialog.mqh"
//+------------------------------------------------------------------+
//| Global Variables                                                 |
//+------------------------------------------------------------------+
CControlsDialog *ExtDialog;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    ExtDialog = new CControlsDialog();
//--- create application dialog
   if(!ExtDialog.Create(0,"Controls",0,20,20,360,324))
     return(INIT_FAILED);
//--- run application
   ExtDialog.Run();
//--- succeed
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy dialog
   ExtDialog.Destroy(reason);
   delete ExtDialog;
 
  }
//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // event ID  
                  const long& lparam,   // event parameter of the long type
                  const double& dparam, // event parameter of the double type
                  const string& sparam) // event parameter of the string type
  {
   ExtDialog.ChartEvent(id,lparam,dparam,sparam);
  }
//+------------------------------------------------------------------+
 
Ziheng Zhuang:

解决办法:new个对话框的指针,在OnDeinit()中析构。

太感谢你了,解决了,不过好像只要在OnInit 中加 ExtDialog = new CControlsDialog();  就可以了 

在OnDeinit()中的delete ExtDialog;  可以不用添加也可以。
还有就是请问 CControlsDialog ExtDialog; 和  CControlsDialog *ExtDialog; 区别是什么,再次感谢
 

1. 如果没有delete ExtDialog ,会有内存泄漏

2. CControlsDialog ExtDialog  是类的实例, CControlsDialog *ExtDialog 是类的一个指针,具体参考C++语法。

 
Ziheng Zhuang:

1. 如果没有delete ExtDialog ,会有内存泄漏

2. CControlsDialog ExtDialog  是类的实例, CControlsDialog *ExtDialog 是类的一个指针,具体参考C++语法。

非常感谢,学到了很多。请问就这些问题和关于类、库这方面的知识应该去哪里学?是哪方面的知识,如果是去网上学的话,关键词应该是什么
 
z44677265:
非常感谢,学到了很多。请问就这些问题和关于类、库这方面的知识应该去哪里学?是哪方面的知识,如果是去网上学的话,关键词应该是什么


C++入门之类的课程。

原因: