MetaTrader 5新功能

桌面版,移动版和网页平台的更新历史

5 八月 2016
MetaTrader 5 Android build 1338
  •  内置 MQL5.community 的新聊天。
  •  从桌面平台转移SSL证书的新选项。
  •  波斯语和荷兰语的新翻译界面。
15 七月 2016
MetaTrader 5 Build 1375:时间&销售和访问测试期间的报价

程序端

  1. 时间&销售功能已添加到市场深度。




    时间&销售是什么?
    时间&销售功能就是提供金融市场上执行的每一笔交易的价格和时间。每笔交易的信息包括 交易执行时间,交易方向(买或卖)以及交易价格和交易量。为了方便视觉分析,使用不同的颜色指示不同的交易方向:蓝色用于买入交易,粉色用于卖出交易,绿 色表示未定义方向。交易量另外显示在直方图。

    时间&销售可以如何帮您了解市场
    时间&销售功能提供了更详细的市场分析工具。交易方向表示谁发起的交易:买家还是卖家。交易的成交量允许交易者了解市场参与者的行为:交易是由大型市场玩家还是小型市场玩家来执行以及评估玩家的行为。交易执行速度和各个价位的交易量有助于交易者评估级别的重要性。

    如何使用时间&销售数据
    除了视觉分析表格,您还可以保存交易详情为CSV文件。另外,它们还可以使用任何其他软件进行分析,例如MS Excel。文件包括逗号分隔数据:
    时间,卖价,买价,最后价,交易量,类型
    2016.07.06 16:05:04.305,89360,89370,89370,4,Buy
    2016.07.06 16:05:04.422,89360,89370,89370,2,Buy
    2016.07.06 16:05:04.422,89360,89370,89370,10,Buy
    2016.07.06 16:05:04.669,89360,89370,89370,1,Buy
    2016.07.06 16:05:05.968,89360,89370,89360,7,Sell
    如果您想保存数据到一个文件,请打开快捷菜单:



    交易商平台应该升级到1375版,以启用合适的交易方向检测。
  2. 到达新报价/市场深度改变与调用OnTick和OnCalculate之间的时间已经明显减少。同时交易状况改变和调用OnTick和OnCalculate之间的时间也已经减少。现在MQL5程序提供更快速的反应市场事件。
  3. 使用SSL证书扩大权限时,现在发送交易请求更加快速。
  4. 更新了波斯语的用户界面翻译。
  5. 修正了锁仓模式工作时图表快捷菜单止损/止盈设置命令的展示。

Tester

  1. 新tester允许在使用CopyTicks函数测试时请求报价历史记录。在早期版本中,策略测试不可访问报价。

    • 在“每个报价”模式中,函数返回生成报价的历史记录。最多可以请求128,000个最近报价。
    • 在“基于真实报价的每个报价”模式中,函数将返回真实报价的历史记录。请求数据的深度取决于可用的历史数据。然而,请注意最近的128,000个报价缓存在策略测试,请求将会快速执行。硬盘会请求更深层次的历史记录,所以请求执行可能会需要更多的时间。
    • 该函数不会在“只开盘价”和“1分钟OHLC”模式下工作,因为报价历史没有在该模式中被创建。

  2. 添加支持毫秒。在之前版本中,策略测试的时间段等于1秒。

    • 现在EventSetMillisecondTimer 和 Sleep 函数会使Tester中的时间更准确。
    • 多 货币EA测试期间报价源的准确性得到提高。早期版本,如果1秒包含多个报价(例如1分钟柱形图的跳动量超过60),那么会为这些报价设置相同的时间。无所 谓是否测试单货币EA交易,因为报价会按顺序传递到EA交易。但是,当您在多个货币对上测试EA交易时,了解这个报价首先到达的货币对非常重要。早期版 本,每个交易品种的报价都会按顺序传递到EA交易:首先,一个交易品种一秒内的所有报价,然后是另一个交易品种的所有报价。现在可以通过毫秒发送它们了。

      当真实报价用于测试时,从原报价数据就会考虑毫秒。报价生成时,会根据跳动量设置毫秒。例如,如果一秒内对应3个报价,它们的毫秒将等于000,333和666。

  3. 在“只开盘价”和“1分钟OHLC”模式下,挂单和止损/止盈订单现在在请求价格执行,而不是执行时的当前价。以精 确模式(每个报价和真实报价)使用的市场价格执行的算法不适合不太准确的模式。在一些模式下不会生成中间报价,因此请求订单价和当前价(开盘价或 OHLC)之间的差异非常明显。“只开盘价”和“1分钟OHLC”请求价格的执行订单提供了更加准确的测试结果。

  4. 添加可视模式下支持前测。现在可以为后测和前测打开两个独立的窗口,允许用户在不同的时间间隔对比EA交易的性能。




    前测窗口只在主要周期测试完成后打开。

  5. 入金加载替代预付款水平显示在主测试图表。加载情况根据预付款/净值比率进行计算。


  6. 修正测试期间每年按百分比计算手续费。

  7. 修正测试进行中生成的图表上的结余计算和展示。

MQL5

  1. 已经改变OrderSend函数在下单,更改和取消期间的行为。这些变化仅应用于发送到外部交易系统的订单。早期版本中,在交易商服务器成功下单(处理) 后返回OrderSend 函数管理。现在,这种管理仅在交易商服务器收到外部交易系统通知后返回,通知系统已经成功下单。

    下图显示了函数之前(红箭头)和当前的行为:




  2. MqlTradeResult结构的新字段:retcode_external - 外部交易系统的错误代码。这些错误的使用和类型取决于交易操作发送的交易商和外部交易系统。例如,通过莫斯科交易所成交的 retcode_external 值不同于DGCX返回的值。

  3. ENUM_CHART_PROPERTY_STRING 枚举的新属性:CHART_EXPERT_NAME 和 CHART_SCRIPT_NAME。现在,ChartGetString函数允许用户找出附在chart_id参数定义的图表上的EA交易和/或脚本的 名称。

信号

  1. 修正由于复制'close by '操作失败而偶尔产生的错误。
  2. 改进自动匹配货币组,包括RUB和RUR。

市场

  1. 修正通过产品类别排序。

MetaEditor

  1. 修正打开替换对话框时在替换文本字段设置焦点。
  2. 修正从当前持仓开始向上搜索时替换出现的多个文本。
更新文档。
5 七月 2016
MetaTrader 5 网页平台:官方发布

公开测试两个月后,多元化MetaTrader 5 平台网页版 现已官方对外发布。它允许从任何浏览器和任何操作系统进行外汇和金融市场交易。仅需网络连接即可,无需安装任何软件。

该应用将桌面版的主要优势(高速,支持多元化市场和扩展的交易功能)与网页程序端的便利性和跨平台特性相结合。该发布版的主要功能在于测试版中所没有的市场深度。

网页平台允许交易者执行技术分析和交易操作,就像在桌面版一样。网页平台提供以下特性:

  • 净额和锁仓持仓账户系统
  • 31 种技术指标
  • 23 种分析对象
  • 一键交易和一整套的交易订单
  • 41 种界面语言
19 五月 2016
MetaTrader 5 iOS build 1335

现在从桌面平台转移SSL证书到移动平台更加容易。您不再需要iTunes去完成它。

MetaTrader 5允许您通过使用证书为您的账户添加额外保护。没有证书,则无法连接。如果证书在桌面版创建,您应该能够通过移动设备进入您的账户转移它。

为此,请打开桌面平台,在导航窗口右击所需的账户,并选择转移。设置只有您知道的证书密码,打开移动平台,连接您的账户。您将被立即提供导入证书。

此外,最新版还具有从MetaTrader 4转移账户的迁移对话框。如果您的账户已经转移到第五代交易平台,我们热烈欢迎,并提供有关新特性的信息和要求更改您的密码。

13 五月 2016
新的MetaTrader 5 平台 build 1340:便利的证书转移和改进的策略测试

