如何开始学习MQL5 - 页 35

 

论坛

如何开始学习MQL5

Sergey Golubev, 2013.09.17 09:59

MetaTrader 5 - 超乎您的想像!

MetaTrader 5 的开发工作始于 2007 年。MetaTrader 5 被构想为革命性、多市场的平台,而且要能运行于外汇交易及任何其它金融市场上。自此之后有大量的工作被执行,而成果则是这个可为交易者提供无限机遇的平 台。我们拟于文本中讨论有关 MetaTrader 5 的所有关键功能,并与该交易平台的前一版本进行对比分析。

  1. 图表
  2. 导航器
  3. 交易
  4. 工具箱
  5. 测试和优化
  6. 与 MQL5.community 集成
  7. MetaEditor
  8. MQL5 编程语言
  9. 针对交易者与开发人员的服务

 

论坛

MetaTrader 5平台beta build 2055:集成Python域并改进策略测试

MetaQuotes Software Corp., 2019.05.23 11:00

更新的MetaTrader 5平台测试版将于2019年5月17日,星期五,进行发布。我们邀请所有交易者加入测试平台新版本,以便评估平台所有更新功能从而帮助开发者修正出现的错误。

若要将MetaTrader 5平台更新到build 2055,请转到帮助\检查桌面版更新\最新测试版:


新版MetaTrader 5平台的最终版将在公开测试版结束后发布。

  1. 程序端:通过使用Python语言的应用程序,增加MetaTrader 5程序端数据的新API启用请求。

    Python是一种用于开发脚本和应用程序的现代高水平编程语言。它包含用于机器学习、自动化处理以及数据分析和可视化的多个程序库。

    MetaTrader Python程序包是为有效快速地从MetaTrader 5程序端直接通过处理器通信获得交易所数据而设计的。通过这种方式接收的数据可以进一步用于统计计算和机器学习。



    连接

    1. https://www.python.org/downloads/windows下载最新版Python
    2. 安装Python期间,请检查“将Python X.X添加到PATH%”,以便能够从命令行启用Python脚本。
    3. 从命令行安装MetaTrader 5模块
      pip安装MetaTrader5
    4. 添加matplotlib和pytz包
      pip安装matplotlib
      pip安装pytz

    函数


  2. 程序端:优化了市场信号部分。现在,产品和信号展示的运行速度提高了7倍,从而提供了更好的浏览体验服务。




  3. 程序端:新增在Wine系统下支持“市场”、“信号”和“搜索”。LinuxMac OS用户现在可以访问最大的交易应用程序商店和复制交易服务。




  4. 程序端:内置学习程序已被翻译成30多种语言,包括西班牙语、中文、葡萄牙语和德语。若要查看所需语言的互动提示,请使用“查看”菜单切换界面语言。




  5. 程序端:新选项可以验证交易者在开设模拟账户和初始账户时指定的电话号码和电子邮箱。

    是否需要验证数据由交易商来决定。如果启用了这个选项,确认码会在账户请求时自动发送给交易者,对话框中会出现特殊代码字段:



    确认码在几分钟内有效。如果在这个时间段内没有将确认码输入到字段中,那么交易者将需要重复这个程序。

    发送确认码之前,系统将检查指定电话号码/电子邮箱是否之前已确认。如果交易者已在他或她的计算机上通过了验证,那么将无需额外确认即可开户。因此,交易者在请求账户时不会遇到额外的困难。

  6. 程序端:扩展了通过PayPal系统进行付款的MQL5.community付款选项。现在,使用该系统可实现一键购买。

    如何工作
    当您授权PayPal账户进行购买时,您将被进一步要求允许付款给我们公司:





    确认此选项后,您只需点击之前保存的账户按键,即可一键执行进一步购买:




    如果您点击“取消并返回MetaQuotes Software Corp.”,您将以正常的方式进行付款,为每次购买手动输入PayPal账户详情。
    MQL5.com网站和MetaTrader 5平台不存储您的付款详情。在汇总、“市场”购买或“信号”订阅的情况下,将在付款系统执行数据验证。
    您可以随时移除您的PayPal 账户链接。

  7. Tester:策略测试器的改进和优化。

    我们引入了大量隐藏的改进和修正的错误来优化策略测试器操作。此更新可以更快地测试一些任务类型,使操作稳定性更高。主要改进包括:

    框架操作
    本地、网络和源代码的操作框架得到优化。这类操作现在处理速度更快,永远不会跳过。

    将任务分配给代理
    测试器现在可以在优化过程中将任务重新分配给代理。如果有新代理可用(或发布之前用过的一个代理),测试器会使用之前在其他代理中分配的任务包自动创建新的任务包。如果检测出代理速度慢,任务还可以重新分配。这类代理的任务被发送至其他代理,以便更快地完成优化。

    数学计算模式下的任务分配速度会更快。

    日志中的优化统计
    优化日志记录得以扩展:它包括与MQL5云网络使用相关的详细统计,启用和禁用云代理等。

    在全优化日志模式下运行
    为了获得最佳的资源消耗,并不是所有来自代理的消息都被写到测试日志中。若要显示所有日志,您可以通过测试日志快捷菜单启用“完整优化日志”选项。此前,这个模式可以明显拖慢优化进程。而现在则不会影响计算时间。

    MQL5云网络
    优化云测试代理的运行。现在,计算任务的分配更加有效。

  8. 程序端:内置经济日历提供了18个全球大型经济体相关的900+指标,包括美国、欧盟、日本和英国等国家。相关数据都是从开放资源实时收集。通过定期查看此服务,交易者可以随时了解最新的全球新闻,并做出明智的交易决策。

    经济日历可在桌面版、网页版以及移动设备上使用。可以使用程序端的“日历”快捷菜单打开应用程序:




    选择您的平台并下载Tradays apps:


    除了桌面平台提供的日历功能之外,移动版还以图表和表格的形式提供事件提醒和访问指标的完整历史记录。

  9. 程序端:添加了在导入报价历史期间自动生成自定义交易品种柱形历史。现在,如果自定义交易品种的报价数据出现变化,对应的柱形图也自动重新计算。

    • 因此,统一的数据被保存在平台中。
    • 导入报价数据(假设有足够的数据)之后,无需导入柱形图,而由程序端自动计算。

    更改涉及通过程序端界面执行的报价导入,以及使用CustomTicks*函数从MQL5应用程序执行的报价更新。报价数据的任何变化都会导致重新计算对应的自定义交易品种的1分钟柱形图。

  10. 程序端:修正当在分离图表上使用十字光标时“数据窗口”中的数据更新。
  11. 程序端:修正报价历史保存。在早期版本中,一毫秒内的多个报价可能以错误的顺序保存。
  12. 程序端:修正基于服务器上过短的价格历史(少于一天)生成图表的问题。
  13. MQL5:添加MQL5服务调试选项。现在可以使用真实和历史数据测试这些应用程序,类似于EA交易和指标。
  14. MQL5:OnDeinit方法执行期间,MQL5应用程序不会从程序端接收任何事件。以前,由于接收到其他事件,应用程序有时无法完成去初始化(例如,删除所有创建的对象)。
  15. MQL5:修正当日更改自定义交易品种报价历史后可能发生的偶然错误。
  16. MQL5:修正使用大量图形对象(数以万计)时应用程序偶尔出现的运行速度减慢的问题。
  17. MQL5:修正从MQL5程序频繁调用交易历史的情况下出现程序端冻结的问题。
  18. MQL5:修正iBarShift函数操作。通过"exact=false"标识和数据外的请求,该函数返回最早的柱数而不是最新柱数。
  19. Tester:修正确定有多个NUMA节点的计算机处理器上的内核数。
  20. MetaEditor:现在,整码器命令可添加到工具栏以快速访问。
  21. MetaEditor:修正在函数和变量名称中使用非统一字符时切换到参数定义和查看相关数据。
  22. 文档已更新。

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


 

