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

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

21 二月 2020

MetaEditor

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

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

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

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


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

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

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


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

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

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


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


    若要使用Python,请不要忘记在MetaEditor的Settings \ Compilers部分指定其路径。要启动使用MetaTrader 5程序库,请使用以下命令进行安装:
    pip install MetaTrader5
    关于Python集成的详细信息,请参阅相关文档
  3. MetaEditor:在导航中添加SQLite数据库文件的显示(*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3)。
  4. MetaEditor:修正错误保存项目属性。

MQL5

  1. 完全修订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脚本只可在该选项禁用时执行交易操作。

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

    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              // 标识组合
       );

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

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

Tester

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


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

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

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

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

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

  2. 优化并加速市场扫描模式下的工作,在此过程中,对市场报价中可用的所有交易品种进行多次测试。
  3. 现在以点数计算盈利时会考虑交易或持仓大小。之前,只对每手执行计算。
  4. 改进优化结果图形的管理。已对缩放优化图形添加了滚动选项。双击一个图点,在测试通过表格中选择相应的结果。
更新文档。