程序端

  1. 现在用于先进安全连接的证书可以方便地从桌面平台转移到移动程序端。

    交易平台支持扩展认证,通过使用除了密码以外的SSL证书保护交易账户。证书是一个交易服务器上为账户独立生成的文件。该文件是唯一的,没有证书无法完成账户连接。

    在早期的平台版本,所要求的从桌面程序端生成的任何证书都需要手动复制并安装在启用交易账户的MetaTrader 5 iPhone/iPadAndroid 移动设备上。现在,证书可以方便地转移了。


    证书转移过程
    通过交易服务器转移证书:

    • 证书首先在桌面程序端加密:账户所有者使用安全的AES - 256算法为证书加密设置密码。该密码只有使用者知道,而不会发送至服务器。
    • 另外,加密的证书发送至交易服务器,并在此存储直至移动程序端接收,但不会超过一个小时。
    • 若要在移动设备上接收证书,用户必须连接到移动程序端的交易账户。连接后,用户提示导入证书。进行导入时,用户需要指定桌面程序端用于证书加密的密码 。

    证书转移过程非常安全:交易服务器仅用作中间存储,而证书由客户方加密。证书密码不会传到或存储在交易服务器上。
    如何转移证书
    连接您桌面程序端的账户,在快捷菜单中选择"转移证书":



    输入该账户的主密码来确认它属于您。下一步,将其发送到服务器之前,设置一个保护证书的密码。设置的密码至少8位数。

    成功发送证书到服务器之后,打开移动程序端并连接您的账户。您将被立即提示导入证书。确认并输入您在桌面程序端设置的密码。



    您可以在 "关于 — 证书" 部分查看导入证书。
    不久的将来更新的支持证书转移的MetaTrader 5 iPhone/iPad 和 Android平台将会发布。

Tester

  1. 执行挂单,以及SL和TP的更新算法,它将提供更精确的测试条件。视觉测试高级选项。

    交易工具的新功能
    在真实市场中,交易所交易工具图表基于最终价信息生成(最后执行的交易价格)。止损订单也在最终价起动限价订单在卖价和买价起动。所有的订单类型经常在当前市场的卖价/买价执行。策略测试已被更新,现在更好的模拟真实的市场状况:
      之前 之后
    起动 所有挂单类型和SL/TP的卖价/买价 限价订单卖价/买价
    最终止损,止损限价和SL/TP订单
    执行 所有挂单类型和SL/TP的订单指定价格 所有挂单类型和SL/TP的订单起动时的卖价/买价

    让我们考虑Si-6.16 交易品种的示例。起动价格的新买入止损订单 = 设定72580 而当前价格是:Bid=72570,Ask=72572,Last=72552。在价格流新收到的当前价格:

    • Bid=72588
    • Ask=72590
    • Last=72580


    起动交易工具止损订单的是最终价。所以价格流中收到的Last price=72580 激活买入止损订单。在早期版本中,相同价格将用于执行该订单。这个行为是错误的,因为市场中没有Ask=72580 执行买入交易。


    当前 Ask=72590 被用于更新的tester版,所以买入止损订单在该价格执行。Tester 中新的交易执行算法更接近真实市场条件。使用之前算法时,交易操作将以非市场价执行,这将会导致测试结果不准确。

    其他工具的新功能
    其他工具的算法没有改变:用于所有挂单类型,以及SL和TP 的卖价/买价。然而,执行模式已经改变:在早期版本中,以订单中指定的价格执行订单。现在使用根据订单激活时间的市场卖价和买价。

    视觉测试的新功能
    视觉测试期间,柱形图的最高买价线和最低卖价线现在显示在tester。在该图表上,更方便测试交易所工具的EA交易,因为这种工具的柱形图以及起动的订单都是根据最终价完成,而市场操作以卖价和买价执行。



    视觉测试图表的新选项:导航到指定日期。双击图表,输入想要的日期和时间。也可以导航到任何订单或交易:在交易,历史或操作选项卡双击相应的交易操作。
  2. 扩展测试开始前加载的有关价格和报价历史的日志记录信息。现在日志包含有关历史加载完成的信息,以及下载的数据量和花费的时间:
    2016.05.10 12:47:53    Core 1    5.10 Mb 已处理历史记录 0:00.842
    2016.05.10 12:47:53    Core 1    GBPUSD:历史同步完成 [5225 Kb]


MQL5

  1. 修正CopyTicks函数的行为:它将返回比要求更低的报价。
  2. 修正生成的模板函数。
  3. 更新文档。

更新内容将通过LiveUpdate系统提供。

12 五月 2016
MetaTrader 5 网页平台:现已提供测试

MetaTrader 5 网页平台测试版现已发布。新产品将网页程序端的便利性和跨平台的特性与MetaTrader 5桌面版的优势相结合 – 高速,支持多元化市场和扩展的交易功能。

MetaTrader 5 网页平台可在MQL5.community上使用,它允许交易者从任何浏览器和操作系统,包括Windows,Mac和Linux,执行金融市场的交易操作。您只需要一个网络连接。不需要额外的软件。

测试版拥有以下特性:

  • 锁仓系统
  • 30种技术指标
  • 24种分析对象
  • 一整套的 MetaTrader 5 交易订单
  • 41 种界面语言
发布测试版的目的在于提供全球化的公开测试,使交易者能够评估它的新性能。
22 四月 2016
新版MetaTrader 5 build 1325:锁仓选项和实时报价测试

程序端

  1. 我们已经添加第二个账户系统—锁仓,该新系统能够扩大零售外汇交易者的可能性。现在,每个交易品种可以有多个持仓,包括反向持仓。这就为实施基于所谓“锁定”的交易策略铺平道路 — 如果价格对交易者反向移动,他们可以打开一个反向持仓。

    由于新系统类似于在MetaTrader 4中使用的系统,它将被交易者所熟知。与此同时,交易者将能够享受第五代平台版本的全部优势 — 使用多个交易填写订单 (包括部分填充),支持MQL5 云网络的多货币和多线程测试等等。

    现在,您可以使用一个账户从事依附于净额系统,一个工具仅允许一个持仓的市场交易,以及在同一个平台使用另一个账户从事外汇交易和使用锁仓。

    新建锁仓账户,查看持仓账户类型
    持仓账户系统设置在一个账户水平,并显示在程序端窗口标题和日志:



    要新建一个锁仓模拟账户,请启用相应选项: 




    净额系统
    通过这个系统,在同一时间,一个交易品种您只能有一个普通持仓:

    • 如果一个交易品种有一个持仓,同向执行一个交易会提高该持仓的交易量。
    • 如果反向执行交易,那么现有的交易量可能减少,持仓可能会被关闭 (成交交易量等于持仓交易量时) 或撤销 (如果反向成交的交易量大于当前持仓)。

    这没关系,导致反向交易的是 — 已执行的市场订单或触发的挂单。

    下面示例显示了执行两个每笔0.5手的EURUSD买入交易:


    执行这两个交易即是1手的一个普通持仓。

    锁仓系统
    通过这个系统,您可以一个交易品种拥有多个持仓,包括反向持仓。

    如果您有一个交易品种的持仓,执行一个新交易(或触发挂单),那么会另外建立一个新持仓。您当前持仓不会改变。

    下面示例显示了执行两个每笔0.5手的EURUSD买入交易:


    执行这些交易则会新建两个独立的持仓。

    新交易操作类型 - Close By
    新的交易类型已经被加入锁仓账户 — 通过反向持仓来平仓。这个操作允许在单一交易品种关闭两个反向的持仓。如果反向持仓手数不同,那么两个持仓中只有一个订单保留持仓。其交易量将等于平仓手数的差异值,而持仓方向和开盘价将匹配平仓的更大(交易量)。

    相比单独关闭两个持仓,关闭反向持仓允许交易者保留一个点差:

    • 单独平仓情况下,交易者必须支付一个点差两次:以低价位(卖价)关闭买入持仓和高价位关闭卖出持仓(买价)。
    • 使用反向持仓时,第二个持仓的开盘价被用于关闭第一个持仓,而第一个持仓的开盘价被用于关闭第二个持仓。


    在后面那种情况下,下单"close by" 订单。平仓信息在该评论指明。一组反向持仓通过两个"out by"交易关闭。关闭两个持仓得到的总利润/亏损只在一个交易中指明。


  2. 除了支持锁仓外,新版平台还为从MetaTrader 4迁移账户提供了更广泛的机会。现在,交易商可以自动转移账户到MetaTrader 5,包括所有的操作:持仓和挂单,完成交易历史。

    首次连接从MetaTrader 4迁移的账户时会打开一个欢迎对话框。在迁移过程中,数据的传输安全加密。若要开始使用,请指定您在MetaTrader 4使用的账户密码,然后设置一个新密码。



    连接一旦成功,您将可以继续使用您的账户,就好似它已在MetaTrader 5持仓。来自MetaTrader 4所有交易的完整历史记录会自动添加到新账户。

    订单和持仓(包括历史订单)标签在导入过程中不会保留,因为从MetaTrader 4导入一个历史记录可能相当于MetaTrader 5中的4个历史操作。所有的交易记录都会分配新的标签。

    根据交易商导入的方式可以保留或替代账号。

  3. 程序端:新增聊天功能。现在,您可以与您的MQL5.community朋友和同事进行交流沟通了。聊天显示了您MQL5 账户的所有个人信息。开始沟通时,可以直接从聊天窗口登录您的账户或通过平台设置登录:工具 -> 选项 -> 社区。




  4. 程序端:简化的模拟账户创建对话框,添加创建锁仓账户的能力。您不再需要填写大表格。只需指定基本数据和选择交易参数:账户类型,入金,杠杆和锁仓功能。




  5. 添加自动分配模拟账户以便快速启动。如果平台还没有账户,第一个可用交易服务器上的模拟账户会在启动时分配。成功打开后,账户连接马上建立。

  6. 现在,每个持仓有一个标签 — 一个独一无二的号码。它通常匹配用于持仓的订单标签,除非标签更改为服务器上服务操作的结果,例如,收取重新持仓库存费时。程序端更新后,标签被自动分配到所有可用持仓。



  7. 修正建立导致持仓反转的市场订单时设置的止损和获利水平。直到目前,没有适当的水平设置给新持仓。
  8. 修正单击交易面板上显示4位及更多小数位的价格。
  9. 修正打印预览窗口的新闻显示。
  10. 修正报价图表显示。
  11. 修正程序端紧急关闭后打开市场深度。
  12. 添加如果显示单击交易面板控制元素时允许市场订单的检查。
  13. 假设大量新建订单和持仓情况下,优化利润和预付款计算。
  14. 添加用户界面的马来语翻译。
  15. 完全修改后的用户手册。新设计,交互式屏幕截图和嵌入式视频 — 以最大的方便性了解MetaTrader 5的交易:



  16. 修正"前景图表"模式下图形对象的展示。