论坛

新版MetaTrader 5平台build 2085:集成Python并改进策略测试

MetaQuotes Software Corp., 2019.06.13 13:15

MetaTrader 5平台更新版于2019年6月13日星期四进行发布。新版将有以下变化:


  1. 程序端:添加新API,使用Python语言通过应用程序,启用MetaTrader 5程序端数据请求。

    Python是一种用于开发脚本和应用程序的现代高水平编程语言。它包含用于机器学习、自动化处理以及数据分析和可视化的多个程序库。

    MetaTrader Python程序包是为有效快速地从MetaTrader 5程序端直接通过处理器通信获得交易所数据而设计的。通过这种途径接收的数据可以进一步用于统计计算和机器学习。



    连接

    1. https://www.python.org/downloads/windows下载最新版Python
    2. 安装Python期间,请检查“将Python X.X添加到PATH%”,以便能够从命令行启用Python脚本。
    3. 从命令行安装MetaTrader 5模块
      pip安装MetaTrader5
    4. 添加matplotlib和pytz包
      pip安装matplotlib
      pip安装pytz

    函数


  2. 程序端:优化了市场信号部分。现在,产品和信号展示的运行速度提高了7倍,从而提供了更好的浏览体验服务。




  3. 程序端:新增在Wine系统下支持“市场”、“信号”和“搜索”。LinuxMac OS用户现在可以访问最大的交易应用程序商店和复制交易服务。




  4. 程序端:内置学习程序已被翻译成30多种语言,包括西班牙语、中文、葡萄牙语和德语。若要查看所需语言的互动提示,请使用“查看”菜单切换界面语言。




  5. 程序端:新选项可以验证交易者在开设模拟账户和初始账户时指定的电话号码和电子邮箱。

    是否需要验证数据由交易商来决定。如果启用了这个选项,确认码会在账户请求时自动发送给交易者,对话框中会出现特殊代码字段:




    确认码在几分钟内有效。如果在这个时间段内没有将确认码输入到字段中,那么交易者将需要重复这个程序。

    发送确认码之前,系统将检查指定电话号码/电子邮箱是否之前已确认。如果交易者已在他或她的计算机上通过了验证,那么将无需额外确认即可开户。因此,交易者在请求账户时不会遇到额外的困难。

  6. 程序端:扩展了通过PayPal系统进行付款的MQL5.community付款选项。现在,使用该系统可实现一键购买。

    如何工作
    当您使用PayPal账户登录进行购买之后,您将被要求允许进一步付款给我们公司:





    确认此选项后,您只需点击之前保存的账户按键,即可一键执行进一步购买:




    如果您点击“取消并返回MetaQuotes Software Corp.”,您将以正常的方式进行付款,为每次购买手动输入PayPal账户详情。
    MQL5.com网站和MetaTrader 5平台不存储您的付款详情。当您存款购买“市场”产品或订阅“信号”时,在付款系统端将执行数据验证。
    您可以随时移除您的PayPal 账户链接。

  7. Tester:策略测试器的改进和优化。

    我们引入了大量隐藏的改进和修正的错误来优化策略测试器操作。此更新可以更快地测试一些任务类型,使操作稳定性更高。主要改进包括:

    框架操作
    本地、网络和源代码的操作框架得到优化。这类操作现在处理速度更快,永远不会跳过。

    将任务分配给代理
    测试器现在可以在优化过程中将任务重新分配给代理。如果有新代理可用(或发布之前用过的一个代理),测试器会使用之前在其他代理中分配的任务包自动创建新的任务包。如果检测出代理速度慢,任务还可以重新分配。这类代理的任务被发送至其他代理,以便更快地完成优化。

    数学计算模式下的任务分配速度会更快。

    日志中的优化统计
    优化日志记录得以扩展:它包括与MQL5云网络使用相关的详细统计,启用和禁用云代理等。

    在全优化日志模式下运行
    为了获得最佳的资源消耗,并不是所有来自代理的消息都被记录到测试日志中。若要查看所有日志,您可以通过测试日志快捷菜单启用“完整优化日志”选项。此前,这个模式可以明显拖慢优化进程。而现在则不会影响计算时间。

    MQL5云网络
    优化云测试代理的运行。现在,计算任务的分配更加有效。

  8. 程序端:内置经济日历提供了18个全球大型经济体相关的900+指标,包括美国、欧盟、日本和英国等国家。相关数据都是从开放资源实时收集。通过定期查看此服务,交易者可以随时了解最新的全球新闻,并做出明智的交易决策。

    经济日历可在桌面版、网页版以及移动设备上使用。可以使用程序端的“日历”快捷菜单打开应用程序:




    选择您的平台并下载Tradays apps:


    除了桌面平台提供的日历功能之外,移动版还以图表和表格的形式提供事件提醒和访问指标的完整历史记录。

  9. 程序端:添加了在导入报价历史期间自动生成自定义交易品种柱形历史。现在,如果自定义交易品种的报价数据出现变化,对应的柱形图也自动重新计算。

    • 因此,统一的数据被保存在平台中。
    • 导入报价数据(假设有足够的数据)之后,因为由程序端自动计算,而无需导入柱形图。

    更改涉及通过程序端界面执行的报价导入,以及使用CustomTicks*函数从MQL5应用程序执行的报价更新。报价数据的任何变化都会导致重新计算对应的自定义交易品种的1分钟柱形图。

  10. 程序端:修正当在分离图表上使用十字光标时“数据窗口”中的数据更新。
  11. 程序端:修正报价历史保存。在早期版本中,一毫秒内的多个报价可能以错误的顺序保存。
  12. 程序端:修正基于服务器上过短的价格历史(少于一天)生成图表的问题。
  13. MQL5:添加MQL5服务调试选项。现在可以对这些应用程序进行类似于EA交易和指标的测试。
  14. MQL5:在ENUM_SYMBOL_CALC_MODE枚举中,添加了全新的盈利和预付款计算模式:

    • SYMBOL_CALC_MODE_EXCH_BONDS — 适用于交易所债券的计算。
    • SYMBOL_CALC_MODE_EXCH_STOCKS_MOEX — 适用于莫斯科交易所股票交易的计算。
    • SYMBOL_CALC_MODE_EXCH_BONDS_MOEX — 适用于莫斯科交易所债券交易的计算。

  15. MQL5:新TesterDeposit函数支持在测试期间模拟入金操作。该函数适用于测试资金管理策略。
    bool  TesterDeposit(
       double money      //入金金额
       );
  16. MQL5:OnDeinit方法执行期间,MQL5应用程序不会从程序端接收任何事件。以前,由于接收到其他事件,应用程序有时无法完成去初始化(例如,删除所有创建的对象)。
  17. MQL5:修正当日更改自定义交易品种报价历史后可能发生的偶然错误。
  18. MQL5:修正使用大量图形对象(数以万计)时应用程序偶尔出现的运行速度减慢的问题。
  19. MQL5:修正从MQL5程序频繁调用交易历史的情况下出现程序端冻结的问题。
  20. MQL5:修正iBarShift函数操作。通过"exact=false"标识和数据外的请求,该函数返回最早的柱数而不是最新柱数。
  21. Tester:修正确定有多个NUMA节点的计算机处理器上的内核数。
  22. Tester:添加使用零初始入金运行测试和优化的可能性,因为使用新TesterDeposit函数可以在测试期间模拟入金操作。
  23. MetaEditor:现在,整码器命令可添加到工具栏以快速访问。
  24. MetaEditor:修正在函数和变量名称中使用非统一字符时切换到参数定义和查看相关数据。
  25. 文档已更新。

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


 

