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

要添加评论,请登录注册
z44677265
69
z44677265  

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

开始


改变K线周期后

Yaowen Liu
142
Yaowen Liu  

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

Juann Li
468
Juann Li  

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

Ziheng Zhuang
30852
Ziheng Zhuang  

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

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

用指针就能解决。

Ziheng Zhuang
30852
Ziheng Zhuang  

解决办法: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);
  }
//+------------------------------------------------------------------+
z44677265
69
z44677265  
Ziheng Zhuang:

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

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

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

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

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

z44677265
69
z44677265  
Ziheng Zhuang:

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

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

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


C++入门之类的课程。

要添加评论,请登录注册