Tester

  1. 新增在实时报价历史测试自动交易和技术指标的能力。

    真实报价的测试和优化尽可能地接近实际情况。代替基于分钟数据生成的报价,现在可以使用交易商积累的真实报价。有许多来自交易商和流动量提供商的报价。

    若要开始测试或优化真实报价,请在策略测试选择相应的模式:



    报价数据的大小要比分钟数据大。第一次测试期间,下载它可能需要较长的世界。按月下载的报价数据被存储在TKC文件,在 \bases\[trade server name]\ticks\[symbol name]\。
    测试真实报价
    当测试一个真实报价时,一分钟柱内的点差可能改变,因此生成一分钟报价时,使用相应柱固定的点差。

    如果一个交易品种显示市场深度,那么柱形图会严格根据最后执行的交易价格(Last)来构建。否则,tester会根据收盘价首次尝试构建柱形图,如果这些价格不存在,则使用卖价。无论收盘价是否存在,所有报价上都会触发OnTick 事件。

    请 注意,即使根据收盘价构建图表,交易操作也会始终根据卖价和买价执行。例如,如果仅使用开盘柱进行交易的EA交易(例如内置移动平均指标)收到了收盘价信 号,它以另一个价格执行一个交易(取决于方向的买价或卖价)。如果使用“每一报价”模式,柱形图通过卖价构建,而交易通过卖价和买价执行。买价作为卖价+ 对应分钟柱固定点差来计算。

    如果交易品种历史有一个无报价数据的分钟柱,tester 在“每一报价”模式下生成报价。这允许测试一定时期内的EA,以防交易商报价数据的不足。如果交易品种历史记录没有分钟柱但是有适当的分钟报价数据,那么这些报价可以忽略。分钟数据被认为更可靠。

    在MQL5 云网络测试真实报价
    测试真实报价现在不仅可用于本地和远程代理,还可以通过MQL5 云网络实现。可能需要几个月的策略优化,通过数千台电脑的计算能力,可能几个小时就可完成。

    若要使用MQL5云网络测试策略,请启动使用云代理:



    使用MQL5云网络测试真实报价可以消耗大量的数据。这可以显著影响使用网络能力的支付。
  2. 修正几个交易品种类型上妨碍计算手续费的错误。
  3. 修正根据相应持仓的专家字段填写激活SL/TP得到的交易订单的专家字段。之前,不填写这些内容。
  4. 修正切换到通常状态并进一步优化结果的标签。
  5. 修正计算和显示“轨道线”指标。
  6. 优化可视化测试。
  7. 优化了大量新建订单和持仓时的利润和预付款计算。
  8. 优化高频交易期间的交易操作。
  9. 现在,如果是非关键交易品种属性请求(不需要当前报价),则不执行历史同步。例 如,SYMBOL_SELECT,SYMBOL_DIGITS,SYMBOL_SPREAD_FLOAT,SYMBOL_TRADE_CALC_MODE,SYMBOL_TRADE_MODE,SYMBOL_TRADE_STOPS_LEVEL,SYMBOL_TRADE_FREEZE_LEVEL,SYMBOL_TRADE_EXEMODE 等等。之前,非关键交易品种历史记录在其属性的任何请求下都会同步。
  10. 修正按照每年比例计算库存费。ixed calculation of swaps as a percentage per annum.

