MetaTrader 5 已具备锁仓账户系统

23 三月 2016, 08:27
MetaQuotes Software Corp.
4
4 497

MetaTrader 5平台最初是专为净额持仓账户系统而设计的。净额系统每个金融工具仅允许一个持仓,也就意味着该工具的所有进一步操作只能是关闭,撤销或改变现有持仓的交易量。为了扩大零售外汇交易者的可能性,我们新增第二种账户系统 - 锁仓系统。现在,每个交易品种可以有多位持仓,包括反向持仓。这就为实现基于所谓“锁定”的交易策略铺平了道路 - 如果价格移动方向与交易者相反,那么他们就可以新建一个反向持仓。

因为新系统类似于MetaTrader 4中使用的系统,所以交易者将会非常熟悉。与此同时,交易者将能够体验第五代平台版本的全部优势 - 使用多个交易填充订单(包括部分填充),多种货币和MQL5 云网络支持多线程测试,等等。

现在,您可以使用一个账户进行市场交易,坚持净额系统,允许每个工具只一个持仓,并且在同一个平台使用另一个账户从事外汇交易,使用锁仓。

本文详细描述了净额和锁仓系统,以及阐明了实施第二账户系统相关的变化。


账户持仓取决于交易账户

持仓账户系统是在一个账户水平设置并在程序端窗口的标题和日志中展示:

当前账户的持仓账户系统

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

新建锁仓模拟账户

若要新建锁仓真实账户,请联系您的交易商。


净额系统

通过该系统,您可以在同一时间一个交易品种只有一个普通持仓:

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

到底什么导致了反向交易无关紧要 — 执行的市场订单或者激活的挂单。

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

净额

执行两个交易得出1手一个普通持仓。


锁仓系统

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

如果您持仓一个交易品种,执行一个新的交易(或挂单启动),就会新建一个额外持仓。您的当前持仓不变。

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

锁仓

执行这些交易会得到两个独立的持仓。


选择系统的影响

根据账户持仓系统,一些平台功能可能有不同的表现:

  • 止损获利继承 规则变化。
  • 若要在净额系统平仓,您应该执行一个相同交易品种相同交易量的反向交易操作。若要锁仓系统平仓,直接在持仓快捷菜单选择“平仓”命令。
  • 锁仓系统中不能撤销持仓。在这种情况下,关闭当前持仓,新建剩余交易量的新持仓。
  • 在锁仓系统中,一个新的条件可以用于预付款计算 - 锁仓预付款。


新的交易操作类型 - Close By

新的交易操作类型已经添加到锁仓账户 - 反向平仓。该操作允许在独立交易品种关闭两个反向持仓。如果反向持仓拥有不同的手数,两个中只有一个订单可以保持持仓。其交易量将等于平仓手数的差异,而持仓方向和开盘价将匹配(交易量)越大的平仓。

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

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

反向平仓

在后面的情况下,“close by”命令被替代。评论交易数在该评论指明。一对儿反向持仓由两个“out by”交易关闭。从两次平仓获得的总获利/总亏损只在一笔交易中指定。

历史记录中的"Close by" 操作


持仓账户锁仓系统中的预付款计算

如果使用锁仓账户系统,那么预付款的计算则使用上述相同的公式和规则。 然而,相同交易品种的多位持仓还有一些额外的功能。

同向持仓/订单

总结交易量并为其计算加权平均开盘价。通过交易品种类型对应的公式获得的值用于计算预付款。.

对于挂单(如果预付款比率非零),预付款独立计算。

反向持仓/订单

相同交易品种的反向持仓被视为锁仓或对冲。对这种持仓可以使用两种预付款计算方式。计算方式由交易商决定。

锁仓预付款计算在合约规范中设置


基本计算
使用较大的单边
若 合约规格 的 "对冲保证金" 字段未指定 "使用较大分支计算" 时使用。

计算由若干步组成:
  • 对于未覆盖交易量
  • 对于覆盖交易量 (如果对冲保证金大小已指定)
  • 对于挂单
结果保证金数额的计算是每一步计算出的保证金总和。

