SymbolInfoCommissions

返回指定金融工具的佣金收取规则。

int  SymbolInfoCommissions(
   string           name,              // 交易品种名称
   MqlCommission&   commissions[]      // 佣金规则数组
   );

参数

name

[in]  交易品种名称。如果参数为 NULL,则使用当前交易品种。

commissions

[out] MqlCommission 结构的动态数组,用于写入指定交易品种的佣金收取规则。

返回值

成功时,函数返回写入 commissions 的元素数量。

发生错误时返回 -1。要获取错误信息,请使用 GetLastError()

注意

commissions 数组的每个元素描述一条单独的佣金收取规则。佣金应用的一般条件由 MqlCommission 结构的字段设置,具体佣金值和范围在 tiers 数组中定义。

如果没有为该交易品种指定佣金规则,函数返回 0。

如果 name 指定了不存在或不可用交易品种的名称,函数返回 -1。

示例:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 声明动态数组以接收佣金收取规则
   MqlCommission commissions[];
 
//--- 获取当前交易品种的佣金规则。
//--- 如果指定交易品种名称而不是 NULL,函数将返回该交易品种的佣金。
   int total=SymbolInfoCommissions(NULL,commissions);
 
//--- 检查函数执行结果
   if(total<0)
     {
      //--- 如果发生错误,输出错误代码
      PrintFormat("SymbolInfoCommissions failed. Error %d",GetLastError());
      return;
     }
 
//--- 输出接收到的佣金规则数量
   PrintFormat("Commission rules: %d",total);
 
//--- 遍历所有佣金规则
   for(int i=0;i<total;i++)
     {
      //--- 输出佣金规则的主要参数:
      //--- 货币、范围选择模式和收取模式
      PrintFormat("Rule %d: currency=%s, range mode=%d, charge mode=%d",
                  i,
                  commissions[i].currency,
                  commissions[i].mode_range,
                  commissions[i].mode_charge);
 
      //--- 获取当前规则中的佣金层级数量
      int tiers_total=ArraySize(commissions[i].tiers);
 
      //--- 遍历佣金层级
      for(int j=0;j<tiers_total;j++)
        {
         //--- 输出佣金层级参数:
         //--- 计算模式、值、适用范围和货币
         PrintFormat("  Tier %d: mode=%d, value=%G, range=%G - %G, currency=%s",
                     j,
                     commissions[i].tiers[j].mode,
                     commissions[i].tiers[j].value,
                     commissions[i].tiers[j].range_from,
                     commissions[i].tiers[j].range_to,
                     commissions[i].tiers[j].currency);
        }
     }
  }

 

交易品种佣金

本节描述用于表示金融工具佣金收取规则的枚举和结构。

佣金可以指定为金额、点数、百分比、利润百分比,也可以按成交量、周转额、交易价值或利润范围计算。一条佣金规则可以包含多个层级 MqlCommissionTier。

ENUM_SYMBOL_COMMISSION_MODE

ENUM_SYMBOL_COMMISSION_MODE 枚举定义佣金计算方法。

标识符

描述

SYMBOL_COMMISSION_DISABLED

佣金已禁用。

SYMBOL_COMMISSION_MONEY_DEPOSIT

佣金以交易组/账户的存款货币指定。

SYMBOL_COMMISSION_MONEY_SYMBOL_BASE

佣金以金融工具的基础货币指定。

SYMBOL_COMMISSION_MONEY_SYMBOL_PROFIT

佣金以金融工具的利润货币指定。

SYMBOL_COMMISSION_MONEY_SYMBOL_MARGIN

佣金以金融工具的保证金币种指定。

SYMBOL_COMMISSION_PIPS

佣金以点数指定。

SYMBOL_COMMISSION_PERCENT

佣金以百分比指定。

SYMBOL_COMMISSION_MONEY_SPECIFIED

佣金以指定货币表示。货币在佣金结构或佣金层级的相应字段中指定。

SYMBOL_COMMISSION_PERCENT_PROFIT

佣金以利润百分比指定。

ENUM_SYMBOL_COMMISSION_VOLUME_TYPE

ENUM_SYMBOL_COMMISSION_VOLUME_TYPE 枚举定义佣金值如何应用于交易操作。

标识符

描述

SYMBOL_COMMISSION_VOLUME_TYPE_TRADE

佣金按交易收取。

SYMBOL_COMMISSION_VOLUME_TYPE_VOLUME

佣金按交易量比例计算。

SYMBOL_COMMISSION_VOLUME_TYPE_TURNOVER

佣金按周转额计算。

ENUM_SYMBOL_COMMISSION_RANGE_MODE

ENUM_SYMBOL_COMMISSION_RANGE_MODE 枚举定义用于选择佣金范围的指标。

标识符

描述

SYMBOL_COMMISSION_RANGE_VOLUME

范围由交易量确定。

SYMBOL_COMMISSION_RANGE_TURNOVER_MONEY

范围由货币周转额确定。

SYMBOL_COMMISSION_RANGE_TURNOVER_VOLUME

范围由成交量周转确定。

SYMBOL_COMMISSION_RANGE_VALUE

范围由交易价值确定。

SYMBOL_COMMISSION_RANGE_PROFIT

范围由利润确定。

ENUM_SYMBOL_COMMISSION_CHARGE_MODE

ENUM_SYMBOL_COMMISSION_CHARGE_MODE 枚举定义佣金的收取时间。

标识符

描述