MQL5

  1. 可执行文件EX5的格式已经变成实施MQL5语言的新功能和MetaTrader 5的新锁仓选项。通过之前版本MetaEditor编译的所有EX5应用程序更新后将能正常工作,例如正向兼容性完全保留。

    build 1325及以上版本编译的EX5程序将无法在旧版构建的程序端运行 - 不支持反向兼容性。

  2. 添加支持抽象类和纯虚函数。

    抽象类用于创建您期待用于创建更具体派生类的通用实体。抽象类仅能用作一些其他类的基本类,这就是不能创建抽象类类型对象的原因。

    至少包含一个纯虚拟函数的类是抽象类。因此,从抽象类派生出来的类必须实施其所有纯虚拟函数,否则它们也将是抽象类。

    虚拟函数通过使用pure-specifier语法声明为"pure"。考虑CAnimal类的示例,它的创建只能提供常用功能 – CAnimal类型的对象对于实际使用太普通。因此,CAnimal 是一个很好的抽象类示例:
    class CAnimal
      {
    public:
                          CAnimal();     // 构造函数
       virtual void       Sound() = 0;   // 纯虚拟函数
    private:
       double             m_legs_count;  // 动物脚的数量
      };
    这里Sound() 是一个纯虚拟函数,因为它声明为纯虚拟函数PURE (=0)的说明符。

    纯虚拟函数只是为设置PURE说明符的虚拟函数:(=NULL) 或(=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();
         //--- 构造函数或析构函数始终调用自己的函数,
         //--- 即使它们是虚拟函数并且已经被派生类中已调用的函数所覆盖
         //--- 如果调用的函数是纯虚拟函数
         //--- 调用会引起“纯虚拟函数调用”的关键的执行错误
        }
      };
    然而,抽象类的构造函数和析构函数可以调用其他成员函数。

  3. 添加支持函数指针来简化事件模式的安排。

    若要声明一个函数指针,请指定"函数指针"类型,例如:
    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));    // 错误:应该有两个参数
    函数指针可以被存储并作为参数传递。您不能得到非静态类函数的指针。

  4. MQL5:MqlTradeRequest 有两个新字段:

    • position — 持仓标签。锁仓模式交易下为了明确识别而改变和关闭持仓时来填写。在净额系统,填写字段不会有任何影响,因为持仓只识别一个交易品种名称。
    • position_by — 反向持仓标签。它用于通过反向持仓平仓时(打开一个同名但反向的交易品种)。该标签仅用于锁仓系统。

  5. 添加TRADE_ACTION_CLOSE_BY 值到 ENUM_TRADE_REQUEST_ACTIONS 交易操作类型枚举 — 通过反向持仓。该标签仅用于锁仓系统。

  6. 添加交易操作标签到适当订单,交易和持仓属性的枚举:

    • 添加ORDER_TICKET 属性到 ENUM_ORDER_PROPERTY_INTEGER — 订单标签。每个订单会分配一个独一无二的号码。
    • 添加 DEAL_TICKET 属性到 ENUM_DEAL_PROPERTY_INTEGER — 交易标签。每笔交易会分配一个独一无二的号码。
    • 添加POSITION_TICKET 属性到 ENUM_POSITION_PROPERTY_INTEGER — 持仓标签。每个新持仓会分配一个独一无二的号码。它通常匹配用于持仓的订单标签,除非标签更改为服务器上服务操作的结果,例如,收取重新持仓库存费时。若 要找出一个用于持仓的订单,请应用POSITION_IDENTIFIER 属性。POSITION_TICKET 值对应MqlTradeRequest::position。

  7. 添加ORDER_TYPE_CLOSE_BY 值到 ENUM_ORDER_TYPE 订单类型枚举 — close by 订单。
  8. 添加ORDER_POSITION_BY_ID 值到 ENUM_ORDER_PROPERTY_INTEGER 订单属性枚举 — ORDER_TYPE_CLOSE_BY 类型订单的反向持仓标识符。
  9. 添加DEAL_ENTRY_OUT_BY 值到 ENUM_DEAL_ENTRY 交易方向枚举 — 由close by操作执行交易。
  10. MqlTradeTransaction 也有两个类似的字段:


    • position — 由交易活动影响的持仓标签。这里填写处理市场订单(TRADE_TRANSACTION_ORDER_* except TRADE_TRANSACTION_ORDER_ADD,在这里持仓标签尚未分配) 和订单历史(TRADE_TRANSACTION_HISTORY_*)相关的交易活动。
    • position_by — 反向持仓标签。它用于通过反向持仓平仓时(打开一个同名但反向的交易品种)。这里只填写通过反向持仓而平仓的订单 (close by) 和通过反向持仓而关闭的交易 (out by)。

  11. 添加PositionGetTicket 函数 — 根据持仓列表的索引返回一个持仓标签和使用PositionGetDouble, PositionGetInteger 和PositionGetString函数自动选择持仓用于进一步工作。
    ulong  PositionGetTicket(
       int  index      // 持仓列表索引
       );

  12. 添加PositionSelectByTicket 函数 — 通过指定标签为进一步工作选择一个持仓。
    bool  PositionSelectByTicket(
       ulong   ticket     // 持仓标签
       );

  13. 添加SYMBOL_MARGIN_HEDGED 值到 ENUM_SYMBOL_INFO_DOUBLE 交易品种属性枚举 — 合约大小或一手锁仓预付款(一个交易品种的反向持仓)。

    • 如果一个交易品种指定了初始预付款 (SYMBOL_MARGIN_INITIAL),锁仓预付款被指定为绝对值(以货币计算)。
    • 如果没有设置初始预付款(等于0),预付款计算中将被使用的合约大小在SYMBOL_MARGIN_HEDGED指定。预付款使用对应一个交易品种类型 (SYMBOL_TRADE_CALC_MODE)的等式计算。

    锁仓预付款计算的详细信息会在MetaTrader 5 交易平台帮助中说明。

  14. 添加ACCOUNT_MARGIN_MODE 值到 ENUM_ACCOUNT_INFO_INTEGER 账户属性枚举 — 当前交易账户的预付款计算模式:

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING — 用于净额模式账户持仓时的场外交易市场(一个交易品种一个持仓)。预付款计算基于交易品种类型 (SYMBOL_TRADE_CALC_MODE)。
    • ACCOUNT_MARGIN_MODE_EXCHANGE — 用于交易所市场。预付款计算基于交易品种设置中指定的折扣。折扣由交易商设置,但是它们不能低于交易所设置的值。
    • ACCOUNT_MARGIN_MODE_RETAIL_HEDGING — 用于独立持仓账户场外交易市场(锁仓,一个单一交易品种可以有多个持仓)。预付款计算基于交易品种类型 (SYMBOL_TRADE_CALC_MODE)。也要考虑锁仓预付款大小 (SYMBOL_MARGIN_HEDGED) 。

  15. 添加TERMINAL_SCREEN_DPI 值到 ENUM_TERMINAL_INFO_INTEGER 客户端属性枚举 — 分辨率显示数据通过每英寸的点数来衡量 (DPI)。该参数的信息允许指定图形对象的大小,这样它们在不同分辨率的显示器上看起来一样。

  16. 添加 TERMINAL_PING_LAST 值到 ENUM_TERMINAL_INFO_INTEGER 客户端属性 — 以微秒计算交易服务器最后得到的ping值。一秒等于一百万微秒。

  17. 修正返回SendFTP函数调用结果。之前,成功发送后返回 FALSE 而不是 TRUE。
  18. 修正偶尔导致"违规访问"执行错误的StringConcatenate函数错误。
  19. 修正使用模板函数时发生的几个错误。
  20. 添加为打印,警示和评论功能显示超过4000字符行的能力。
  21. 修正ArrayCompare函数通过不同于开始时期的初始持仓变化来比较数组和函数本身时产生的错误。
  22. 添加支持标准库的锁仓功能:

    CPosition
    添加类函数:

    • SelectByMagic — 根据魔幻数选择持仓和进一步工作的交易品种。
    • SelectByTicket — 通过进一步工作的标签选择持仓。

    CTrade
    添加类函数:

    • RequestPosition — 收到持仓标签。
    • RequestPositionBy — 接收反向持仓标签。
    • PositionCloseBy — 通过反向持仓支持标签平仓。
    • SetMarginMode — 根据当前账户设置来设置预付款计算模式。

    添加重载类函数:

    • PositionClose — 平仓标签。
    • PositionModify — 修改持仓标签。

    CAccountInfo
    改变类函数:

    • MarginMode — 接收预付款计算模式。直至目前,类函数的工作类似于新的StopoutMode 类函数。
    • MarginDescription — 接收预付款计算模式为字符串。直至目前,类函数的工作类似于新的StopoutModeDescription类函数

    添加类函数:

    • StopoutMode — 接收最小预付款水平规范模式。
    • StopoutModeDescription — 接收最小预付款水平规范模式为字符串。

    CExpert
    添加类函数:

    • SelectPosition — 为进一步工作选择持仓。

  23. 对标准程序库添加一些改进。
  24. 修正卸载DLLs。
  25. 添加支持模板类构造函数。

信号:

  1. 修正几个交易信号窗显示错误。

MetaEditor

  1. 修正“全字匹配”模式下文件的搜索词。
  2. 添加在所需文件的编译结果行上双击移动到一个文件。
  3. 修正显示Windows XP中的一些控制元素。
更新文档。
1 四月 2016
MetaTrader 5 平台 Build 1295