论坛

下一次MetaTrader 5更新时将停止对32位版本的支持

MetaQuotes Software Corp., 2019.11.04 10:06

MetaTrader 5 build 2190将是最后一个支持32位系统的平台版本。MetaTrader 5平台的下一个正式版本将仅支持64位系统版本。Windows XP 64位版本在14年前发布。而目前对32位版本的支持已经阻碍了很多项目的开发。

停止对32位版本的支持也会影响市场。在MetaTrader 5平台的下一个正式版本发布后,将无法使用32位版本的程序端进入市场。用户将只能从64位程序端购买和启用新MetaTrader 5产品。之前在32位MetaTrader 5程序端中购买的所有产品将可以继续工作,但却无法升级到新版本。

MetaTrader 5 build 2190的32位版本将在未来6个月内可供下载和安装

 

论坛

新版MetaTrader 5平台测试版build 2245:用于MQL5 3D可视化的DirectX功能和策略测试中的交易品种设置

MetaQuotes Software Corp., 2019.11.29 09:17

更新的MetaTrader 5平台测试版已于2019年11月29日发布。我们邀请所有交易者加入新平台的测试,评估其全部功能从而帮助开发者修正出现的错误。

若要将MetaTrader 5平台更新到2245,请转到帮助\检查桌面版更新\最新测试版:


新版MetaTrader 5平台的最终版将在公开测试版结束后发布。