SYMBOL_COMMISSION_CHARGE_DAILY

佣金在日终收取。

SYMBOL_COMMISSION_CHARGE_MONTHLY

佣金在月末收取。

SYMBOL_COMMISSION_CHARGE_INSTANT

佣金在交易执行时立即收取。

ENUM_SYMBOL_COMMISSION_ENTRY_MODE

ENUM_SYMBOL_COMMISSION_ENTRY_MODE 枚举定义在交易操作的哪个阶段收取佣金。

标识符

描述

SYMBOL_COMMISSION_ENTRY_INOUT

建仓和平仓时均收取佣金。

SYMBOL_COMMISSION_ENTRY_IN

建仓时收取佣金。

SYMBOL_COMMISSION_ENTRY_OUT

平仓时收取佣金。

ENUM_SYMBOL_COMMISSION_DIRECTION_MODE

ENUM_SYMBOL_COMMISSION_DIRECTION_MODE 枚举定义佣金适用的交易方向。

标识符

描述

SYMBOL_COMMISSION_DIRECTION_BOTH

佣金适用于买入和卖出交易。

SYMBOL_COMMISSION_DIRECTION_BUY

佣金仅适用于买入交易。

SYMBOL_COMMISSION_DIRECTION_SELL

佣金仅适用于卖出交易。

ENUM_SYMBOL_COMMISSION_PROFIT_MODE

ENUM_SYMBOL_COMMISSION_PROFIT_MODE 枚举定义佣金是否根据交易的财务结果应用。

标识符

描述

SYMBOL_COMMISSION_PROFIT_ALL

佣金适用于所有交易。

SYMBOL_COMMISSION_PROFIT_PROFIT

佣金仅适用于盈利交易。

SYMBOL_COMMISSION_PROFIT_LOSS

佣金仅适用于亏损交易。

 

MqlCommissionTier

MqlCommissionTier 结构描述一个佣金层级。

struct MqlCommissionTier
  {
   ENUM_SYMBOL_COMMISSION_MODE           mode;
   ENUM_SYMBOL_COMMISSION_VOLUME_TYPE    volume_type;
   double                                value;
   double                                min_value;
   double                                max_value;
   double                                range_from;
   double                                range_to;
   string                                currency;
  };

字段说明

字段

类型

描述

mode

ENUM_SYMBOL_COMMISSION_MODE

此层级的佣金计算方法。

volume_type

ENUM_SYMBOL_COMMISSION_VOLUME_TYPE

应用佣金值的方法:按交易、按成交量或按周转额。

value

double

佣金值。该值的解释取决于 mode 字段:金额、点数、百分比或利润百分比。

min_value

double

此层级的最小佣金值。

max_value

double

此层级的最大佣金值。

range_from

double

此佣金层级适用范围的下限。

range_to

double

此佣金层级适用范围的上限。

currency

string

佣金币种。用于佣金以显式设置货币指定的模式,例如 SYMBOL_COMMISSION_MONEY_SPECIFIED。

注意

佣金层级范围由 range_fromrange_to 确定。用于选择范围的指标在 MqlCommission 结构的 mode_range 字段中指定。

如果使用 SYMBOL_COMMISSION_DISABLED 禁用佣金,则其他层级参数不会用于佣金收取。

 

MqlCommission

MqlCommission 结构描述金融工具的佣金收取规则。

struct MqlCommission
  {
   string                                   currency;
   ENUM_SYMBOL_COMMISSION_RANGE_MODE        mode_range;
   ENUM_SYMBOL_COMMISSION_CHARGE_MODE       mode_charge;
   ENUM_SYMBOL_COMMISSION_ENTRY_MODE        mode_entry;
   ENUM_SYMBOL_COMMISSION_DIRECTION_MODE    mode_direction;
   ENUM_SYMBOL_COMMISSION_PROFIT_MODE       mode_profit;
   MqlCommissionTier                        tiers[];
  };

字段说明

字段

类型

描述

currency

string

为佣金规则指定的货币。用于需要显式设置货币的模式下计算佣金。

mode_range

ENUM_SYMBOL_COMMISSION_RANGE_MODE

用于选择佣金范围的指标:成交量、货币周转额、成交量周转、交易价值或利润。

mode_charge

ENUM_SYMBOL_COMMISSION_CHARGE_MODE

佣金收取时间:日终、月末或交易执行时立即收取。

mode_entry

ENUM_SYMBOL_COMMISSION_ENTRY_MODE

收取佣金的交易操作阶段:入场、出场或入场和出场。

mode_direction

ENUM_SYMBOL_COMMISSION_DIRECTION_MODE

佣金适用的交易方向:买入、卖出或两个方向。

mode_profit

ENUM_SYMBOL_COMMISSION_PROFIT_MODE

根据交易财务结果应用佣金的条件。

tiers

MqlCommissionTier[]

佣金层级的动态数组。每个数组元素描述一个单独范围以及该范围的佣金计算参数。

注意

MqlCommission 结构设置佣金应用的一般条件,而 tiers 数组包含具有具体值和范围的佣金层级。

计算佣金时,首先检查规则的一般条件:交易方向、入场或出场阶段、财务结果、收取时间和收取原因。然后根据 mode_range 值从 tiers 数组中选择适当的层级。

如果 tiers 数组为空,则没有为该规则指定佣金层级。

 

另请参阅

SymbolsTotal, SymbolSelect, SymbolInfoMarginRate