程序端

  1. 为了扩展零售外汇交易者的可能性,我们添加了第二账户系统 — 锁仓。现在,每个交易品种可以有多个持仓,包括反向持仓。这就为实施基于所谓“锁定”的交易策略铺平道路 — 如果价格对交易者反向移动,他们可以打开一个反向持仓。

    由于新系统类似于在MetaTrader 4中使用的系统,它将被交易者所熟知。与此同时,交易者将能够享受第五代平台版本的全部优势 — 使用多个交易填写订单 (包括部分填充),支持MQL5 云网络的多货币和多线程测试等等。

    现在,您可以使用一个账户从事依附于净额系统,一个工具仅允许一个持仓的市场交易,以及在同一个平台使用另一个账户从事外汇交易和使用锁仓。

    新建锁仓账户,查看持仓账户类型
    持仓账户系统设置在一个账户水平,并显示在程序端窗口标题和日志:



    要新建一个锁仓模拟账户,请启用相应选项:




    净额系统
    通过这个系统,在同一时间,一个交易品种您只能有一个普通持仓:

    • 如果一个交易品种有一个持仓,同向执行一个交易会提高该持仓的交易量。
    • 如果反向执行交易,那么现有的交易量可能减少,持仓可能会被关闭 (成交交易量等于持仓交易量时) 或撤销 (如果反向成交的交易量大于当前持仓)。


    这没关系,导致反向交易的是 — 已执行的市场订单或触发的挂单。

    下面示例显示了执行两个每笔0.5手的EURUSD买入交易:


    执行这两个交易即是1手的一个普通持仓。

    锁仓系统
    通过这个系统,您可以一个交易品种拥有多个持仓,包括反向持仓。

    如果您有一个交易品种的持仓,执行一个新交易(或触发挂单),那么会另外建立一个新持仓。您当前持仓不会改变。

    下面示例显示了执行两个每笔0.5手的EURUSD买入交易:


    执行这些交易则会新建两个独立的持仓。

    新交易操作类型 - Close By
    新的交易类型已经被加入锁仓账户 — 通过反向持仓来平仓。这个操作允许在单一交易品种关闭两个反向的持仓。如果反向持仓手数不同,那么两个持仓中只有一个订单保留持仓。其交易量将等于平仓手数的差异值,而持仓方向和开盘价将匹配平仓的更大(交易量)。

    相比单独关闭两个持仓,关闭反向持仓允许交易者保留一个点差:

    • 单独平仓情况下,交易者必须支付一个点差两次:以低价位(卖价)关闭买入持仓和高价位关闭卖出持仓(买价)。
    • 使用反向持仓时,第二个持仓的开盘价被用于关闭第一个持仓,而第一个持仓的开盘价被用于关闭第二个持仓。


    在后面那种情况下,下单"close by" 订单。平仓信息在该评论指明。一组反向持仓通过两个"out by"交易关闭。关闭两个持仓得到的总利润/亏损只在一个交易中指明。



  2. 新增在实时报价历史测试自动交易和技术指标的能力。

    真实报价的测试和优化尽可能地接近实际情况。代替基于分钟数据生成的报价,现在可以使用交易商积累的真实报价。有许多来自交易商和流动量提供商的报价。

    若要开始测试或优化真实报价,请在策略中选择相应的模式



    报价数据的大小要比分钟数据大。第一次测试期间,下载它可能需要较长的世界。按月下载的报价数据被存储在TKC文件,在 \bases\[trade server name]\ticks\[symbol name]\。

    测试真实报价
    当测试一个真实报价时,一分钟柱内的点差可能改变,因此生成一分钟报价时,使用相应柱固定的点差。

    如果一个交易品种显示市场深度,那么柱形图会严格根据最后执行的交易价格(Last)来构建。否则,tester会根据收盘价首次尝试构建柱形图,如果这些价格不存在,则使用卖价。无论收盘价是否存在,所有报价上都会触发OnTick 事件。

    请注意,即使根据收盘价构建图表,交易操作也会始终根据卖价和买价执行。例如,如果仅使用开盘柱进行交易的EA交易(例如内置移动平均指标)收到了收盘价信号,它以另一个价格执行一个交易(取决于方向的买价或卖价)。如果使用“每一报价”模式,柱形图通过卖价构建,而交易通过卖价和买价执行。买价作为卖价+对应分钟柱固定点差来计算。

    如果交易品种历史有一个无报价数据的分钟柱,tester 在“每一报价”模式下生成报价。这允许测试一定时期内的EA,以防交易商报价数据的不足。如果交易品种历史记录没有分钟柱但是有适当的分钟报价数据,那么这些报价可以忽略。分钟数据被认为更可靠。
    目前,真实报价的测试和优化仅可能在本地和远程代理。支持MQL5 云网络 在不久的将来也会加入。

  3. Added the Chat. 现在,您可以与您的MQL5.community朋友和同事进行交流沟通了。聊天显示了您MQL5 账户的所有个人信息。开始沟通时,可以直接从聊天窗口登录您的账户或通过平台设置登录:工具 -> 选项 -> 社区。




  4. 简化的模拟账户创建对话框,添加创建锁仓账户的能力。您不再需要填写大表格。只需指定基本数据和选择交易参数:账户类型,入金,杠杆和锁仓功能。



  5. 添加自动分配模拟账户以便快速启动。如果平台还没有账户,第一个可用交易服务器上的模拟账户会在启动时分配。成功打开后,账户连接马上建立。

  6. 现在,每个持仓有一个标签 — 一个独一无二的号码。它通常匹配用于持仓的订单标签,除非标签更改为服务器上服务操作的结果,例如,收取重新持仓库存费时。程序端更新后,标签被自动分配到所有可用持仓。




  7. 修正建立导致持仓反转的市场订单时设置的止损和获利水平。直到目前,没有适当的水平设置给新持仓。
  8. 修正单击交易面板上显示4位及更多小数位的价格。
  9. 修正打印预览窗口的新闻显示。
  10. 修正报价图表显示。
  11. 修正程序端紧急关闭后打开市场深度。
  12. 添加如果显示单击交易面板控制元素时允许市场订单的检查。
  13. 假设大量新建订单和持仓情况下,优化利润和预付款计算。
  14. 添加用户界面的马来语翻译。
  15. 全修改后的用户手册。新设计,交互式屏幕截图和嵌入式视频 — 以最大的方便性了解MetaTrader 5的交易:




