【MQL5】AccountInfoString関数の使い方と自動売買実装コード

1. AccountInfoString関数の概要と実務での活用法

MQL5のAccountInfoString関数は、現在ログインしているトレード口座の「文字列(String)データ」を取得するための関数です。口座名義人、証券会社名、接続サーバー名、そして預託通貨(口座の基本通貨)といった情報を取得できます。

実務での活用シーン

実務開発において、この関数は単なる情報表示以上の重要な役割を果たします。

  1. ブローカー制限(認証機能)の実装:
    開発したEAを特定の証券会社や特定のデモサーバー以外で動かしたくない場合、ACCOUNT_COMPANYACCOUNT_SERVER をチェックして動作を停止させるバリデーション(認証)コードに使われます。
  2. ログの管理とデバッグ:
    複数の口座で運用している場合、どの口座のどのサーバーでエラーが発生したかをログに正確に記録するために不可欠です。
  3. 通貨ペアの接頭辞・接尾辞の判定補助:
    直接的な機能ではありませんが、口座通貨(ACCOUNT_CURRENCY)を確認することで、証拠金計算や損益換算のロジックが正しいかを検証する際に使用します。

初心者がつまずきやすいポイントとして、証拠金や残高などの「数値データ」を取得しようとしてこの関数を使い、コンパイルエラーや意図しない挙動を招くことがあります。数値はAccountInfoDouble、整数はAccountInfoInteger、文字列はAccountInfoStringと、型によって関数を使い分けるのがMQL5の鉄則です。


2. 構文と戻り値

AccountInfoString関数の構文は非常にシンプルです。

string AccountInfoString(
   ENUM_ACCOUNT_INFO_STRING  property_id      // プロパティ識別子
);

パラメーター

引数には、取得したい情報を指定する「識別子(ID)」を渡します。主な識別子は以下の通りです。

識別子 内容 戻り値の例
ACCOUNT_NAME 口座名義人の氏名 “Taro Tanaka”
ACCOUNT_COMPANY 証券会社(ブローカー)名 “MetaQuotes Software Corp.”
ACCOUNT_SERVER 接続中のサーバー名 “MetaQuotes-Demo”
ACCOUNT_CURRENCY 口座の基本通貨 “JPY”, “USD”

戻り値

指定したプロパティに対応するstring型(文字列)の値が返されます。


3. 具体的な使い方・実践サンプルコード

以下は、EAの初期化時(OnInit)に口座情報を取得し、特定の証券会社以外では動作しないように制限をかける実践的なサンプルコードです。

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   // 口座情報の取得
   string accountName   = AccountInfoString(ACCOUNT_NAME);     // 名義人
   string brokerName    = AccountInfoString(ACCOUNT_COMPANY);  // 証券会社名
   string serverName    = AccountInfoString(ACCOUNT_SERVER);   // サーバー名
   string baseCurrency  = AccountInfoString(ACCOUNT_CURRENCY); // 口座通貨

   // ターミナルの「操作履歴」タブに出力
   Print("--- 口座情報確認 ---");
   Print("名義人: ", accountName);
   Print("証券会社: ", brokerName);
   Print("サーバー: ", serverName);
   Print("口座通貨: ", baseCurrency);

   // 【実践例】特定の証券会社以外では動作させないバリデーション
   // 例として、会社名に "MetaQuotes" が含まれていない場合に警告を出す
   if(StringFind(brokerName, "MetaQuotes") == -1)
   {
      Alert("このEAは指定された証券会社以外では使用できません。");
      return(INIT_FAILED); // EAの初期化を失敗させて停止する
   }

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   // 実際のトレードロジックをここに記述
}

4. 使用上の注意点とよくあるエラー

  1. 型の不一致に注意:
    前述の通り、口座残高(ACCOUNT_BALANCE)やレバレッジ(ACCOUNT_LEVERAGE)を取得しようとして AccountInfoString を使っても、空の文字列が返ってくるか、コンパイルエラーになります。これらは AccountInfoDoubleAccountInfoInteger を使用してください。

  2. 接続状況による影響:
    MT5ターミナルがサーバーに接続されていない状態では、正しい情報が取得できない場合があります。OnInit 内で情報を取得する際は、接続が確立されていることを前提としますが、ネットワークが不安定な環境では注意が必要です。

  3. 文字列比較の罠:
    ACCOUNT_COMPANY などの比較を行う際、大文字・小文字の区別や、半角スペースの有無で一致しないことがあります。厳密な比較を行う場合は StringCompare 関数を使用するか、事前に StringToUpper で大文字に統一してから比較するなどの工夫が推奨されます。


5. 【重要】自動売買における約定スピードと環境の罠

アルゴリズムトレードにおいて、AccountInfoStringで取得するサーバー情報は非常に重要です。なぜなら、あなたが使っているMT5サーバーが世界のどこにあり、あなたのトレード環境からどれだけの物理的な距離(レイテンシ)があるかが、利益に直結するからです。

自宅PCでの自動売買は、ネットワークの不安定さやOSの更新による強制再起動といったリスクに加え、「通信遅延(ラグ)」という致命的な弱点を抱えています。FX市場はミリ秒単位で価格が変動しており、自宅から海外サーバーへ注文を出す数ミリ秒の遅れが、スリッページを引き起こし、本来得られるはずだった利益を削り取ります。プロのクオンツや専業トレーダーにとって、証券会社のサーバーに物理的に近い場所にある「専用のVPS(仮想専用サーバー)」を利用することは、単なる推奨事項ではなく、勝つための「必須装備」です。安定した24時間の稼働環境と、極限まで短縮された約定スピードを手に入れることが、自動売買の成功率を飛躍的に高める鍵となります。

💡 この記事の内容を実運用で活かすには?

この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント

タイトルとURLをコピーしました