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

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

ChartGetStringは、指定したチャートに設定されている「文字列型(string)」のプロパティ値を取得するための関数です。チャートそのものに関する情報(チャート名、現在実行中のEA名、スクリプト名、チャートに設定されたコメントなど)をプログラム側で把握するために使用します。

実務においては、単体でトレードロジックに組み込むというよりも、「運用環境の監視」や「UI(ユーザーインターフェース)の構築」で威力を発揮します。

実務での主な活用例:
* ダッシュボード作成: チャート上に表示しているコメントを取得し、ログとして保存する。
* 安全装置(二重起動防止): 現在のチャートで動いているEAの名前(CHART_EXPERT_NAME)を取得し、意図しないツールが動いていないかチェックする。
* 複数チャート管理: 複数の通貨ペアを表示している際、それぞれのチャート識別子を文字列として管理する。

初心者の方が最初につまずきやすいのは、「オブジェクト(図形やテキスト)の名前を取得する関数(ObjectGetString)と混同してしまう」点です。ChartGetStringはあくまで「チャートという器」そのものの情報を取るための関数であることを意識しましょう。

2. 構文と戻り値

関数の構文は以下の通りです。

string ChartGetString(
   long                         chart_id,     // チャート識別子
   ENUM_CHART_PROPERTY_STRING   prop_id       // プロパティ識別子
);

パラメーター解説

  1. chart_id: 操作対象のチャートIDを指定します。現在のチャートを対象にする場合は「0」を入力します。
  2. prop_id: 取得したい情報の種類を「ENUM_CHART_PROPERTY_STRING」の中から指定します。
    • CHART_COMMENT: チャートの左上に表示されるコメント文字列。
    • CHART_EXPERT_NAME: そのチャートで動作しているEAの名前。
    • CHART_SCRIPT_NAME: そのチャートで動作しているスクリプトの名前。

戻り値

指定したプロパティの値をstring型で返します。エラーが発生した場合や、指定したプロパティに値が入っていない場合は、空の文字列(””)が返されます。

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

以下のコードは、現在チャートに設定されている「コメント」と「実行中のEA名」を取得して、エキスパートログに出力する実用的なスクリプト例です。

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   // 現在のチャートIDを取得(0でも代用可能)
   long currentChartID = ChartID();

   // 1. チャートに設定されているコメントを取得
   // ※あらかじめ手動または他のEAでChartSetString(0, CHART_COMMENT, "Hello")等で設定されている必要があります
   string chartComment = ChartGetString(currentChartID, CHART_COMMENT);

   // 2. そのチャートで稼働しているEA名を取得
   string expertName = ChartGetString(currentChartID, CHART_EXPERT_NAME);

   // 取得結果をログに出力
   Print("--- チャート情報取得結果 ---");

   if(chartComment != "")
   {
      Print("現在のチャートコメント: ", chartComment);
   }
   else
   {
      Print("チャートコメントは設定されていません。");
   }

   if(expertName != "")
   {
      Print("稼働中のEA名: ", expertName);
   }
   else
   {
      Print("このチャートで稼働中のEAはありません。");
   }

   Print("----------------------------");
}

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

開発時に注意すべきポイントは以下の3点です。

  1. 数値型プロパティとの混同
    チャートの「期間(Timeframe)」や「価格(Price)」を取得したい場合は、ChartGetStringではなくChartGetIntegerChartGetDoubleを使用します。プロパティの型(string, int, double)を間違えると、意図しない動作やコンパイルエラーの原因となります。
  2. エラーハンドリング
    戻り値が空文字列(””)だった場合、「本当に値が空」なのか「エラーで取得できなかった」のかを区別する必要があります。不審な挙動をした場合は、直後に GetLastError() を呼び出してエラーコードを確認する癖をつけましょう。
  3. 非同期性の考慮
    MQL5のチャート操作関数は、内部的にメッセージをキュー(待ち行列)に送る仕組みになっています。そのため、ChartSetStringでコメントを書き換えた直後にChartGetStringで読み取ろうとすると、更新が間に合わず古い値が返ってくるケースが稀にあります。確実性を期す場合は、わずかなスリープを入れるか、更新フラグを設ける工夫が必要です。

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

アルゴリズムトレードの世界において、ソースコードの最適化と同じ、あるいはそれ以上に重要なのが「物理的な実行環境」です。自宅のPCでMT5を起動し、一般的な光回線で自動売買を行うことは、プロのクオンツから見れば極めてハイリスクな行為と言わざるを得ません。

ネットワークの遅延(レイテンシ)は、1ミリ秒の遅れがスリッページを引き起こし、本来得られるはずだった利益を削り取ります。特にボラティリティが高い局面では、自宅環境の不安定なネットワークは致命的な損失に直結します。約定スピードを極限まで高め、24時間365日安定した稼働を実現するためには、ブローカーのサーバーに物理的に近いデータセンター内に設置された「専用のVPS」が必須です。プロの現場では、VPSの導入はコストではなく、勝率を安定させるための「最低限の投資」として常識となっています。

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

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

コメント

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