MQL5

  1. 添加支持抽象类和纯虚函数。

    抽象类用于创建通用实体,这就是您期待用于创建更具体的派生类。抽象类仅能用作一些其他类的基本类,这就是不能创建抽象类类型对象的原因。

    至少包含一个纯虚拟函数的类是抽象类。因此,从抽象类派生出来的类必须实施其所有纯虚拟函数,否则它们也将是抽象类。

    虚拟函数通过使用pure-specifier语法声明为"pure"。考虑CAnimal类的示例,它的创建只能提供常用功能 – CAnimal类型的对象对于实际使用太普通。因此,CAnimal 是一个很好的抽象类示例:
    class CAnimal
      {
    public:
                          CAnimal();     // 构造函数
       virtual void       Sound() = 0;   // 纯虚拟函数
    private:
       double             m_legs_count;  // 动物腿的数量
      };
    这里Sound() 是一个纯虚拟函数,因为它声明为纯虚拟函数PURE (=0)的说明符。

    纯虚拟函数只是为设置PURE说明符的虚拟函数:(=NULL) 或(=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();
         //--- 构造函数或析构函数始终调用自己的函数,
         //--- 即使它们是虚拟函数并且已经被派生类中已调用的函数所覆盖
         //--- 如果调用的函数是纯虚拟函数
         //--- 调用会引起“纯虚拟函数调用”的关键的执行错误
        }
      };
    然而,抽象类的构造函数和析构函数可以调用其他成员函数。

  2. 添加支持函数指针来简化事件模式的安排。

    若要声明一个函数指针,请指定"函数指针"类型,例如:
    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));    // 错误:应该有两个参数
    函数指针可以被存储并作为参数传递。您不能得到非静态类函数的指针。

  3. MqlTradeRequest 有两个新字段:

    • position — 持仓标签。锁仓模式交易下为了明确识别而改变和关闭持仓时来填写。在净额系统,填写字段不会有任何影响,因为持仓只识别一个交易品种名称。
    • position_by — 反向持仓标签。它用于通过反向持仓平仓时(打开一个同名但反向的交易品种)。该标签仅用于锁仓系统。

  4. 添加TRADE_ACTION_CLOSE_BY 值到 ENUM_TRADE_REQUEST_ACTIONS 交易操作类型枚举 — 通过反向持仓。该标签仅用于锁仓系统。

  5. 添加交易操作标签到适当订单,交易和持仓属性的枚举:

    • 添加ORDER_TICKET 属性到 ENUM_ORDER_PROPERTY_INTEGER — 订单标签。每个订单会分配一个独一无二的号码。
    • 添加 DEAL_TICKET 属性到 ENUM_DEAL_PROPERTY_INTEGER — 交易标签。每笔交易会分配一个独一无二的号码。
    • 添加POSITION_TICKET 属性到 ENUM_POSITION_PROPERTY_INTEGER — 持仓标签。每个新持仓会分配一个独一无二的号码。它通常匹配用于持仓的订单标签,除非标签更改为服务器上服务操作的结果,例如,收取重新持仓库存费时。若要找出一个用于持仓的订单,请应用POSITION_IDENTIFIER 属性。POSITION_TICKET 值对应MqlTradeRequest::position。

  6. 添加ORDER_TYPE_CLOSE_BY 值到he ENUM_ORDER_TYPE 订单类型枚举 — close by 订单。
  7. 添加ORDER_POSITION_BY_ID 值到ENUM_ORDER_PROPERTY_INTEGER 订单属性枚举 —ORDER_TYPE_CLOSE_BY 类型订单的反向持仓标识符。
  8. 添加DEAL_ENTRY_OUT_BY 值到 ENUM_DEAL_ENTRY 交易方向枚举 — 由close by操作执行交易。
  9. MqlTradeTransaction 也有两个类似的字段:

    • position — 由交易活动影响的持仓标签。这里填写处理市场订单(TRADE_TRANSACTION_ORDER_* except TRADE_TRANSACTION_ORDER_ADD,在这里持仓标签尚未分配) 和订单历史(TRADE_TRANSACTION_HISTORY_*)相关的交易活动。
    • position_by — 反向持仓标签。它用于通过反向持仓平仓时(打开一个同名但反向的交易品种)。这里只填写通过反向持仓而平仓的订单 (close by) 和通过反向持仓而关闭的交易 (out by)。

  10. 添加PositionGetTicket函数 — 根据持仓列表的索引返回一个持仓标签和使用PositionGetDouble, PositionGetInteger 和PositionGetString函数自动选择持仓用于进一步工作。
    ulong  PositionGetTicket(
       int  index      // 持仓列表索引
       );

  11. 添加PositionSelectByTicket 函数 — 通过指定标签为进一步工作选择一个持仓。
    bool  PositionSelectByTicket(
       ulong   ticket     // 持仓标签
       );

  12. 添加SYMBOL_MARGIN_HEDGED 值到 ENUM_SYMBOL_INFO_DOUBLE 交易品种属性枚举 — 合约大小或一手锁仓预付款(一个交易品种的反向持仓)。

    • 如果一个交易品种指定了初始预付款 (SYMBOL_MARGIN_INITIAL),锁仓预付款被指定为绝对值(以货币计算)。
    • 如果没有设置初始预付款(等于0),预付款计算中将被使用的合约大小在SYMBOL_MARGIN_HEDGED指定。预付款使用对应一个交易品种类型 (SYMBOL_TRADE_CALC_MODE)的等式计算。

    锁仓预付款计算的详细信息会在MetaTrader 5 交易平台帮助中说明。

  13. 添加ACCOUNT_MARGIN_MODE 值到 ENUM_ACCOUNT_INFO_INTEGER 账户属性枚举 — 当前交易账户的预付款计算模式:

    • ACCOUNT_MARGIN_MODE_RETAIL_NETTING — 用于净额模式账户持仓时的场外交易市场(一个交易品种一个持仓)。预付款计算基于交易品种类型 (SYMBOL_TRADE_CALC_MODE)。
    • ACCOUNT_MARGIN_MODE_EXCHANGE — 用于交易所市场。预付款计算基于交易品种设置中指定的折扣。折扣由交易商设置,但是它们不能低于交易所设置的值。
    • ACCOUNT_MARGIN_MODE_RETAIL_HEDGING — 用于独立持仓账户场外交易市场(锁仓,一个单一交易品种可以有多个持仓)。预付款计算基于交易品种类型 (SYMBOL_TRADE_CALC_MODE)。也要考虑锁仓预付款大小 (SYMBOL_MARGIN_HEDGED) 。

  14. 添加TERMINAL_SCREEN_DPI 值到 ENUM_TERMINAL_INFO_INTEGER 客户端属性枚举 — 分辨率显示数据通过每英寸的点数来衡量 (DPI)。该参数的信息允许指定图形对象的大小,这样它们在不同分辨率的显示器上看起来一样。

  15. 添加 TERMINAL_PING_LAST 值到 ENUM_TERMINAL_INFO_INTEGER 客户端属性 — 以微秒计算交易服务器最后得到的ping值。一秒等于一百万微秒。

  16. 修正返回SendFTP函数调用结果之前,成功发送后返回 FALSE 而不是 TRUE。
  17. 修正偶尔导致"违规访问"执行错误的StringConcatenate函数错误。
  18. 修正使用模板函数时发生的几个错误。
  19. 添加为打印,警示和评论功能显示超过4000字符行的能力。
  20. 修正ArrayCompare函数通过不同于开始时期的初始持仓变化来比较数组和函数本身时产生的错误。
  21. 添加支持标准库的锁仓功能:

    CPosition
    添加类函数:

    • SelectByMagic — 根据魔幻数选择持仓和进一步工作的交易品种。
    • SelectByTicket — 通过进一步工作的标签选择持仓。

    CTrade
    添加类函数:

    • RequestPosition — 收到持仓标签。
    • RequestPositionBy — 接收反向持仓标签。
    • PositionCloseBy — 通过反向持仓支持标签平仓。
    • SetMarginMode — 根据当前账户设置来设置预付款计算模式。

    添加重载类函数:

    • PositionClose — 平仓标签。
    • PositionModify — 修改持仓标签。

    CAccountInfo
    改变类函数:

    • MarginMode — 接收预付款计算模式。直至目前,类函数的工作类似于新的StopoutMode 类函数。
    • MarginDescription — 接收预付款计算模式为字符串。直至目前,类函数的工作类似于新的StopoutModeDescription类函数。

    添加类函数:

    • StopoutMode — 接收最小预付款水平规范模式。
    • StopoutModeDescription — 接收最小预付款水平规范模式为字符串。

    CExpert
    添加类函数:

    • SelectPosition — 为进一步工作选择持仓。

  22. 对标准程序库添加一些改进。


信号

  1. 修正几个交易信号窗显示错误。


Tester

  1. 修正几个交易品种类型上妨碍计算手续费的错误。
  2. 修正根据相应持仓的专家字段填写激活SL/TP得到的交易订单的专家字段。之前,不填写这些内容。
  3. 修正切换到通常状态并进一步优化结果的标签。
  4. 修正计算和显示“轨道线”指标。
  5. 优化可视化测试。
  6. 假设大量新建订单和持仓情况下,优化利润和预付款计算。
  7. 优化高频交易期间的交易操作。
  8. 现在,如果是非关键交易品种属性请求(不需要当前报价),则不执行历史同步。例如,SYMBOL_SELECT,SYMBOL_DIGITS,SYMBOL_SPREAD_FLOAT,SYMBOL_TRADE_CALC_MODE,SYMBOL_TRADE_MODE,SYMBOL_TRADE_STOPS_LEVEL,SYMBOL_TRADE_FREEZE_LEVEL,SYMBOL_TRADE_EXEMODE等等。之前,非关键交易品种历史记录在其属性的任何请求下都会同步。

MetaEditor

  1. 修正“全字匹配”模式下文件的搜索词。
  2. 添加在所需文件的编译结果行上双击移动到一个文件。
  3. 修正显示Windows XP中的一些控制元素。


  1. 更新文档。
31 三月 2016
MetaTrader 5 iOS build 1261
  1. 交易平台现在还支持第二种持仓账户系统 — 锁仓系统。新系统允许创建相同金融工具的多个持仓,包括反向持仓。现在,该平台既通过净额系统提供股票交易和还通过两种可用系统其中之一提供外汇交易。

    新持仓账户系统类似于MetaTrader 4中的系统,并结合了第五代平台的所有优势 — 使用多个交易 (包括部分填充)执行订单,止损限价订单,和更多订单模式。

    立即更新平台,了解锁仓功能的工作方式。新建一个新模拟账户时,启用\"使用锁仓\"选项。如果您交易商的服务器已经更新及配置,就可使用这个选项。

  2. 另外,新版本还包括小漏洞的修复和改进。