新版将有以下变化:

  1. 程序端:有更多列可显示在市场报价中。现在,还提供之前只显示在“详细信息”选项卡中的额外40种交易品种参数。




  2. 程序端:添加在导航中突出显示当前连接的账户和当前服务器。这个功能在您有多个不同交易商账户的情况下,将非常实用。




  3. 程序端:更新图表框架设计。框架更小,因此为有用信息留出更多空间。




  4. 程序端:改进将交易历史显示为持仓时计算交易总量的算法。现在根据实际记录计算该数值。

    要将交易历史显示为持仓,程序端会使用请求期间执行的交易信息。只有在此期间关闭的持仓才会显示在历史中。如果持仓仍未完结或平仓时间超出所选间隔,则将不会显示在历史记录中。因此,持仓模式下的总盈利和手续费可能不同于“订单/交易”历史模式下的总盈利和手续费。

    例如,您正在查看过去一周的历史。在此期间,执行了100笔交易,其中98笔开设和关闭了20个持仓。最近两笔交易开设新持仓,目前尚未结束。在这种情况下,交易历史包含100条记录和基于这些交易计算的总值。当以持仓的形式查看历史时,您将看到基于98笔交易收集的20条记录。当计算总值时,只有这些数据将被考虑。如果交易商收取入市交易费,那么交易历史中的最终手续费值将不同于持仓历史中显示的手续费,因为在后一种情况下,最后两笔交易将被忽略。

  5. 程序端:实现更快启动MQL5程序。
  6. 程序端:程序端安装文件中添加了新/beta键,可以下载测试版。在正常模式下,应该先安装发布版,然后才可更新到测试版。现在跳过这一步骤,从而节省时间和流量。安装开始示例:

    C:\mt5setup.exe /beta
  7. 程序端:修正显示“交易所股票”类型交易品种的预付款需求。
  8. 程序端:通过使用Clang/LLVM编译器,加速所有平台组件的操作。在某些情况下,编译速度可提高20%。
  9. MQL5:为3D可视化添加新DirectX 11功能和着色器。现在,可以用MQL5直接创建3D图形。

    新CCanvas3D类是CCanvas自定义图形类的扩展。它位于\MQL5\Include\Canvas\目录。这个类的功能是可通过DirectX API渲染3D对象。

    • 创建 — 创建一个场景。
    • 附加 — 将场景绑定到图表。
    • 破坏 — 破坏一个场景。
    • ObjectAdd — 将继承自CDXObject基类的子对象添加到场景中。
    • 渲染 — 通过ObjectAdd方法添加的完整渲染循环,包括所有CDXObject的缓冲区清除和渲染。
    • RenderBegin — 启动场景渲染,使用指定颜色(如果设置DX_CLEAR_COLOR标识)和深度缓冲区(使用DX_CLEAR_DEPTH时)填充渲染缓冲区,并为默认着色器设置DXInputScene场景缓冲区。
    • RenderEnd — 完成场景渲染并将结果接收到内部缓冲区。如果redraw==true,在图像运行的图表上显示图像。
    • ViewMatrixGet — 接收视图矩阵。
    • ViewMatrixSet — 设置视图矩阵。矩阵不兼容ViewPositionSet、ViewRotationSet、ViewTargetSet和ViewUpDirectionsSet方法。
    • ViewPositionSet — 设置视图位置。
    • ViewRotationSet — 设置视图旋转矩阵。
    • ViewTargetSet — 设置视图指向的点。与ViewUpDirectionsSet一起,是ViewRotationSet的另一种选择。
    • ViewUpDirectionsSet — 设置视图的垂直位置。与ViewTargetSet一起,是ViewRotationSet的另一种选择。
    • ProjectionMatrixGet — 接收投影矩阵。
    • ProjectionMatrixSet — 设置投影矩阵。

    关于新程序库的详细文档将很快发布。




  10. MQL5:添加支持直接从MQL5操作SQLite数据库。现在可以使用MQL5函数实现到数据库的连接和SQL查询的执行。内部操作通过新的标准库扩展实现。

    提供以下函数:
     //--- 打开和关闭数据库
      int  DatabaseOpen(string filename,UINT flags);
      void DatabaseClose(int database);
      
      //---  处理表格
      bool DatabaseTableExists(int database,string table_name);
    
      //--- 准备SQL查询
      int  DatabasePrepare(int database,string sql,...);
      void DatabaseFinalize(int request);
      
      //--- 读取绑定/没有绑定到MQL5结构的查询结果
      int  DatabaseRead(int request);
      int  DatabaseReadBind(int request,struct or var);
      
      //--- 将查询结果的数据提取到不同的数据类型
      int  DatabaseGetColumnCount(int request);
      int  DatabaseGetColumnSize(int request,int column);
      int  DatabaseGetColumnType(int request,int column);
      int  DatabaseGetColumnText(int request,int column,string &value);
      int  DatabaseGetColumnInteger(int request,int column,int &value);
      int  DatabaseGetColumnLong(int request,int column,long &value);
      int  DatabaseGetColumnDouble(int request,int column,double &value);
      int  DatabaseGetColumnBlob(int request,int column,void &data[]);
    
      //--- 处理事务
      int  DatabaseExecute(int db_id,string request);  
      int  DatabaseBeginTransaction(int db_id);
      int  DatabaseCommitTransaction(int db_id);
      int  DatabaseRollbackTransaction(int db_id);
  11. MQL5:添加MQL5程序的新属性,可以选择默认的可视化方法。
    #property optimization_chart_mode "3d,InpX,InpY"
    该属性可以设置优化结束时打开的图表类型,以及X和Y轴的程序参数。

    该属性仅设置默认图表视图。它可以随时使用快捷菜单手动更改。

  12. MQL5:MathArctan2新函数。返回角度的弧度值,其正切值等于两个指定数值的比率。
    double  MathArctan2(
       double  y      // 点的y坐标
       double  x      // 点的x坐标
       );
  13. MQL5:我们对程序进行了总体优化,提高性能并降低资源消耗。
  14. MQL5:添加可在策略测试中执行的数学计算示例。这些在\MQL5\Experts\Examples\Math 3D\目录下提供。
  15. MQL5:引入对namespaces(命名空间)更严格控制。
  16. MQL5:添加在MQL5程序中使用.NET库时加载链接库。如果使用的.NET程序库需要其他程序库才可运行,编译器将尝试从\MQL5\Libraries自动下载所需的程序端。
  17. MQL5:修正用于Python集成的MetaTrader模块中的时间操作。现在,所有输出数据都使用程序端连接的交易服务器的时间。
  18. Tester:添加许多新功能和改进:


    交易品种的自定义设置
    现在您可以更改主要交易品种的设置,并通过它执行测试/优化。几乎所有规格参数都可以重写:交易量、交易模式、预付款需求、执行模式和其他设置。因此,如果您需要在不同条件下检查EA,则无需创建单独的自定义交易品种和下载其历史记录。这可以通过更改标准的交易品种设置来完成。



    如果交易品种规格为自定义,则齿轮图标和交易品种图标将用星号标记。这表示自定义参数用于当前测试。




    最后设置/EA交易/图表
    使用新快捷菜单命令进行快速测试或优化设置。选择最后使用的测试设置、最近图表或应用程序:




  19. MetaEditor:添加直接从MetaEditor与C/C++和Python合作的能力。现在,可以使用内置编辑器管理多语言项目。

    如果您的电脑安装了对应的编译器,MetaEditor将进行检测并添加到设置中。同时,您还可以在“编译器”选项卡下指定所需组件的路径。在相同的选项卡中,您可以通过点击相应字段旁边的“安装”来下载组件。





    然后,您就可以如同编译MQL5程序一样,与C/C++和Python合作。

  20. MetaEditor:添加支持Shared Project目录中的子项目,旨在通过MQL5存储开发共享项目。以前,只能在顶层创建单个项目。
  21. MetaEditor:内置调试程序更新。
  22. MetaEditor:修正在使用代码样式(styler)时添加函数标题。
  23. MetaEditor:“跳转到上一个/下一个光标位置”命令现在不仅在“查看”菜单提供,还显示在工具栏上。
  24. MetaEditor:现在可以在项目名称中使用空格。
  25. Android:添加在交易商网站快速切换到入金/出金页面的能力。

    无需在交易商网站的交易者室中搜索对应的功能。可在程序端中直接获得快速导航命令:用户可以从“账户”和“交易”部分切换到入金和出金页面:



    • 只有在交易商对交易账户启用对应的功能,才可以进行入金/出金操作。
    • 交易程序端不执行任何账户入金/出金操作。集成功能将用户重新定向到对应的交易商网站页面。

  26. Android:现在,历史持仓可按平仓日期进行排序。
  27. Android:添加在历史部分用红色和绿色垂直线标记“止损”平仓或“止盈”平仓。
  28. Android:在交易品种规格中添加新字段:

    • 分类 — 这个属性用于额外标记交易品种。例如,这可以是该交易品种所属的市场行业:农业、石油&天然气等。只有在交易商提供对应信息的情况下才显示分类。
    • 交易所 — 进行证券交易的交易所名称。只有在交易商提供对应信息的情况下才显示分类。

  29. Android:在交易部分添加“追加预付款”状态的显示。在这种状态出现时,“预付款”、“可用预付款”和“预付款水平”参数显示为红色。
  30. Android:修正在平板电脑上显示OTP部分打开按键。
  31. Android:其他修复和改进。
  32. iPhone/iPad:添加在交易商网站快速切换到入金/出金页面的能力。更多详细信息请参阅“MetaTrader 5 Android版新功能列表”。



  33. iPhone/iPad:添加对iOS/iPadOS暗模式的支持。
  34. iPhone/iPad:在iPad版本中已提供动态密码部分。
  35. iPhone/iPad:在历史部分用红色和绿色垂直线标记“止损”平仓或“止盈”平仓。
  36. iPhone/iPad:现在,历史持仓可按平仓日期进行排序。如果持仓尚未关闭,则使用开仓日期进行排序。
  37. iPhone/iPad:其他修复和改进。
  38. 基于崩溃日志进行修复。

