21 十二月 2017
21 十二月 2017
新版平台发布后,将停止对旧版本的桌面版和移动版的支持:
为了支持新的共享项目,我们更新了MQL5存储的操作协议。因此,平台更新后,您将需要检查核对来自存储的所有数据。更新过程中,MQL5存储中的所有数据都不会丢失或受到影响。
更新到新版平台之前,我们建议您执行提交操作,将所有本地更改发送到MQL5存储。
如何工作
例如,您可以创建一个工具显示美元指数(USDX)。它使用下面的公式:
50.14348112 * pow(ask(EURUSD),-0.576) * pow(USDJPY,0.136) * pow(ask(GBPUSD),-0.119) * pow(USDCAD,0.091) * pow(USDSEK,0.042) * pow(USDCHF,0.036)
注意:USDEUR和USDGBP货币对在源美元指数公式中使用。因为平台中仅可以使用反向货币对,因此合成交易品种公式中使用的是负能量和买价,而不是卖价。
平台将根据您交易商提供的其他六个交易品种报价来计算新工具的实时价格。价格变化将在市场报价窗口和图表上显示:
int CustomTicksAdd( const string symbol, // 交易品种名称 const MqlTick& ticks[] // 可以用于自定义交易品种的报价数据数组 );CustomTicksAdd函数允许提供报价,如同从交易商服务器接收这些报价。数据被发送至市场报价窗口,而不是直接写入报价数据库。然后,程序端将报价从市场报价窗口保存至数据库。如果在一次调用中传递了大量的数据,那么函数行为就会发生变化来节省资源。如果传送的报价数超过256个,那么数据会被分成两个部分。较大的部分直接记录到报价数据库(类似CustomTicksReplace)。第二部分由最近的128个报价组成,被发送到市场报价,程序端从这里将报价保存到数据库。
功能全面的项目现在已可以在MetaEditor中使用。程序开发过程已变得更加方便。
现在主要的MQL5程序文件不会呈现为项目文件。项目是独立的"MQPROJ"文件,它可以存储程序设置,编译所有已用文件的参数和信息。主要的项目设置可以从独立的对话框访问,所以,现在无需通过#property在源代码中指定项目设置。
为了便于进行项目工作,还提供了独立的导航标签。全部文件,例如包含文件,资源文件,标题文件和其他文件都被安排到这个标签类别中。所有文件都会自动添加到项目导航中。例如,如果您包括了一个新的MQH文件,那么它将自动出现在导航的“相关性”部分。
在更新的MQL5存储在线库中也实现了对新项目的支持。现在,通过与MQL5.community其他成员的协作,开发大型项目变得更加方便。
为组项目提供了新的共享项目部分。在这部分创建的项目会即时发送到存储中:您可以授予其他用户的权限并立即开始协作。
当您在共享项目中编译一个项目时,根据程序类型,可执行文件EX5会自动复制到本地专家,指标或脚本目录。您可以轻松地在图表上启动程序,而无需手动复制文件。
MQL5存储操作中的新功能
为了实现对新共享项目的支持,我们已经更改了MQL5存储的操作协议。因此,平台更新后,您将需要检查核对来自存储的所有数据。更新过程中,MQL5存储中的所有数据都不会丢失或受到影响。
“检查存储”命令现在已经不可用。而是使用“激活MQL5存储”和“更新存储文件”命令来接收数据:
新项目:创建和操作细节的示例
新项目版块已被添加到MetaEditor。项目是一个mqproj文件,可以存储普通程序属性和有关所有已用文件的信息。现在,程序属性可以通过独立的MetaEditor对话框方便地管理,不必在源代码中手动更改属性(使用#property指令)。
如果您有可用代码,您可以通过使用“来自源代码的新项目”命令来轻松地测试新项目。
在已选文件所在的目录中,将会创建一个具有相同名称和mqproj为扩展名的新项目文件。通过#property在源代码中指定的主要程序属性将被自动添加到项目,包括名称,版权,版本,链接到开发者网站和程序描述。
编译MQL5程序的两个新选项已被添加到项目属性:
若要使用项目服务,请使用导航窗口独立的项目标签。项目服务中使用的所有文件都以方便的形式展示在这个标签。当项目从源文件生成时,所有使用的包含文件(在主MQ5文件及其包含文件中通过#include目录指定)都会自动添加到相关性部分。
当新的包含文件添加到源代码时,它也出现在项目导航中。已用的标题文件添加到标题版块;在项目中用作资源的图片,声音和其他MQL5程序也被添加到资源版块。带有源代码的MQ5文件显示在资源版块。在“设置和文件”版块,您可以添加其他文件,例如用于测试的set文件和图表模板。
使用快捷菜单命令向项目添加现有文件或从项目中删除文件。删除文件时请注意,因为您不但可以从项目中移除文件(解除绑定)还可以从硬盘中彻底删除文件:
创建一个新项目犹如创建普通MQL5程序一样简单。单击“新项目”,选择新程序类型并指定MQL5向导中的属性(例如名称,事件处理程序)。
若要获得可执行文件EX5,您可以打开这个项目并按下F7(编译命令)或打开程序的主MQ5文件并编译它。
MQL5存储中的共享项目:操作细节
共享项目是由一个单独的共享项目版块来管理。如果您还没有连接存储库,请在所需文件夹的快捷菜单执行“激活MQL5存储”命令。MetaEditor将检查您的存储库是否包含任何保存数据以及是否有任何共享项目可供您使用。所有可用的数据都将从存储库中恢复并上传到您的电脑(检验操作)。可用的组项目出现在共享项目版块。若要恢复项目,请在快捷菜单中执行“在存储库检查”。
若要创建新组项目,请选择共享项目文件夹并点击“新项目”:
然后完成标准的MQL5步骤:设置所需程序的类型,名称和属性。对于组项目,您应该使用清晰易懂的名称,以便其他参与者能够轻松地找到它们。项目名称中只可以使用没有空格的拉丁字符和数字。
创建的对象会立刻添加到MQL5存储库中。项目中使用的标准程序库文件不会添加到存储库中,您可以手动添加它们。
若要允许其他参与者使用项目,请打开项目属性。在这里,您可以通过指定MQL5.community登录名,以及为组工作设定公共参数,来向选定用户授予权限:
当您编译一个组项目时,根据程序类型,可执行文件EX5会自动复制到本地专家,指标或脚本目录。它允许您在程序端立即运行程序而不必手动复制到适当的目录。
MQL5存储中的公共项目:参与开发
如上所述,MQL5存储中的每个组项目都有公共设置:项目可以是私人的,也可以是对其他人公开的。现在,您可以免费加入的所有项目都显示在单独的“公共项目”标签。
每个人都可以找到心仪的项目并加入其开发过程。仅需单击加入,接收存储项目。
//+------------------------------------------------------------------+ //| 脚本程序起始函数 | //+------------------------------------------------------------------+ void OnStart() { //--- 作为二进制数组的模板文件 unsigned char my_template[]= { 0xFF,0xFE,0x3C, ... ,0x00 // 本例中数据数组被缩短 }; //--- 保存和应用模板 if(FileSave("my_template.tpl",my_template)) { Print("Custom template saved in \\MQL5\\Files"); if(ChartApplyTemplate(0,"\\Files\\my_template.tpl")) Print("Custom template applied to the current chart"); else Print("Failed to apply custom template"); } else Print("Failed to save custom template"); }
函数 | 行为 |
---|---|
CustomSymbolCreate | 在指定组以指定名称创建一个自定义交易品种 |
CustomSymbolDelete | 删除指定名称的自定义交易品种 |
CustomSymbolSetInteger | 为自定义交易品种设置整型属性值 |
CustomSymbolSetDouble | 为自定义交易品种设置真实型属性值 |
CustomSymbolSetString | 为自定义交易品种设置字符串类型属性值 |
CustomSymbolSetMarginRate | 根据订单类型和方向为自定义交易品种设置预付款比例 |
CustomSymbolSetSessionQuote | 为指定交易品种和工作日设置指定报价期的起止时间 |
CustomSymbolSetSessionTrade | 为指定交易品种和工作日设置指定交易时期的起止时间 |
CustomRatesDelete | 在指定时间间隔内从自定义交易品种的价格历史记录中删除所有柱形图 |
CustomRatesReplace | 在指定时间间隔内用MqlRates类型数组的数据完全替换自定义交易品种的价格历史记录 |
CustomRatesUpdate | 将缺失的柱形图添加到自定义交易品种的历史记录并用MqlRates类型数组的数据替换现有的数据 |
CustomTicksAdd | 将MqlTick类型的数组数据添加到自定义交易品种的价格历史记录。自定义交易品种必须在市场报价窗口中选择。 |
CustomTicksDelete | 在指定时间间隔内从自定义交易品种的价格历史记录中删除所有报价 |
CustomTicksReplace | 在指定时间间隔内用MqlTick类型数组的数据完全替换自定义交易品种的价格历史记录 |
程序库位于程序端工作目录的Include\Generic文件夹。
bool ArraySwap( void& array1[], // 第一数组 void& array2[] // 第二数组 );这个函数接受相同类型和相同维度的动态数组。对于多维数组,除了第一元素以外,所有维度中的元素数量都应该匹配。