【移植#40】日本語変数名は今も使える? — MQL5の仕様境界を実機で確かめる¶

この記事の3行まとめ
- 現行MetaEditorでは日本語の変数名・関数名と、原典で化けた7文字が0エラー・0警告で動きました
- ただし、MQL5公式仕様が識別子として明記するのは英字・数字・アンダースコアだけです
- 配布コードはASCII識別子にし、日本語はコメント・文字列・入力欄の表示名へ分けるのが安全です
今回の原典は「日本語の変数名」¶
投稿日順で次に当たる2010年1月29日の記事は、MQL4の変数名や関数名へ日本語を使う実験でした。
元記事「MQL4で日本語変数名を使用する場合の注意事項」を読む
原典では、残高のような日本語変数は読みやすく、スペルミスも減らせると紹介されています。一方、Shift-JISで「タ」を表す2バイトの後半0x5Eが半角の^と同じ値になるため、MetaEditor上で識別子が化ける文字もあるという注意が続きます。具体例は「タ・ゼ・ゾ・ボ・ポ・マ・ミ」です。
最後は「真に受けないで下さいね」と締める、少しユーモラスな記事でした。ただ、文字コードとコンパイラの境界を実物で確かめる視点は、今も大切です。
現行MetaEditorでは7文字とも通った¶
今回の配布インジケーターには、意図的に日本語の関数名、引数名、ローカル変数名を含めました。
さらに、原典で問題になった7文字をそれぞれ変数名にしています。
const double タ = 1.0;
const double ゼ = 2.0;
const double ゾ = 3.0;
const double ボ = 4.0;
const double ポ = 5.0;
const double マ = 6.0;
const double ミ = 7.0;
MetaTrader 5 build 5836のMetaEditorでは配布版が0エラー・0警告でコンパイルされ、専用MT5でも日本語関数の計算結果42、7文字の合計28を確認できました。原典にあったShift-JIS特有の化け方は、今回の環境では再現しませんでした。
ただし、ここで「日本語識別子は正式に保証された」と結論づけるのは早計です。
「コンパイルできる」と「公式仕様」は別¶
MQL5公式リファレンスのIdentifiersは、識別子に書ける文字を次のように定めています。
- 大文字・小文字のラテン文字
A-Z、a-z - 数字
0-9 - アンダースコア
_ - 先頭文字は数字にできない
- 長さは最大63文字
- 予約語と同じ名前は使えない
日本語は、この一覧に含まれていません。現行コンパイラが受け付けても、公式に文書化された移植性の範囲外です。MetaEditorの世代、外部エディタ、静的解析、コード生成、差分表示などをまたいだとき、同じ扱いになる保証はできません。
そこで配布版は、日本語識別子が動く事実を検証しつつ、同じ計算をASCII識別子でも実行して一致を確かめます。動作確認の題材と、実運用の命名方針を分けました。
日本語は表示側へ置ける¶
識別子をASCIIへ寄せても、利用者に見える部分まで英語にする必要はありません。
MQL5の文字列はUnicodeを扱えます。公式Algo BookのString typeでは、文字列がushortの並びとして完全なUnicode範囲を扱うと説明されています。今回もStringLen("残高")が2文字になることを確認しました。
入力パラメーターは、公式リファレンスのInput Variablesにあるinput(name="...")を使うと、日本語の表示名を付けられます。
この分け方なら、コード側はInpSamplePeriodとして検索・連携しやすく、MT5の入力画面では「表示期間の例」と読めます。日本語コメントも同じ考え方で使えます。
8バッファでコンパイル後の実行まで確認する¶
「コンパイル成功」だけでは、関数が本当に呼ばれたかまでは分かりません。配布インジケーターは、次の8項目を計算バッファへ公開します。
- 全体合格フラグ
- 日本語関数による
19 + 23 - 原典の7文字を使った変数の合計
- ASCII関数による
19 + 23 - 日本語文字列
残高の文字数 - 日本語表示名を持つ入力値
- 実行中ターミナルのビルド番号
- パネル用オブジェクト数
検証EAはCopyBuffer()を8本すべて1件ずつ読み、日本語関数とASCII関数がどちらも42、7文字の合計が28、文字列長が2、入力値が14であることを独立に照合しました。
| 検証項目 | 結果 |
|---|---|
| 配布インジケーターのコンパイル | 0エラー・0警告 |
| 検証EAのコンパイル | 0エラー・0警告 |
| MetaTrader 5 | build 5836 |
| 日本語の関数名・引数名・変数名 | 実行成功 |
| 原典の7文字 | 7 / 7文字で実行成功 |
| 日本語関数とASCII関数 | 42で一致 |
Unicode文字列残高 | 2文字 |
| 診断バッファ | 8本一致 |
| パネルオブジェクト | 9個一致 |
| 実画面キャプチャー | 成功 |
| 売買注文 | なし |
| 外部ファイルの作成・更新 | なし |
ダウンロードと使い方¶
40_MQL5_Unicode_Identifier_Preflight_v1_00.mq5 をダウンロード
MT5のIndicatorsへ保存してコンパイルし、任意のチャートへ適用してください。チャート左上のパネルへ、日本語識別子の計算、原典の7文字、Unicode文字列、公式仕様に沿う命名方針を表示します。
コードを開くと、日本語識別子による実験部分と、ASCII識別子による同じ計算を比較できます。実際のEAやインジケーターへ流用するときは、ASCII側の書き方を選んでください。
使えないこと・注意点¶
- この結果は、検証時の現行MetaEditorで日本語識別子が通ったことを示すものです。将来や別環境での互換性は保証しません。
- 日本語識別子はMQL5公式リファレンスが列挙する文字集合の外側です。
- ソースの保存形式や外部ツールによっては、文字化け・正規化・検索漏れが起こる可能性があります。
- 見た目が似た全角・半角文字やUnicode文字を混ぜると、レビュー時に別名を見落としやすくなります。
- 難読化やソース保護の手段として日本語識別子へ頼らないでください。
- 配布版は売買ロジックを持たず、取引成績を評価するものではありません。
ロジック評価の結論¶
原典の「日本語で書けば読みやすい」という発想は、今のMetaEditorでも技術的には動きました。しかも、Shift-JIS時代に問題になった7文字まで正常にコンパイル・実行できています。
一方、公式仕様が識別子として約束しているのはASCIIの一部です。自分の環境で一度通ることと、他人の環境へ安全に渡せることは同じではありません。
読みやすさを残しながら移植性も取りたいなら、変数名・関数名はASCII、日本語は入力欄の表示名・コメント・パネル文字列へ置くのが落としどころです。「コンパイラが許した範囲」ではなく、「仕様が約束した範囲」を配布コードの基準にしておくと、あとで困りにくくなります。
前後の記事¶
前: 【移植#39】Level IIは接続先しだい — MT5で板情報の有無を確かめる