更新将通过实时更新系统提供。


 
MetaTrader 5新功能
MetaTrader 5新功能
  • www.metatrader5.com
新版MetaTrader 5平台build 2170:MQL5作用域,全局策略测试和内置虚拟主机更新 程序端 重新设计了内置虚拟主机管理选项。关于租用程序端以及环境迁移、停止和启动功能的所有信息,现在都可以在“工具箱”窗口的单独选项卡中获得。 在早期版本中,“虚拟主机”功能可以在“导航”窗口的快捷菜单中使用。现在所有必要的信息和控制命令都方便简捷地排列在“VPS”选项卡中: 基本订阅信息显示在左侧: 连接数据:比较您主机服务器和本地计算机上的客户端运行之间的网络延迟。 租用主机的交易账户和付款计划。 独特的订阅标识符。点击ID打开MQL5.community用户个人资料中的“主机”部分,也可以在这里管理订阅...
 

交易,自动交易系统和测试交易策略论坛

MQL5中的SQLite:新功能和性能测试

雷纳特·法特赫林,2019.12.07 09:24

在版本2265中,我们实现了用于基于SQLite 3.30.1的数据库处理常规功能:

使用DATABASE_OPEN_MEMORY标志,数据库既可以存储在磁盘上,也可以存储在内存中。在DatabaseTransactionBegin / Commit / Rollback事务中包装大量插入/更改,可将操作加速数百倍。

