账户属性
账户属性
使用 AccountInfoInteger(), AccountInfoDouble() 和 AccountInfoString() 函数获得活期账户信息,该函数参数值可用接收类似于ENUM_ACCOUNT_INFO项目的值。
使用 AccountInfoInteger() 函数
ENUM_ACCOUNT_INFO_INTEGER
| 标识符 | 描述 | 类型 |
|---|---|---|
| ACCOUNT_LOGIN | 账户数量 | long |
| ACCOUNT_TRADE_MODE | 账户交易方式 | ENUM_ACCOUNT_TRADE_MODE |
| ACCOUNT_LEVERAGE | 账户杠杆 | long |
| ACCOUNT_LIMIT_ORDERS | 活跃待办订单最大允许量 | int |
| ACCOUNT_MARGIN_SO_MODE | 建立最少使用保证金方式 | ENUM_ACCOUNT_STOPOUT_MODE |
| ACCOUNT_TRADE_ALLOWED | 允许活期账户交易 | bool |
| ACCOUNT_TRADE_EXPERT | 允许EA交易 | bool |
| ACCOUNT_MARGIN_MODE | 预付款计算模式 | ENUM_ACCOUNT_MARGIN_MODE |
| ACCOUNT_CURRENCY_DIGITS | 账户货币的小数位数,这是正确展示交易结果所必需的 | int |
| ACCOUNT_FIFO_CLOSE | 表示只能通过FIFO规则平仓的一种指示。如果该属性值设为true,那么每个交易品种都将按照持仓的相同顺序进行平仓,从最早持仓的开始。如果试图以不同的顺序平仓,那么交易者将收到一个对应的错误提示。 对于采用非锁仓持仓账户模式的账户 (ACCOUNT_MARGIN_MODE!=ACCOUNT_MARGIN_MODE_RETAIL_HEDGING),该属性值始终为false。 | bool |
ENUM_ACCOUNT_INFO_DOUBLE
| 标识符 | 描述 | 类型 |
|---|---|---|
| ACCOUNT_BALANCE | 存入货币时账户结余 | 双精度 |
| ACCOUNT_CREDIT | 存入货币时账户亏空 | 双精度 |
| ACCOUNT_PROFIT | 存入货币时账户当前利润 | 双精度 |
| ACCOUNT_EQUITY | 存入货币时账户权益 | 双精度 |
| ACCOUNT_MARGIN | 存入货币时账户保证金使用 | 双精度 |
| ACCOUNT_MARGIN_FREE | 存入货币时账户可用保证金 | 双精度 |
| ACCOUNT_MARGIN_LEVEL | 账户保证金水平仪百分比形式制定 | 双精度 |
| ACCOUNT_MARGIN_SO_CALL | 保证金调用水平,依据建立的ACCOUNT_MARGIN_SO_MODE,以百分比形式或存入货币时期表示 | 双精度 |
| ACCOUNT_MARGIN_SO_SO | 保证金停用水平,依据建立的ACCOUNT_MARGIN_SO_MODE,以百分比形式或存入货币时期表示 | 双精度 |
| ACCOUNT_MARGIN_INITIAL | 初始预付款。账户上保留的金额需要涵盖所有挂单的预付款 | 双精度 |
| ACCOUNT_MARGIN_MAINTENANCE | 维持预付款。账户上保留的最小净值需要涵盖所有持仓的最小金额 | 双精度 |
| ACCOUNT_ASSETS | 账户的活动资本 | 双精度 |
| ACCOUNT_LIABILITIES | 账户的流动负债 | 双精度 |
| ACCOUNT_COMMISSION_BLOCKED | 账户的当前锁定手续费金额 | 双精度 |
ENUM_ACCOUNT_INFO_STRING
| 标识符 | 描述 | 类型 |
|---|---|---|
| ACCOUNT_NAME | 用户名 | 字符串 |
| ACCOUNT_SERVER | 交易服务器名称 | 字符串 |
| ACCOUNT_CURRENCY | 账户货币 | 字符串 |
| ACCOUNT_COMPANY | 提供账户的公司名称 | 字符串 |
有几种账户类型,可以在交易服务器上打开。MQL5程序运行的账户类型可以使用ENUM_ACCOUNT_TRADE_MODE 枚举找出来。
ENUM_ACCOUNT_TRADE_MODE
| 标识符 | 描述 |
|---|---|
| ACCOUNT_TRADE_MODE_DEMO | 样本账户 |
| ACCOUNT_TRADE_MODE_CONTEST | 竞争账户 |
| ACCOUNT_TRADE_MODE_REAL | 真实账户 |
如果净值不足以保持持仓,止损离场的情况,例如强制平仓发生。出现止损离场的最小预付款水平能够以百分比或货币条款来设置。若要找到账户设置的模式,请使用ENUM_ACCOUNT_STOPOUT_MODE 枚举。
ENUM_ACCOUNT_STOPOUT_MODE
| 标识符 | 描述 |
|---|---|
| ACCOUNT_STOPOUT_MODE_PERCENT | 账户以半分比方式截止 |
| ACCOUNT_STOPOUT_MODE_MONEY | 账户以货币方式截止 |
ENUM_ACCOUNT_MARGIN_MODE
| 标识符 | 描述 |
|---|---|
| ACCOUNT_MARGIN_MODE_RETAIL_NETTING | 用于场外交易市场“单边持仓”模式下的持仓说明 (一个交易品种只存在一个持仓)。预付款计算基于交易品种的类型 (SYMBOL_TRADE_CALC_MODE)。 |
| ACCOUNT_MARGIN_MODE_EXCHANGE | 用于交易所市场。预付款计算基于交易品种设置中指定的折扣。折扣由交易商设定,但不能低于交易所设定的值。 |
| ACCOUNT_MARGIN_MODE_RETAIL_HEDGING | 用于交易所市场,在这里个体持仓成为可能(锁仓,一个交易品种可以存在多个持仓)。预付款计算基于考虑锁仓预付款 (SYMBOL_MARGIN_HEDGED)的交易品种类型(SYMBOL_TRADE_CALC_MODE) 。 |
输出简单账户信息的脚本示例。
//+------------------------------------------------------------------+
//| 脚本程序起始函数 |
//+------------------------------------------------------------------+
void OnStart()
{
//--- 公司名称
string company=AccountInfoString(ACCOUNT_COMPANY);
//--- 客户名称
string name=AccountInfoString(ACCOUNT_NAME);
//--- 账号
long login=AccountInfoInteger(ACCOUNT_LOGIN);
//--- 服务器名称
string server=AccountInfoString(ACCOUNT_SERVER);
//--- 账户货币
string currency=AccountInfoString(ACCOUNT_CURRENCY);
//--- 模拟,竞赛或真实账户
ENUM_ACCOUNT_TRADE_MODE account_type=(ENUM_ACCOUNT_TRADE_MODE)AccountInfoInteger(ACCOUNT_TRADE_MODE);
//--- 现在将枚举的值转换为一个可理解的形式
string trade_mode;
switch(account_type)
{
case ACCOUNT_TRADE_MODE_DEMO:
trade_mode="demo";
break;
case ACCOUNT_TRADE_MODE_CONTEST:
trade_mode="contest";
break;
default:
trade_mode="real";
break;
}
//--- 以百分比或货币形式设置止损离场
ENUM_ACCOUNT_STOPOUT_MODE stop_out_mode=(ENUM_ACCOUNT_STOPOUT_MODE)AccountInfoInteger(ACCOUNT_MARGIN_SO_MODE);
//--- 获取当出现预付款调用和止损离场时的水平的值
double margin_call=AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL);
double stop_out=AccountInfoDouble(ACCOUNT_MARGIN_SO_SO);
//--- 显示账户信息简介
PrintFormat("The account of the client '%s' #%d %s opened in '%s' on the server '%s'",
name,login,trade_mode,company,server);
PrintFormat("Account currency - %s, MarginCall and StopOut levels are set in %s",
currency,(stop_out_mode==ACCOUNT_STOPOUT_MODE_PERCENT)?"percentage":" money");
PrintFormat("MarginCall=%G, StopOut=%G",margin_call,stop_out);
}