31 三月 2016
MetaTrader 5 Android build 1262
  1. 交易平台现在还支持第二种持仓账户系统 — 锁仓系统。新系统允许创建相同金融工具的多个持仓,包括反向持仓。现在,该平台既通过净额系统提供股票交易和还通过两种可用系统其中之一提供外汇交易。

    新持仓账户系统类似于MetaTrader 4中的系统,并结合了第五代平台的所有优势 — 使用多个交易 (包括部分填充)执行订单,止损限价订单,和更多订单模式。

    立即更新平台,了解锁仓功能的工作方式。新建一个新模拟账户时,启用"使用锁仓"选项。如果您交易商的服务器已经更新及配置,就可使用这个选项。

  2. 另外,新版本还包括小漏洞的修复和改进。
12 二月 2016
MetaTrader 5 Android build 1224
  • 平板电脑版本添加一个新窗口显示有关交易操作的详细信息。点击一个订单或交易,查看其最近一秒的打开和关闭时间,评论和交易商手续费。
  • 改进新闻部分。根据您的兴趣选择新闻类别。添加喜爱的新闻条目到收藏夹,以便需要时快速访问。
  • 添加周期分隔符,在图表上显示高级时间表边框。
  • 在图表上添加显示买价线。
  • 新的界面语言:韩语和越南语。
  • 在图表上增加的最大数量的对象。
  • 多种漏洞修复和改善。
3 二月 2016
MetaTrader 5 iOS build 1225
  • 为 iPad 添加纵向模式。现在,您可以通过长列表浏览交易操作,以及更便利地阅读您的电邮和财经新闻。
  • 添加 iPad Pro的本地支持。
  • 添加韩语翻译。
17 十二月 2015
新版MetaTrader 5 平台 Build 1240:操作更快以及嵌入式视频

主机

  1. 在虚拟主机向导对话框添加了教学视频链接"如何租用虚拟平台" 。请观看这个两分钟视频,学习如何轻松启动自动交易或全天候24小时复制信号。.


    该视频以及许多其他视频都在 MetaQuotes软件公司YouTube 官方频道提供。
  2. 主机:修正从EA交易调用自定义指标或调用自定义指标中的EX5程序库时的主机迁移。.

程序端

  1. 高频交易期间(每秒50及更多操作),加速打开订单和持仓列表的更新。
  2. 大量交易品种(上万种)情况下优化并显著加速一台交易服务器程序端的初始同步。现在,建立连接后您可以更快速的开展工作。
  3. 优化并显著减少程序端的内存消耗。
  4. 关闭/打开程序端时添加保存和恢复市场深度的设置。
  5. 修正拖拽程序端窗口时发生在Windows 10下的构件。
  6. 修正许多命令和对话框的上下文帮助。若要激活有关特定元素的帮助,请将光标移至其上面并按下F1。
  7. 使界面适应高分辨率屏幕(4K)的工作正在进行中。

MQL5

  1. 为负责接收订单和交易数据的OrderGetString,HistoryOrderGetString,和HistoryDealGetString函数添加新属性:

    • ORDER_EXTERNAL_ID - 外部交易系统的订单ID(在交易所)。
    • DEAL_EXTERNAL_ID - 外部交易系统的成交 ID 。

  2. 修正使用架构和类时ZeroMemory 函数的操作。在某些情况下内存清理不执行。
  3. 添加SendFTP 函数操作期间的错误代码。该函数发送文件到选项窗口FTP标签上指定的地址。

    • ERR_FTP_NOSERVER - 设置中不指定FTP服务器
    • ERR_FTP_NOLOGIN - 设置中不指定FTP登录名
    • ERR_FTP_FILE_ERROR - 文件不存在
    • ERR_FTP_CONNECT_FAILED - 连接FTP服务器失败
    • ERR_FTP_CHANGEDIR - FTP服务器未发现文件上传目录
    • ERR_FTP_CLOSED - FTP服务器连接关闭

  4. 修正子类对象和其父类之间通过继承方式的类型转换访问。
  5. 修正类模板中的几处错误。
  6. 修正使用CopyTicks函数的请求报价。当为连续相同交易报价指定COPY_TICKS_TRADE 参数(仅复制交易报价)时,只有第一个报价会通过。
  7. 修正定制类型变量大小的定义。
  8. 修正在CryptDecode函数中使用ZLib时导致无限解压缩循环的错误。

Tester

  1. 修正与主测试交易品种不同的交易品种的历史价格同步。
  2. 修正OnTrade交易事件处理程序中加倍TRADE_TRANSACTION_DEAL_ADD 交易(添加交易到历史记录)。
  3. 更改了遗传优化期间的测试行为。现在,所有遗传优化后获得的独特结果都参与传递。之前,只有1/4的结果可以使用。.

MetaEditor

  1. 添加教学视频"如何在MQL5向导中创建自动交易"的链接到MQL5向导。请观看该三分钟视频,开发自动交易,无需编写单行代码。


    该视频以及许多其他视频都在 MetaQuotes软件公司YouTube 官方频道提供。
  2. 修正其中一个窗口完全展开时的窗口排列命令。窗口菜单允许您平铺,垂直,水平和层叠排列打开的文件。
  3. 使界面适应高分辨率屏幕(4K)的工作正在进行中。
更新文档。
19 十一月 2015
MetaTrader 5 Android Build 1172
  1. 改进交易品种图表缩放:增加缩放步数,强化显示流畅度。

    MetaTrader 5 Android Build 1172:便利的图表缩放和债券属性的应计利息

  2. 无论以任何方式关闭应用程序后,市场报价中交易品种及其序列设置和图表设置的全部变化(比例,配色方案,对象和指标列表) 都会被保存。
  3. 添加面值和债券属性的应计利息。
11 十一月 2015
MetaTrader 5 iPhone build 1171
漏洞修复和改善。
30 十月 2015
新的MetaTrader 5 Build 1210:增强市场深度和常规改进

程序端

  1. 添加以低于市场深度市场价的价格下限价订单的功能。这允许您在市场以指定价格获得一个订单执行保证。

    如果我们通过买家/卖价界限拖拽限价订单,它将变成止损订单(买入限价将被买入止损替代,而卖出限价-变为卖出止损)。按住Crtl 拖拽,可以使限价订单不被替换为止损订单。




  2. 在图表设置添加“显示快速交易按键”。这可以使您从图表隐藏一键交易面板启用按键和市场深度。




  3. 修正提示工具和其他应用之间偶尔出现的冲突。

MQL5

  1. 修正以AS_SERIES标识的动态数组复制历史数据时Copy*函数的操作。标识通过ArraySetAsSeries函数设置,表明以时间序列执行数组元素的指数化。
  2. 更改通过ChartSetInteger和ChartGetInteger管理的CHART_SHOW_ONE_CLICK 属性。之前,该属性允许在图表上显示/隐藏一键交易面板。现在,它也显示/隐藏图表上设置一键交易面板和市场深度的按键(类似图表设置中的“显示快速交易 按键”“)。
  3. 修正模板操作。
更新文档。

23 十月 2015
MetaTrader 5平台更新 Build 1200:接收报价历史和直接支付服务