由于我们尽可能地关注性能,因此这是LLVM 9.0.0与MQL5测试的结果。时间以毫秒为单位,越短越好:
Windows 10 x64, Intel Xeon  E5-2690 v3 @ 2.60GHz
                                                        LLVM   MQL5
---------------------------------------------------------------------------------
Test  1: 1000 INSERTs:                                 11572   8488
Test  2: 25000 INSERTs in a transaction:                  59     60
Test  3: 25000 INSERTs into an indexed table:            102    105
Test  4: 100 SELECTs without an index:                   142    150
Test  5: 100 SELECTs on a string comparison:             391    390
Test  6: Creating an index:                               43     33
Test  7: 5000 SELECTs with an index:                     385    307
Test  8: 1000 UPDATEs without an index:                   58      54
Test  9: 25000 UPDATEs with an index:                    161    165
Test 10: 25000 text UPDATEs with an index:               124    120
Test 11: INSERTs from a SELECT:                           84     84
Test 12: DELETE without an index:                         25     74
Test 13: DELETE with an index:                            70     72
Test 14: A big INSERT after a big DELETE:                 62     66
Test 15: A big DELETE followed by many small INSERTs:     33     33
Test 16: DROP TABLE: finished.                            42     40

MQL5中的速度与使用最佳编译器之一的本机C ++绝对相同。附带了一个基准测试包。


我们还实现了独特的DatabaseReadBind函数,该函数使您可以将记录直接读取到结构中,从而简化并加快了批量操作。

这是一个简单的示例:

 struct Person
  {
   int                id;
   string             name;
   int                age;
   string             address;
   double             salary;
  };

//+------------------------------------------------------------------+
//| Test                                                             |
//+------------------------------------------------------------------+
bool TestDB( string filename, int flags)
  {
   int db;
//--- open
   db=DatabaseOpen(filename,flags);
   if (db== INVALID_HANDLE )
     {
       Print ( "DB: " ,filename, " open failed with code " , GetLastError ());
       return ( false );
     }
//--- create a table
   if (!DatabaseTableExists(db, "COMPANY" ))
       if (!DatabaseExecute(db, "CREATE TABLE COMPANY("
                           "ID INT PRIMARY KEY     NOT NULL,"
                           "NAME           TEXT    NOT NULL,"
                           "AGE            INT     NOT NULL,"
                           "ADDRESS        CHAR(50),"
                           "SALARY         REAL );" ))
        {
         Print ( "DB: " ,filename, " create table failed with code " , GetLastError ());
         DatabaseClose(db);
         return ( false );
        }
//--- insert data
   if (!DatabaseExecute(db, "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 ); "
                       "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "
                       "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );"
                       "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );" ))
     {
       Print ( "DB: " ,filename, " insert failed with code " , GetLastError ());
      DatabaseClose(db);
       return ( false );
     }
//--- prepare the request
   int request=DatabasePrepare(db, "SELECT * FROM COMPANY WHERE SALARY>15000" );

   if (request== INVALID_HANDLE )
     {
       Print ( "DB: " ,filename, " request failed with code " , GetLastError ());
      DatabaseClose(db);
       return ( false );
     }
//--- выводим записи
   Person person;

   for ( int i= 0 ; DatabaseReadBind(request,person); i++)
       Print (i, ":  " ,person.id, " " , person.name, " " ,person.age, " " ,person.address, " " ,person.salary);

   Print ( "" );
//--- close all
   DatabaseFinalize(request);
   DatabaseClose(db);
   return ( true );
  }

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
   TestDB( "test.sqlite" ,DATABASE_OPEN_READWRITE | DATABASE_OPEN_CREATE |DATABASE_OPEN_COMMON);
  }


Output:
0 :   1 Paul 32 California 20000.0
1 :   3 Teddy 23 Norway 20000.0
2 :   4 Mark 25 Rich-Mond   65000.0 




附加的文件:
SqLiteTest.zip  2709 kb
 

论坛

新版MetaTrader 5平台Build 2280

MetaQuotes Software Corp., 2019.12.12 15:56

MetaTrader 5平台更新将于2019年12月13日,星期五进行发布。此次更新提供了我们基于之前MetaTrader 5 build 2265主要更新后收到的反馈所进行的重要补充和修正:

  1. 程序端:修正了导致无法从没有数据的图表中删除EA交易的错误。
  2. 程序端:修正Wine下图表标题显示的问题。
  3. MQL5:改善MQL5程序的加载和编译速度。
  4. MQL5:双击图表现在作为单击事件传递到MQL5程序。在此之前,此类事件并未得到处理。
  5. MQL5:修正StringTrimRight函数的操作。
  6. Tester:修正导致设置中的测试交易品种为空的错误。这个错误可能由在不同交易品种设置的交易账户之间切换引起的。新操作:如果在当前连接的交易账户中没有找到之前选择的交易品种,那么会自动选择市场报价中第一个可用的交易品种。
  7. MetaEditor:修正重新打开项目属性时加载应用程序图标的问题。
  8. 添加DirectX 3D可视化功能文档。
  9. 更新用户界面翻译。
  10. 基于崩溃日志进行修复。

更新将通过实时更新系统提供。

我们强烈建议安装此更新。

 

论坛

新版MetaTrader 5平台Build 2340:在Tester中管理账户设置,并扩展Python集成

MetaQuotes, 2020.02.25 07:17