计算未覆盖交易量
  • 计算所有持仓的交易量总计, 以及每条分支的市价单 — 买入和卖出。
  • 计算持仓和每条分支的订单权重平均开盘价: (第一笔仓位或订单开盘价 * 第一笔交易量 + ... + 第 N 笔仓位或订单开盘价 * 第 N 笔交易量) / (第一笔交易量 + ... + 第 N 笔交易量)。
  • 计算未覆盖交易量 (从较大分支里减去较小分支的交易量)。
  • 计算出的交易量和权重均价稍后用来根据相应 品种类型 的公式计算保证金。
  • 当考虑 保证金率 和 转换保证金货币至存款货币 时, 使用比率和汇率的权重平均值。

计算覆盖交易量
如果在 合约规格 指定了 "对冲保证金" 值, 则使用。在此情况下收取对冲保证金, 如同未覆盖的交易量。

如果指定了品种的初始保证金, 则对冲保证金指定为其绝对值 (货币条件)。

如果初始保证金未指定 (等于 0), 则在 "对冲" 字段里指定合约大小。保证金根据相应金融工具类型的公式, 使用指定的合约大小计算。例如, 我们有两笔仓位, 一笔是 1 手买入 EURUSD, 和 1 手卖出 EURUSD, 合约大小是 100,000。如果在 "对冲" 字段里指定的数值是 100,000, 则两笔仓位的保证金将会按照每 1 手计算。如果您指定 0, 不会收取对冲 (覆盖) 交易量的保证金。

每笔对冲仓位收取的保证金, 根据 合约规格 里 "对冲保证金" 字段指定的数值:
  • 计算所有已开仓位和市价单的对冲交易量 (从较大分支里减去未覆盖交易量)。
  • 计算仓位和订单的权重平均开盘价: (第一笔仓位或订单开盘价 * 第一笔交易量 + ... + 第 N 笔仓位或订单开盘价 * 第 N 笔交易量) / (第一笔交易量 + ... + 第 N 笔交易量)。
  • 计算出的交易量, 权重均价稍后用来根据相应 品种类型 的公式计算保证金。
  • 当考虑 保证金率 和 转换保证金货币至存款货币 时, 使用比率和汇率的权重平均值。

计算挂单
  • 单独计算每笔挂单类型的保证金 (Buy Limit, Sell Limit, 等等)。
  • 当考虑 保证金率 和 转换保证金货币至存款货币 时, 使用每种挂单类型的比率和汇率的权重平均值。
如果在 合约规格 里的 "对冲保证金" 字段指定了 "使用较大分支计算", 则使用。
  • 计算所有已开仓位和市价单的空头与多头分支的保证金。
  • 单独计算每笔挂单类型的保证金 (Buy Limit, Sell Limit, 等等)。
  • 将多头分支的保证金汇总: 多头持仓和市价单 + 多头挂单。
  • 将空头分支的保证金汇总: 空头持仓和市价单 + 空头挂单。
  • 所有已计算数值的最大值用作最终的保证金值。


MQL5的变化

现在,每个持仓都有其独特的标签。它通常对应于持仓使用的订单标签。程序端更新后,标签自动安排到所有可用持仓。

当在锁仓系统中改变或关闭持仓时,请确保指定其标签 (MqlTradeRequest::ticket)。您也可以在净额系统指定标签,然而根据交易品种名称确定持仓。


MqlTradeRequest

MqlTradeRequest 有两个新字段:

  • 持仓 — 持仓标签。为清楚鉴别而改变和关闭持仓时填充它。它通常匹配用于持仓的订单标签。
  • position_by — 反向持仓标签。它在反向关闭持仓时使用(打开相同但反向的交易品种)。
struct MqlTradeRequest
  {
   ENUM_TRADE_REQUEST_ACTIONS    action;           // 执行操作类型
   ulong                         magic;            // EA交易神奇数字
   ulong                         order;            // 订单标签
   string                        symbol;           // 交易品种名称
   double                        volume;           // 按手数请求的交易量
   double                        price;            // 价格 
   double                        stoplimit;        // 止损限价订单水平
   double                        sl;               // 止损订单水平
   double                        tp;               // 获利订单水平
   ulong                         deviation;        //要求价格中最大允许偏差
   ENUM_ORDER_TYPE               type;             // 订单类型
   ENUM_ORDER_TYPE_FILLING       type_filling;     //订单填充类型
   ENUM_ORDER_TYPE_TIME          type_time;        // 订单时间类型
   datetime                      expiration;       // 订单截止日期 ( ORDER_TIME_SPECIFIED 类型订单)
   string                        comment;          // 订单说明
   ulong                         position;         // 持仓标签
   ulong                         position_by;      // 反向持仓标签
  };