程序端

  1. 在市场报价新增使用报价历史的功能。之前,操作期间报价图表只显示程序端收集的历史。现在,在交易服务器上您就可以访问整个报价历史。禁用自动滚 动,使用鼠标适时开始回滚报价图表,以常见价格图表相同的方式从交易服务器下载缺失的历史。新功能将有助于想要获得最详细价格图表的交易者。



    使用CopyTicks() 函数接收更深层次的报价历史。如果后者在交易服务器上,那么它已得到修改以便于它可以请求缺失的历史并下载它。

  2. 新增一个快速打开/关闭市场深度的图标。该图标位于图表上的一键交易面板的附近。您也可以使用新的热键Alt+B。热键也用于市场报价窗口,可以打开市场报价中突出显示的交易品种的市场深度。




  3. PC硬件特点和操作系统的信息现在从客户端开始就已经记录在日志中。例如:
    2015.10.14 14:48:18.486	Data Folder: C:\Program Files\MetaTrader 5
    2015.10.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.10.14 14:48:18.486	MetaTrader 5 build 1190 started (MetaQuotes Software Corp.)
  4. 改进市场报价中交易品种的工作。

    • 添加市场报价中交易品种显示的数量和交易服务器上可用的交易品种总数。
    • 通过智能选择列表添加一行以便添加新交易品种。
    • 新交易品种行的搜索不仅可以通过交易品种名称执行,还可以通过其描述和国际名称完成。




  5. 添加支持不同语言的经济日历。
  6. 添加经济日历缺失的国家图标。
  7. 添加在市场报价打开交易品种管理窗口的热键 - Ctrl+U。
  8. 修正根据窗口菜单命令安排打开图表窗口。
  9. 修正使用强化认证时偶尔阻碍程序端查找证书文件的错误。
  10. 修正有时可能导致价格历史同步循环的错误。
  11. 如果交易品种在请求执行模式下进行交易,修正了交易量增加后之前持仓的无效止损/止盈水平。
  12. 如果交易品种的买入持仓在市场深度的“只买入”交易模式,修正了下卖单的检查功能。
  13. 修正追踪止损功能的操作。在一些罕见的情况下,持仓的保护性止损的不正确移动。
  14. 程序端界面进一步适用于高分辨率的屏幕(4K)。
  15. 修正卸载尽管MQL5程序定期要求却还是过多的历史数据。
  16. 修正在Windows10下工作时一些用户界面的显示问题。
  17. 更新用户界面的翻译。

市场

  1. 已修改并优化MQL5市场中产品数据库的操作。
  2. VPS上已经禁止程序端无MQL5.community账户的购买。现在购买需要在程序端设置中指定MQL5.community账户:工具-选项-社区。
  3. 添加使用银联直接购买产品。
  4. 增强在MQL5市场购买产品时的日志内容。


主机和信号

  1. 支付虚拟主机和信号订阅现在可以直接从付款系统转账。

    若要支付主机服务,用户无需登录MQL5.community账户充值。 为服务付款现在可以使用一种可用的付款系统从平台直接转账。



    选择一种可用的系统,进行网上转账:




    同样,为交易信号订阅付款也可以通过付款系统从程序端直接完成。




    所需金额将首先转到您的MQL5.community 账户,从这里完成为服务付款。因此,您可以拥有一个明确统一的租赁虚拟主机平台和信号订阅的历史并可以轻松访问和审查您MQL5.community 服务的全部付款。
  2. 添加在32位客户端工作时管理虚拟主机(迁移除外)。
  3. 修正迁移FTP出口设置到虚拟主机,尽管允许通过FTP发布报告。

MQL5

  1. 启用新优化的编译器。在64位平台上的程序执行速度提升了5倍。MQL5程序在最近的MetaEditor版本中应该重新编译。
  2. 扩展的MqlTick 结构格式。现在,通过了以毫秒为单位的报价到达时间,以及决定哪个报价参数已被更改的标识。
    struct MqlTick
      {
       datetime     time;          // 最近更新价格的时间
       double       bid;           // 当前卖价
       double       ask;           // 当前买价
       double       last;          // 当前收盘价
       ulong        volume;        // 当前收盘价的交易量
       long         time_msc;      // 以毫秒为单位的最近更新价格的时间
       uint         flags;         // 报价标识
      };
    无论与之前报价相比是否有变化都会填充每个报价参数。因此,可以找出过去任何时刻的正确价格,无需在报价历史搜索之前的值。例如,即使报价到达期间只有卖价变化,该结构仍然包含其他参数,包括之前的买价,交易量等等。您可以分析报价标识,找出具体更改了哪个数据:

    • TICK_FLAG_BID - 更改卖价
    • TICK_FLAG_ASK  - 更改买价
    • TICK_FLAG_LAST - 更改最终成交价
    • TICK_FLAG_VOLUME - 更改交易量
    • TICK_FLAG_BUY - 报价是买入交易结果
    • TICK_FLAG_SELL - 报价是卖出交易结果

    MqlTick 结构通过两种类函数使用:

    • CopyTicks - 该类函数不支持旧的结构格式。当调用CopyTicks函数时,之前使用旧的报价格式编译的EX5函数将返回错误4006 (ERR_MQL_INVALID_ARRAY)。
    • SymbolInfoTick - 该类函数同时支持新旧两种结构格式。

  3. 添加允许您创建类似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(int i=0;i<10;i++)
          str+=" "+(string)ExtIntArray[i];      
       Print(str);   
       str="Dbl:";
       for(int i=0;i<10;i++)
          str+=" "+DoubleToString(ExtDblArray[i],1);
       Print(str);   
       str="Ptr:";
       for(int i=0;i<10;i++)
          str+=" "+(string)ExtPtrArray[i].X();      
       Print(str);
    //--- 通过new创建的CFoo对象不应删除,因为它们在TArrayPtr<CFoo>对象的析构函数被删除  
      }
    执行结果:
    TemplTest (EURUSD,H1)    Int: 10 11 12 13 14 15 16 17 18 19
    TemplTest (EURUSD,H1)    Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0
    TemplTest (EURUSD,H1)    Ptr: 30 31 32 33 34 35 36 37 38 39

  4. 新操作 * 和 & 通过引用接收变量和接收引用变量。
  5. 添加ObjectsDeleteAll 函数的重载形式 - 通过图表子窗口的名称前缀删除指定类型的全部对象。
    int  ObjectsDeleteAll(
       long           chart_id,   // 图表ID
       const string     prefix,   // 对象名称前缀
       int       sub_window=-1,   // 窗口指数
       int      object_type=-1    // 删除的对象类型
       );

  6. 修正ObjectGetValueByTime 函数操作。之前,有时可能会返回错误的图表时间价格值(例如,水平趋势线)。
  7. 修正服务器上缺乏历史数据时的Copy*函数的操作。 之前,这种情况在返回控制之前会导致30-50秒的延迟。
  8. 为MQL5标准程序库添加了一些改进。
  9. 标准程序库 文档翻译为德语,法语,中文,土耳其语,西班牙语和葡萄牙语。
  10. 添加了日语MQL5 文档

Tester

  1. 选择在策略测试中运行的程序的过程变得更加容易。 现在根据存储EA交易和指标的目录,以树状显示列表。




  2. 显示客户端线型可视化测试期间的一些指标。
  3. 修正了通过策略测试调试MQL5程序时设置杠杆和图表时间表。
  4. 修正历史记录测试时调试指标。
修正崩溃日志中报告的错误。

更新文档。


17 九月 2015
MetaTrader 5 iPhone build 1167
  • 提高分析对象的便利性。它们现在只出现在当前图表。在其他交易品种中显示可以在对象设置中启用。若要优化图表区域,只为您需要的时间表启用对象展示。
  • 通过启用周期分隔符打开当前图表的高级时间表边框显示。
  • iOS 9 兼容性改进。
28 八月 2015
MetaTrader 5 iPhone Build 1165
  • 改进新闻部分。根据您的兴趣选择新闻类别。添加喜爱的新闻条目到收藏夹,以便需要时快速访问。根据新闻提要搜索新闻。
  • 在iPhone 版中现在可以从图表单击执行交易 - 把设备转成横屏并打开快速交易面板。
  • MetaTrader 5 iOS build 1165

  • 新增担保工具平仓选项,允许将对应资产转化为存款货币。
  • 多种漏洞修复和改善。
26 八月 2015
MetaTrader 5 Android build 1164
  1. 添加24种新的技术分析图形对象:线型图,通道,江恩和斐波纳契工具,埃利奥特波动和几何图形。

    新版 MetaTrader 5 Android:24 种分析对象和 OTP 双重认证

  2. 添加支持双重身份验证(一次性密码,OTP)用来连接交易账户
  3. 各种漏洞修复和改进
12345678910111213