MQL5 の下記の関数を使用すると、現在の口座の情報(証拠金残高や損益合計など)を取得することができます。 関数は、戻り値の型によって使い分けます。
- long AccountInfoInteger(ENUM_ACCOUNT_INFO_INTEGER) … 戻り値が整数(あるいは bool)の口座情報
- double AccountInfoDouble(ENUM_ACCOUNT_INFO_DOUBLE) … 戻り値が浮動小数点数の口座情報
- string AccountInfoDouble(ENUM_ACCOUNT_INFO_STRING) … 戻り値が文字列の口座情報
デポジット通貨を取得する
口座の入出金に使用される通貨(デポジット通貨)は、下記のようにして取得することができます。
// 口座の通貨("JPY" など)
string currency = AccountInfoString(ACCOUNT_CURRENCY);
口座残高、純資産の情報を取得する
口座の証拠金情報は、AccountInfoDouble
を使用して取得することができます。
通貨が日本円 (JPY) の場合は小数点数以下の情報は必要ありませんが、いろいろな通貨を扱えるようにするために戻り値は double
型になっています。
// 証拠金残高(ポジションを取っても変化せず、決済した時点で増減する)
double balance = AccountInfoDouble(ACCOUNT_BALANCE);
// 評価損益(ポジションを閉じると証拠金残高に反映される)
double profit = AccountInfoDouble(ACCOUNT_PROFIT);
// 純資産(証拠金残高+評価損益)
double equity = AccountInfoDouble(ACCOUNT_EQUITY);
Alert(StringFormat("Balance: %.0f, Profit: %.0f, Equity: %.0f",
balance, profit, equity));
純資産は評価損益を加味したものですので、balance + profit = equity
が成り立っているはずです。
必要証拠金や有効証拠金の情報を取得する
現在のポジションのために使用している 必要証拠金 や、さらにどれだけのエントリができるかを表す 有効証拠金 の情報を取得するには、下記のようにします。
// 純資産
double equity = AccountInfoDouble(ACCOUNT_EQUITY);
// 必要証拠金(ポジションや予約注文のために使用している証拠金)
double margin = AccountInfoDouble(ACCOUNT_MARGIN);
// 有効証拠金(使用可能な証拠金の残り金額)
double freeMargin = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
Alert(StringFormat(
"Equity: %.0f, Margin: %.0f, FreeMargin: %.0f",
equity, margin, freeMargin));
有効証拠金は、純資産から必要証拠金を引いた残りの金額なので、上記の結果は equity = margin + freeMargin
となっているはずです。
証拠金維持率を取得する
証拠金維持率 (%) に関する情報を取得するには下記のようにします。 マージンコールがかかる維持率の情報を取得することもできます。
// 証拠金維持率 (%)(純資産/必要証拠金)
double marginLevel = AccountInfoDouble(ACCOUNT_MARGIN_LEVEL);
// マージンコールがかかる証拠金維持率 (Margin call level: %)
double marginSoCall = AccountInfoDouble(ACCOUNT_MARGIN_SO_CALL);
// 強制ロスカットがかかる証拠金維持率 (Stop out level: %)
double marginSoSo = AccountInfoDouble(ACCOUNT_MARGIN_SO_SO);
Alert(StringFormat(
"MarginLevel: %.2f%%, MarginSoCall: %.2f%%, MarginSoSo: %.2f%%",
marginLevel, marginSoCall, marginSoSo));
ちなみに、ちょくちょく出てくる So というのは Stop Out の略です。
証拠金維持率は、現在の必要証拠金 (margin) に対する純資産 (equity) の割合ですから、下記のように計算することもできます。
double equity = AccountInfoDouble(ACCOUNT_EQUITY);
double margin = AccountInfoDouble(ACCOUNT_MARGIN);
double marginLevel = equity * 100 / margin;
Alert(StringFormat("MarginLevel: %.2f%%", marginLevel));
レバレッジ情報を取得する
現在の口座のレバレッジ設定を取得するには下記のようにします。 例えば、レバレッジ 25 倍の口座であれば、25 という値が取得できます。
long leverage = AccountInfoInteger(ACCOUNT_LEVERAGE);
Alert(StringFormat("Leverage: %d", leverage));
すべてのアカウント情報を表示するスクリプト
最後に、簡単にすべてのアカウント情報を表示するスクリプトの実装例を紹介しておきます。 次のスクリプトを実行すると、すべてのアカウント情報をメッセージボックスで表示します。
関連記事
- MetaTrader/MQL: OrderSend で注文を出す (MT4)
- MetaTrader/MQL: GitHub で MetaTrader 用のプログラムを管理する
- MetaTrader/MQL: 基本データ型一覧
- MetaTrader/MQL: EA のマジックナンバーについて理解する
- MetaTrader/MQL5: シンボル名を取得する (Symbol, ChartSymbol, SymbolsTotal, SymbolName)
- MetaTrader/MQL: 表示しているチャートを列挙する (ChartFirst, ChartNext)
- MetaTrader/MQL: CTrade クラスで注文を出す (MT5)