具备免费的内置聊天功能,可以使交易者与其他MQL5.community 成员进行聊天沟通。在信息接收人的字段指定有意向用户的登录名,以便直接发送信息到该用户的移动设备。
新的消息设计。现在,MQL5.community消息和来自桌面平台的推送消息显示为类似于流行的移动messenger聊天。
现在可以直接从平台切换到22种可用语言的其中一种。如果您在交易时喜欢使用英语界面,您可以在"设置"部分(iPad中的"关于") 进行选择,无需更改您设备上的语言设置。
class CFoo { }; class CBar { }; //+------------------------------------------------------------------+ //| 脚本程序起始函数 | //+------------------------------------------------------------------+ void OnStart() { void *vptr[2]; vptr[0]=new CFoo(); vptr[1]=new CBar(); //--- for(int i=0;i<ArraySize(vptr);i++) { if(dynamic_cast<CFoo *>(vptr[i])!=NULL) Print("CFoo * object at index ",i); if(dynamic_cast<CBar *>(vptr[i])!=NULL) Print("CBar * object at index ",i); } CFoo *fptr=vptr[1]; // 将返回类型转换指针错误,vptr[1] 并不是CFoo对象 } //+------------------------------------------------------------------+
string text="Hello"; ushort symb=text[0]; // 将返回符号'H'代码
修复崩溃日志中报告的错误。
class CAnimal { public: CAnimal(); // 构造函数 virtual void Sound() = 0; // 一个纯虚函数 private: double m_legs_count; // 动物有多少只脚 };这里Sound() 是一个纯虚函数,因为它通过纯虚函数PURE (=0)的说明符来声明。
class CAnimal { public: virtual void Sound()=NULL; // PURE 类函数,应该在派生类覆盖,CAnimal 现在是抽象的,不能被创建 }; //--- 从抽象类派生 class CCat : public CAnimal { public: virtual void Sound() { Print("Myau"); } // PURE 被覆写,CCat 不是抽象并且可以被创建 }; //--- 错误使用的例子 new CAnimal; // 'CAnimal' 错误 - 编译器返回 "不能举例说明抽象类" 错误 CAnimal some_animal; // 'CAnimal' 错误 - 编译器返回 "不能举例说明抽象类" 错误 //--- 正确使用的例子 new CCat; // 无错误 - CCat 类非抽象 CCat cat; // 无错误 - CCat 类非抽象抽象类的限制
//+------------------------------------------------------------------+ //| 一个抽象基类 | //+------------------------------------------------------------------+ class CAnimal { public: //--- 一个纯虚函数 virtual void Sound(void)=NULL; //--- 函数 void CallSound(void) { Sound(); } //--- 构造函数 CAnimal() { //--- 显式调用虚拟类函数 Sound(); //--- 隐式调用(使用第三个函数) CallSound(); //--- 构造函数和/或析构函数总是调用其自己的函数, //--- 即使它们是虚拟函数,并且在派生类被调用的函数覆写 //--- 如果调用的函数是纯虚函数 //--- 这个调用会导致 "纯虚函数调用"的关键执行错误 } };然而,抽象类的构造函数和析构函数可以调用其他成员函数。
typedef int (*TFunc)(int,int);现在,TFunc 是一个类型,可以声明变量函数指针:
TFunc func_ptr;func_ptr 变量可以存储函数指针用于未来的声明:
int sub(int x,int y) { return(x-y); } int add(int x,int y) { return(x+y); } int neg(int x) { return(~x); } func_ptr=sub; Print(func_ptr(10,5)); func_ptr=add; Print(func_ptr(10,5)); func_ptr=neg; //错误:neg不是int (int,int)类型 Print(func_ptr(10)); // 错误:应有两个参数函数指针可以存储和作为参数传递。您不能获得非静态类函数的指针。
修复崩溃日志中报告的错误。
现在,您可以设置一个PIN码来访问应用程序。这样即使您的移动设备丢失也将会为您的账户提供额外保护。在应用程序设置中启用 "锁屏" 。默认情况下,PIN码类似于用来访问一次性密码生成器的代码。
同时,新版包括多项更新和修复。
新版 MetaTrader 4 网页平台 具有一整套的技术分析指标。现在网页平台包括MetaTrader 4桌面版提供的30种最受欢迎的技术分析工具:
Accelerator Oscillator |
DeMarker | Moving Average |
Accumulation/Distribution | Envelopes | Moving Average of Oscillator |
Alligator | Force Index |
On Balance Volume |
Average Directional Movement Index | Fractals | Parabolic SAR |
Average True Range |
Gator Oscillator | Relative Strength Index |
Awesome Oscillator | Ichimoku Kinko Hyo | Relative Vigor Index |
Bears Power |
MACD | Standard Deviation |
Bollinger Bands |
Market Facilitation Index |
Stochastic Oscillator |
Bulls Power |
Momentum | Volumes |
Commodity Channel Index |
Money Flow Index | Williams' Percent Range |
网页平台界面现在提供38种语言。最近已经添加了14 种新语言:
荷兰语 |
立陶宛语 | 克罗地亚语 |
希腊语 | 罗马尼亚语 | 捷克语 |
希伯来语 | 塞尔维亚语 |
瑞典语 |
意大利语 | 斯罗维尼亚语 |
爱沙尼亚语 |
拉脱维亚语 |
芬兰语 | |
现在就启动网页平台,测试新功能吧!
新版MetaTrader 4 网页平台具有通过使用WebGL新技术所提供的更快速的图表性能 — 现在即使运行多个指标,网页平台仍会保持最佳性能。
网页平台现在具备技术指标功能。已经添加以下威廉姆斯指标 :
在MQL4向导添加了教学视频链接 "如何收集自动交易" 。 请观看该三分钟视频,开发自动交易,无需编写单行代码。
修复崩溃日志中报告的错误。
//+------------------------------------------------------------------+ //| 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>对象的析构函数被删除 }执行结果:
MetaTrader 4 客户端 build 880
若要获得密码,请打开您智能手机上的MetaTrader 4移动客户端,进入OTP版块并输入验证码来获取一次性密码。
MetaTrader 4 Android |
MetaTrader 4 iPhone |
---|---|
2015.09.14 14:48:18.486 Data Folder: E:\ProgramFiles\MetaTrader 4 2015.09.14 14:48:18.486 Windows 7 Professional (x64 based PC), IE 11.00, UAC, 8 x Intel Core i7 920 @ 2.67GHz, RAM: 8116 / 12277 Mb, HDD: 534262 / 753865 Mb, GMT+03:00 2015.09.14 14:48:18.486 MetaTrader 4 build 872 started (MetaQuotes Software Corp.)
最新版的 MetaTrader 4 iOS 支持使用一次性密码的双重验证来连接交易账户。现在,登录桌面或平板电脑程序端时,除了登录名和密码外,还需要提供一个验证码。验证码通过MetaTrader 4 iOS app生成。若要开始使用一次性密码,用户 需要绑定他们的交易账户到密码生成器。
MetaTrader 4 iOS的另一个新选项就是从图表的单触交易(类似一键式交易)。将您的设备转为横向水平并打开快速交易面板。