MqlTradeTransaction

MqlTradeTransaction 也有两个类似的字段:

  • position — 受交易影响的持仓标签成交处理市场订单相关的交易事务(TRADE_TRANSACTION_ORDER_* except TRADE_TRANSACTION_ORDER_ADD,这里持仓标签尚未分配) 和订单历史 (TRADE_TRANSACTION_HISTORY_*)。
  • position_by — 反向持仓标签。它在反向关闭持仓时使用(打开相同但反向的交易品种)。只有在关闭反向持仓的订单(close by)和反向关闭的交易 (out by)情况下成交。
struct MqlTradeTransaction
  {
   ulong                         deal;             // 交易标签
   ulong                         order;            // 订单标签
   string                        symbol;           // 交易品种名称
   ENUM_TRADE_TRANSACTION_TYPE   type;             // 交易事务类型
   ENUM_ORDER_TYPE               order_type;       // 订单类型
   ENUM_ORDER_STATE              order_state;      // 订单状态
   ENUM_DEAL_TYPE                deal_type;        // 交易类型
   ENUM_ORDER_TYPE_TIME          time_type;        // 订单时间类型
   datetime                      time_expiration;  // 订单截止日期
   double                        price;            // 价格 
   double                        price_trigger;    // 止损限价订单激活价格
   double                        price_sl;         // 止损水平
   double                        price_tp;         // 获利水平
   double                        volume;           // 交易量手数
   ulong                         position;         // 持仓标签
   ulong                         position_by;      // 反向持仓标签
  };


PositionGetTicket

PositionGetTicket 函数通过持仓列表索引返回一个持仓标签并自动选择使用PositionGetDoublePositionGetIntegerPositionGetString函数进一步工作的持仓。

ulong  PositionGetTicket(
   int  index      // 持仓列表索引
   );


PositionSelectByTicket

新的PositionSelectByTicket 函数通过指定标签选择一个持仓进行进一步工作。

bool  PositionSelectByTicket(
   ulong   ticket     // 持仓标签
   );


PositionSelect

PositionSelect 通过交易品种名称选择一个持仓,使用PositionGetDoublePositionGetIntegerPositionGetString 函数进行下一步工作。在锁仓系统中(在这里,一个交易品种可以有多个持仓),函数选择最低标签的持仓。


ACCOUNT_MARGIN_MODE

新属性ACCOUNT_MARGIN_MODE 允许接收预付款计算模式和交易账户持仓账户:

标识符
描述
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

新属性SYMBOL_MARGIN_HEDGED 允许接收一个交易品种锁仓预付款的值。持仓账户锁仓系统的预付款计算已被如上描述。


新交易常量

由于新增 Close By 操作类型,新的交易属性也显现出来:

  • TRADE_ACTION_CLOSE_BY — 新 交易操作类型 — 反向平仓。
  • ORDER_TYPE_CLOSE_BY — 新 订单类型 — 反向平仓。
  • ORDER_POSITION_BY_ID — new 订单属性 — 用于关闭当前持仓的反向持仓标签。
  • DEAL_ENTRY_OUT_BY — 新 交易类型 — 反向平仓。


额外奖励 - 锁仓和MQL5云网络

现在,您既可以使用MetaTrader 5从事股票市场交易,也可以用它进行广受欢迎的锁仓零售外汇交易。 应用锁仓的自动系统开发人员已经得到了另一个重要的优势。除了多线程测试外,MQL5 云网络的整个计算性能现在也在您掌控。

更新您的平台,体验这些新功能吧!

本文译自 MetaQuotes Software Corp. 撰写的俄文原文
原文地址: https://www.mql5.com/ru/articles/2299

最近评论 | 前往讨论 (4)
Xiangdong Guo
Xiangdong Guo | 23 3月 2016 在 19:29
这是准备甩掉 MT4 包袱的节奏, 呵呵
Sonne
Sonne | 24 3月 2016 在 16:23
MT5终于可以开对冲交易了。怎么时候有新版本下载呀
Jinsong Zhang
Jinsong Zhang | 27 3月 2016 在 10:37
Sonne:
MT5终于可以开对冲交易了。怎么时候有新版本下载呀

