新版MetaTrader 4平台Build 900:MQL4类模板和优化内存使用 新评论 MetaQuotes 2015.10.21 09:30 新版MetaTrader 4平台Build 900:MQL4类模板和优化内存使用 MetaTrader 4平台更新将于2015年10月22日,星期四,进行发布。该更新将有以下变化: MetaTrader 4客户端build 900 程序端:修正更改非活动账户的密码(无关)。 程序端:优化处理大量历史数据时内存的使用和释放。 程序端:修正和优化处理大量的新闻类别。 信号:通过导航窗口快捷菜单修正信号退订。 MQL4:添加类模板允许您创建类似C++中的参数化类。那甚至可以使其更加抽象并且能够以统一的方式使用相同的代码处理不同类的对象。使用示例: //+------------------------------------------------------------------+ //| TemplTest.mq5 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| 声明一个模板类 | //+------------------------------------------------------------------+ template<typename T> class TArray { protected: T m_data[]; public: bool Append(T item) { int new_size=ArraySize(m_data)+1; int reserve =(new_size/2+15)&~15; //--- if(ArrayResize(m_data,new_size,reserve)!=new_size) return(false); //--- m_data[new_size-1]=item; return(true); } T operator[](int index) { static T invalid_index; //--- if(index<0 || index>=ArraySize(m_data)) return(invalid_index); //--- return(m_data[index]); } }; //+------------------------------------------------------------------+ //| 指针数组的模板类。在析构函数中,它删除 | //| 对象,数组中存储指针的对象。 | //| | //| 请注意继承TArray 模板类 | //+------------------------------------------------------------------+ template<typename T> class TArrayPtr : public TArray<T *> { public: void ~TArrayPtr() { for(int n=0,count=ArraySize(m_data);n<count;n++) if(CheckPointer(m_data[n])==POINTER_DYNAMIC) delete m_data[n]; } }; //+------------------------------------------------------------------------+ //| 声明类。对象指针将存储在数组中 | //+------------------------------------------------------------------------+ class CFoo { int m_x; public: CFoo(int x):m_x(x) { } int X(void) const { return(m_x); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ TArray<int> ExtIntArray; // 例如 TArray模板 (int 类型 的特定TArray 模板) TArray<double> ExtDblArray; // 例如TArray模板 (double类型的特定TArray模板) TArrayPtr<CFoo> ExtPtrArray; // 例如 TArrayPtr 模板(CFoo类型的特定 TArrayPtr 模板) //+------------------------------------------------------------------+ //| 脚本程序起始函数 | //+------------------------------------------------------------------+ void OnStart() { //--- 用数据填充数组 for(int i=0;i<10;i++) { int integer=i+10; ExtIntArray.Append(integer); double dbl=i+20.0; ExtDblArray.Append(dbl); CFoo *ptr=new CFoo(i+30); ExtPtrArray.Append(ptr); } //--- 输出数组内容 string str="Int:"; for(i=0;i<10;i++) str+=" "+(string)ExtIntArray[i]; Print(str); str="Dbl:"; for(i=0;i<10;i++) str+=" "+DoubleToString(ExtDblArray[i],1); Print(str); str="Ptr:"; for(i=0;i<10;i++) str+=" "+(string)ExtPtrArray[i].X(); Print(str); //--- 通过new创建的CFoo对象不应删除,因为它们在TArrayPtr<CFoo>对象的析构函数被删除 } 执行结果: TemplTest EURUSD,M1: Ptr: 30 31 32 33 34 35 36 37 38 39 TemplTest EURUSD,M1: Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0 TemplTest EURUSD,M1: Int: 10 11 12 13 14 15 16 17 18 19 MQL4:修正有时可能导致MQL4程序崩溃的ArrayCopy函数的内存中的重新分配。 Tester:修正测试指标后偶尔造成无效的全局声明变量的错误。 Tester:修正交易服务器连接丢失时的测试。 MetaEditor:修正type转换情况下在MetaAssist 定义函数名称。 MetaEditor:修正打开大文件。 MetaEditor:添加 F 热键用于从代码库选项卡调用搜索函数,以及在处理代码命令的状态栏的多个提示:增加/减少缩进,导航,情况转移,等等。 修复崩溃日志中报告的错误。 更新将通过LiveUpdate 系统提供。 测试日志 - 算法交易, 交易机器人 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
新版MetaTrader 4平台Build 900:MQL4类模板和优化内存使用
MetaTrader 4平台更新将于2015年10月22日,星期四,进行发布。该更新将有以下变化:
MetaTrader 4客户端build 900
执行结果:
TemplTest EURUSD,M1: Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0
TemplTest EURUSD,M1: Int: 10 11 12 13 14 15 16 17 18 19
更新将通过LiveUpdate 系统提供。