コンテンツにスキップ

【移植#99】Comment風の文字表示を整える — OBJ_LABELで複数行へ分割

EURUSDチャートの左上にフォントを指定した複数行の文字を表示

この記事の3行まとめ

  • Comment()では変えられない文字のフォント・大きさ・色を、OBJ_LABELで指定します
  • 改行と長い行を分割し、各行を独立したラベルとして並べます
  • 文字幅はフォントや表示環境で変わるため、折り返し位置は実画面で調整します

Comment表示を文字オブジェクトで組み直す

原典は2010年5月26日の「Comment() のフォント・サイズは変えられない...orz」です。Comment()の出力はフォントやサイズを変更できず、OBJ_LABELはそのままでは改行表示に向かないため、改行ごと・さらに60文字ごとに区切って並べるCommentOBJ()の考え方を紹介しています。

原典「Comment() のフォント・サイズは変えられない...orz」を読む

原典にあるサンプルファイルは現在取得できなかったため、以下は公開本文で説明された方式をもとにした再構成です。元コードの逐語移植ではありません。

MQL5で改行と長い行を表示する

サンプルEAは入力文字列を改行で分け、さらに設定した文字数で区切って左上から順にラベルを置きます。英数字の長い行では、上限内に空白があればその位置を優先して単語の途中を避けます。フォント名・サイズ・色・位置・行間・1行の最大長を入力で調整できます。同じチャートに複数追加する場合は、それぞれ異なるインスタンス名を指定してください。

MQL5の文字列はUTF-16です。区切り位置でサロゲートペアが分断されないようにしています。ただし、濁点などの結合文字列を一つの見た目の文字として扱う完全な書記素分割ではありません。空白のない日本語行は設定したUTF-16単位数で区切るため、文字数がそのまま表示幅になるわけではありません。画面には最大行数の上限があり、上限を超える入力は初期化時にエラーとして扱います。

MT5での表示確認

専用MT5のEURUSD H1チャートへ適用し、改行・日本語行・長い行を含むサンプルを表示しました。フォントはSegoe UI、文字サイズは12、最大40 UTF-16単位で分割しています。実際の表示画面を画像に掲載しています。EAはチャートオブジェクトだけを作成し、注文・ポジション操作を行いません。

文字数はピクセル幅ではありません。プロポーショナルフォントでは同じ文字数でも行の幅が変わり、画面解像度やOSのフォント環境によって見え方も異なります。原典が指摘するように、等幅でないフォントや日本語を含む行では、固定文字数で見た目を揃えられる保証はありません。長い行の分割値は実際に使うフォントとチャート幅で調整してください。

使い方と注意点

ダウンロードしたEAをチャートへ適用し、表示したい文、フォント、サイズ、色、余白を入力します。改行は入力文字列の改行として指定します。InpMaxCharsは1行を区切るUTF-16単位数、InpMaxRowsは作成できるラベル数の上限です。英語などの空白区切りの文章は上限内の直近の空白で折り返し、日本語など空白のない文字列は上限位置で分割します。

各ラベルはこのEAインスタンス専用の名前を持ち、EAを外すとその接頭辞に属するオブジェクトを削除します。同一チャートでインスタンス名を重複させると互いのオブジェクト名が衝突するため、重複させないでください。既存のラベル名と同じ名前を使わないことも確認してください。

この仕組みはComment()関数そのものの置き換えではなく、文字をチャートへ描く表示例です。画面サイズに応じた自動折り返し、文字幅測定、スクロールするログ、他のEAとの共存管理は備えていません。

ダウンロード

99_Comment_Object_Output_v1_00.mq5 をダウンロード


前後の記事

前: 【移植#98】値幅に合わせて期間を変える移動平均

次: 【移植#100】複数銘柄のテストをまとめて実行 — MT5のSymbol Optimization

— SPONSORED —