MetaTrader 5平台更新已于2020年2月21日星期五进行发布。新版将有以下变化:

  1. MetaEditor:添加使用SQLite数据库的新功能。

    前一次平台更新中,我们直接从MQL5引入了对SQLite数据库操作的支持。主要功能可通过MetaEditor用户界面获得:

    • 创建并连接数据库
    • 查看表格并执行快速数据查询
    • 创建并执行SQL查询,回滚更改

    如何工作
    快速数据库创建功能可从MQL5向导中获得。您可以轻松创建第一个表格并定义它的字段。




    创建数据库之后,您将转到一个新导航版块,其中提供了管理数据的命令。

    数据库表显示在左侧窗口。双击表格名称,快速查询前1,000条记录。在此导航部分,您还可以创建和打开其他数据库,以及使用表格。

    数据库可以在主编辑器窗口中进行管理。在这里,您可以填写表格、搜索和选择数据、输入SQL查询和执行其他操作。



    关于MetaTrader 5对数据库操作的更多信息,请参阅文章“SQLite:本地处理MQL5中的SQL数据库”。

  2. MetaEditor:扩展对多语言项目的支持。此更新提供了使用Python脚本的更广泛的可能性:

    • 现在,此脚本可以使用MQL5向导进行创建,同时可以立即在代码中添加所需程序库的相关性。
    • 导航中添加了特殊图标,相关语法可在编辑器中获得。
    • 当通过MetaEditor运行脚本时,来自Python控制板(stdout, stderr)的消息出现在错误部分。




    点击编辑器中的“编译”,运行脚本:





    若要使用Python,请不要忘记在MetaEditor的Settings \ Compilers部分指定其路径。要启动使用MetaTrader 5程序库,请使用以下命令进行安装:
    pip install MetaTrader 5
    关于Python集成的详细信息,请参阅相关文档

  3. MQL5:完全修订Python集成。此次更新涉及许多新函数和新命令命名。

    新命名
    现有命令已重命名如下:
    MT5Initialize       -> initialize
    MT5Shutdown         -> shutdown
    MT5TerminalInfo     -> terminal_info
    MT5Version          -> version
    MT5CopyRatesFrom    -> copy_rates_from
    MT5CopyRatesFromPos -> copy_rates_from_pos
    MT5CopyRatesRange   -> copy_rates_range
    MT5CopyTicksFrom    -> copy_ticks_from
    MT5CopyTicksRange   -> copy_tick_range

    新命令
    扩展了支持的命令列表。添加交易函数,以及用于处理交易历史和获得交易品种和当前账户信息的函数。

    • account_info()接收关于当前账户的信息。类似AccountInfoIntegerAcountIndoDoubleAccountInfoString
    • positions_total()接收持仓的数量。类似PositionsTotal
    • positions_get(symbol, ticket)接收交易品种或单号的持仓情况。
    • orders_total()接收订单的数量。类似OrdersTotal
    • orders_get(symbol, ticket)接收交易品种或单号的未结订单情况。
    • history_orders_total(from, to)接收指定历史时间段内的订单数量。
    • history_orders_get(from, to, position, ticket)接收指定历史时间段内的订单,根据单号或持仓进行筛选。
    • history_deals_total()接收历史记录中的交易数量。类似HistoryDealsTotal
    • history_deals_get(from, to, position, ticket)接收指定历史时间段内的交易,根据单号或持仓进行筛选。
    • symbol_info(symbol)接收有关交易品种的信息。类似SymbolInfoIntegerSymbolInfoDoubleSymbolInfoString
    • symbol_info_tick(symbol)接收交易品种最后报价。类似SymbolInfoTick
    • symbol_select(symbol, enable)启用/禁用市场报价中的交易品种。类似SymbolSelect
    • order_check(request)检查订单预付款。类似OrderCheck
    • order_send(request)发送订单到服务器。类似OrderSend
    • order_calc_margin(action, symbol, volume, price)计算订单的预付款。类似OrderCalcMargin
    • order_calc_profit(action, symbol, volume, price_open, price_close)计算盈利。类似OrderCalcProfit

    在图表上运行Python脚本
    Python脚本可以直接在平台图表上运行,类似于常规的MQL5程序。这些脚本在导航中使用特殊图标进行标记。



    脚本消息将显示在"Toolbox \ Experts"部分。如果在脚本中使用MetaTrader 5程序库,则脚本可以接收交易品种和账户数据,以及执行交易操作。

    Python脚本可以与其他MQL5脚本和EA并行地在同一图表上运行。要停止执行中断的脚本,请将其从图表中移除。

    附加保护
    若要在使用第三方Python程序端时启用附加账户保护,您可以在程序端设置中使用“通过外部Python API启用自动交易”选项。




    Python脚本只可在该选项禁用时执行交易操作。

  4. MQL5:明显加快重新启动MQL5程序和从MQL5程序重新创建自定义指标的速度。在某些情况下,操作执行速度要快100倍。
  5. MQL5:添加处理数据库的函数:

    DatabaseImport
    从文件导入数据到图表。
    long  DatabaseImport(
       int           database,          // 在DatabaseOpen中接收到的数据库句柄
       const string  table,             // 要向其插入数据的表格名称
       const string  filename,          // 要从中导入数据的文件名
       uint          flags,             // 标识组合
       const string  separator,         // 数据分隔符
       ulong         skip_rows,         // 要跳过的首行数
       const string  skip_comments      // 定义注释的字符串
       );

    DatabaseExport
    将表格或SQL查询结果导出到CSV文件。该文件用UTF-8编码创建。
    long  DatabaseExport( 
       int           database,           // 在DatabaseOpen中接收到的数据库句柄
       const string  table_or_sql,       // 表格名称或SQL查询
       const string  filename,           // 用于数据导出的CSV文件名
       uint          flags,              // 标识组合
       const string  separator           // CSV文件中的数据分隔符
       );

    DatabasePrint
    将表格或SQL查询结果打印到专家日志。
    long  DatabasePrint(
       int           database,          // 在DatabaseOpen中接收到的数据库句柄
       const string  table_or_sql,      // 表格或SQL查询
       uint          flags              // 标识组合
       );

  6. MQL5:添加FileSelectDialog函数,它可调用创建/打开文件或文件夹的系统对话框。
    int  FileSelectDialog(
       string   caption,              // 窗口标题
       string   initial_dir,          // 初始目录
       string   filter,               // 扩展过滤器
       uint     flags,                // 标识组合
       string&  filenames[],          // 包含文件名的数组
       string   default_filename      // 默认文件名
       );
    新函数使用户能够与MQL5程序进行有效互动。

  7. MQL5:ENUM_DEAL_PROPERTY_DOUBLE枚举中的DEAL_FEE值。它用于交易费。该值表示由交易商收取的单独手续费类型。

  8. Tester:添加在策略测试期间设置自定义交易账户设置的功能,例如交易限制、预付款设置和手续费。新功能提供了建模各种交易条件的扩展功能。




    常规设置
    在这部分,您可以设置账户上可同时存在的未结订单和持仓的最大数量。此外,您还可以配置不允许程序交易的时间段。


    预付款
    这部分可以配置将在测试中使用的预付款保留规则和持仓账户系统:

    • 风险管理 — 风险管理模式:场外交易(OTC)和场内交易(交易所)模式,单边系统和锁仓系统。更多详情请参阅帮助
    • 追加预付款水平 — 当达到该水平时,账户切换到追加预付款状态。
    • 强制平仓水平 — 当达到该水平时,取消所有订单并关闭所有持仓。这些水平可以用百分比和货币表示。在前一种情况下,它们被确定为账户的净值数值。如果选择“以百分比表示”,该水平定义为账户的“预付款水平”值(资金/预付款*100)。
    • 未兑现盈利 — 表示可用预付款中的当前浮动盈利/亏损:
      • 不使用未兑现盈利/亏损 — 计算中不包括持仓的盈利/亏损。
      • 使用未兑现盈利/亏损 — 计算中包括持仓的盈利/亏损。
      • 使用未兑现盈利 — 只包括盈利。
      • 使用未兑现亏损 — 只包括亏损。
    • 每日固定盈利 — 表示可用预付款中客户的每日固定盈利/亏损:
      • 使用每日固定盈利/亏损 — 包括一个交易日内收到的可用预付款盈利和亏损。
      • 使用每日固定亏损 — 只包括交易日内收到的亏损。交易日内,获得的盈利累计在专门账户字段(“冻结”)。交易日结束时,累计的盈利被取消冻结(归零)并被添加到账户结余中(包含在可用预付款中)。
    • 交易日结束时取消冻结固定盈利 — 该选项只在选择“使用每日固定亏损”选项时可用。如果启用此选项,则在交易日结束时将取消冻结累计的盈利(因此也包含在可用预付款中)。否则,这部分盈利将被继续冻结。


    手续费
    这部分提供管理所有交易操作收取的手续费。

    • 手续费包括单级手续费和多级手续费,即无论成交量/周转是多少,手续费都是相同的,或者可以根据交易规模而定。对应的数据在程序端显示。
    • 手续费可以在交易完成后,或在交易日/交易月结束时立即收取。
    • 单独的手续费可以依据成交方向进行收取:市场买入、市场卖出或两种都包括的操作类型。
    • 手续费可按照每手或每笔交易来收取。
    • 手续费能够以资金金额、百分比或点数来计算。



  9. Tester:优化并加速市场扫描模式下的工作,在此过程中,对市场报价中可用的所有交易品种进行多次测试。
  10. Tester:现在以点数计算盈利时会考虑交易或持仓大小。之前,只对每手执行计算。
  11. Tester:改进优化结果图形的管理。已对缩放优化图形添加了滚动选项。双击一个图点,在测试通过表格中选择相应的结果。
  12. MetaEditor:在导航中添加SQLite数据库文件的显示(*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3)。
  13. MetaEditor:修正错误保存项目属性。
  14. 更新文档。