论坛

遇见MetaTrader 5 测试版 - 锁仓和新用户指南

MetaQuotes Software Corp., 2016.03.25 13:50

具备锁仓系统的MetaTrader 5 beta build 1281 已经发布。与以往净额系统不同的是,锁仓系统允许多个交易,甚至是相同交易品种的反向交易。现在,使用MetaTrader 5公共平台,您可以使用净额模式进行外汇工具的交易,也可以使用锁仓模式进行货币性交易。

新的持仓系统类似于被广泛周知的应用在MetaTrader 4中的系统。然而,MetaTrader 5还提供强化的订单管理能力:填充多交易订单,包括部分填充。如果交易者在一个交易品种有一个持仓并执行一个新的交易,那么则会建立一个新持仓。这就是 MetaTrader 5锁仓系统背后的核心理念。交易者可以设置止损和获利水平,并能设置每个持仓的利润水平。

更新的具有持仓账户锁仓系统的MetaTrader 5 交易平台

我们邀请大家加入公开测试我们更新的MetaTrader 5多资产平台。若要加入测试,请在MetaQuotes-Demo服务器上创建一个模拟账户并连接它。平台会自动更新到build 1281,在对话框设置“交易中使用锁仓”选项后,您将能够创建一个锁仓账户系统模拟账户。 如果您确定有错误,请通过mql5.com 论坛或创建服务台请求通知我们。

在MetaQuotes-Demo上新建一个锁仓模拟账户

测试时,请考虑以下问题:

  1. 不可以通过锁仓账户订阅交易信号。
  2. 新锁仓账户的交易只能在MetaTrader 5 build 1281和之后的版本正常工作。
  3. 某些自动交易在锁仓账户可能出现交易错误。
  4. 使用新版MetaEditor build 编译的脚本,EA交易,和指标将无法在虚拟主机上运行。

除了锁仓,MetaTrader 5 测试版还具有更新的用户指南,其中配有大量的插图和视频教程。只需单击 F1 即可获得您大多数问题的答案并加强您的平台知识。

通过更新的MetaTrader 5,将不再需要使用不同的平台进行外汇和股票交易。现在,这是各类金融市场的一站式交易解决方案。

下载新的测试版,体验所有的新功能,让我们知道测试的结果吧。在您的帮助下,我们将使MetaTrader 5变得更好!


Ziheng Zhuang
Ziheng Zhuang | 28 3月 2016 在 10:42
关注!
图形界面 II: 菜单项元件 (第一章) 图形界面 II: 菜单项元件 (第一章)

在本系列文章的第二部分中, 我们将向您展示界面元件开发的详细过程, 例如主菜单和上下文菜单. 我们还会提到元件的绘制以及为此开发一个特别的类. 我们还将深度讨论程序事件管理, 包括自定义事件的问题.

图形界面 I: 在MetaTrader 4终端中使用不同类型的程序来测试界面库 (第五章) 图形界面 I: 在MetaTrader 4终端中使用不同类型的程序来测试界面库 (第五章)

在图形界面系列的第一部分前面的章节中, 我们已经丰富了表单类, 可以通过按下其中的控件来管理表单. 在本文中, 我们将使用不同类型的MQL程序, 例如指标和脚本程序, 来测试我们的成果. 因为此函数库被设计为跨平台的, 因而它可以用于所有MetaTrader平台, 我们也会在MetaTrader 4中测试它.

向指标或者EA中快速添加控制面板 向指标或者EA中快速添加控制面板

你是不是觉得需要向你的指标或者EA中添加图形面板来提升配置参数的速度和便捷性?在本文中,你将学会如何一步一步在你的MQL4/MQL5程序中实现输入参数的交互面板。

通用智能交易系统:交易策略的模式(第一章) 通用智能交易系统:交易策略的模式(第一章)

任何一个智能交易系统(EA)的开发人员,无论编程技能如何,每天都面临着同样的交易目标和算法问题的困扰,即应该如何建立一个可靠的交易系统。本文介绍CStrategy交易引擎,它可以给出这些任务的解决方案,并且向用户提供一种用于描述自定义交易思想的简便机制。