MetaTrader 5 已具备锁仓账户系统

MetaQuotes | 23 三月, 2016

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 有两个新字段:

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 也有两个类似的字段:

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 操作类型,新的交易属性也显现出来:


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

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

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