新版MetaTrader 5 将通过LiveUpdate系统提供。


 

论坛

MetaTrader VPS基础架构得到改进,同时扩展数据中心网络

MetaQuotes, 2020.02.26 11:49

在过去一年中,MetaTrader平台虚拟主机的用户基础显著增长。针对这个服务,我们在整个服务基础架构的开发商投入大量资金,并大幅度扩展了数据中心网络。

圣保罗的新主机托管点成为托管点池中的最新成员,是法兰克福、伦敦、纽约、香港、新加坡、莫斯科和阿姆斯特丹等现有主机托管点的补充。我们将其部署在与托管B3股票交易所(BM&F Bovespa的前身)和巴西最大交易商相同的数据中心中。与全球金融中心近在咫尺的地理位置,使交易者能够以最小的ping信号将平台的虚拟机租借到全球任何地方的交易商服务器。

The network of data centers

升级服务的弊端就是必须提高VPS价格。目前,租用服务器一个月的最低价格是15美元起。以这个价位,交易者可获得最多3GB的RAM,最高16GB的磁盘空间,多核CPU以及到交易商的最低网络延迟。

服务计划
价格,
美元
主机价格
每个月,USD
免费(24小时)
0

1个月订阅费
15
15
3个月订阅费
42
14
6个月订阅费
79
13
12个月订阅费
153
12.8


MetaQuotes的本地VPS服务不同于常见的VPS解决方案,因为它是专为主机交易程序端量身定制的,因此可直接在MetaTrader平台中使用。目前已有数以万计的交易者在使用MetaTrader虚拟主机服务,且无需担心网络连接速度,PC故障或电源故障。

新用户可获得前24小时免费服务的机会 — 开始体验VPS。

免费体验MetaTrader VPS