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);
       }
    }
 }

 

銘柄の手数料

このセクションでは、金融商品の手数料課金ルールを表すために使用される列挙型と構造体について説明します。

手数料は、金額、ポイント、パーセント、利益のパーセントとして指定できるほか、数量、売買代金、取引価値、利益の範囲に基づいて計算することもできます。1 つの手数料ルールには複数の階層 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 構造体は 1 つの手数料階層を表します。

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