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

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

MQL5のShortToString関数は、16ビットの整数(short型またはushort型)を、対応するUnicode文字の文字列に変換するための関数です。

初心者の方がよく誤解しやすいのが、「数値を文字列にする関数」という点です。数値をそのまま文字(例:123を”123″)にしたい場合はIntegerToStringを使います。対してShortToStringは、「文字コード(Unicode)をその文字そのものに変換する」ために使用します。

実務での活用シーン

実務開発においては、主に以下の場面で重宝します。
* 特殊記号の表示: チャート上に矢印やチェックマークなどの特殊フォントを表示させる際、文字コードを指定して動的にラベルを作成する場合。
* バイナリデータのパース: 外部ファイルや通信データから取得した2バイト(16ビット)単位のデータを文字として復元する場合。
* 動的な文字列生成: 配列に格納された文字コード群をループ処理で結合し、一つのメッセージを構築する場合。

2. 構文と戻り値

ShortToString関数の構造は非常にシンプルです。

string  ShortToString(
   ushort  symbol_code      // 文字コード
   );

パラメーター

  • symbol_code: 変換したい文字のUnicode(UTF-16)コードを指定します。型はushort(符号なし短整数)です。

戻り値

  • 指定した文字コードに対応する1文字の文字列(string型)を返します。

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

以下は、特定のUnicodeを指定して、チャート上に特殊な記号を表示したり、ログに出力したりする実践的なコード例です。

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
    // 例1: Unicodeコードから文字に変換
    // 0x2705 は「チェックマーク(✅)」のUnicode
    ushort code = 0x2705;
    string icon = ShortToString(code);

    Print("変換結果: ", icon); // エキスパートタブに表示される

    // 例2: 複数の文字コードを組み合わせてメッセージを作る
    ushort codes[] = {0x004D, 0x0051, 0x004C, 0x0035}; // "M", "Q", "L", "5"
    string result = "";

    for(int i=0; i<ArraySize(codes); i++)
    {
        result += ShortToString(codes[i]);
    }

    Print("結合結果: ", result); // "MQL5" と表示される

    // 実践:オブジェクト名に特殊文字を含める
    string objName = "StatusLabel";
    if(ObjectCreate(0, objName, OBJ_LABEL, 0, 0, 0))
    {
        ObjectSetString(0, objName, OBJPROP_TEXT, icon + " システム稼働中");
        ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, 50);
        ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, 50);
        ObjectSetInteger(0, objName, OBJPROP_COLOR, clrLime);
    }
}

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

開発中に陥りやすいポイントを整理します。

  1. IntegerToStringとの混同
    ShortToString(65) を実行すると、戻り値は “65” ではなく、文字コード65番に対応する “A” になります。「数字をそのまま文字列にしたい」場合は、必ず IntegerToString()DoubleToString() を使用してください。

  2. CharToStringとの違い
    MQL5には CharToString も存在します。

    • CharToString: 1バイト(ASCII/ANSIコード)用
    • ShortToString: 2バイト(Unicode/UTF-16)用
      現在のMQL5は内部的にUnicodeを標準としているため、日本語や絵文字を扱う可能性がある場合は、ShortToString(または ushort 型)を利用するのが安全です。
  3. 無効な文字コード
    Unicodeの範囲外や、使用しているフォントが対応していない文字コードを渡した場合、文字化け(豆腐のような四角い記号など)が発生します。特にチャート上のオブジェクトに使用する場合は、フォント設定(OBJPROP_FONT)がその文字をサポートしているか確認が必要です。

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

クオンツエンジニアの視点から断言しますが、どれほど完璧なロジックをShortToStringなどの関数を駆使して組み上げたとしても、実行環境が「自宅のPC」であれば、そのEAはプロの世界では通用しません。自動売買において最も恐ろしいのは、プログラムのバグではなく、ネットワークの「遅延(レイテンシ)」です。

自宅のネット回線では、証券会社のサーバーとの往復に数十から数百ミリ秒の遅延が発生します。急変時の相場では、この僅かな差がスリッページを引き起こし、本来得られるはずだった利益を削り取るだけでなく、致命的な損失を招く「環境の罠」となります。極限まで約定スピードを高め、24時間365日安定したトレードを実現するには、証券会社のサーバーに物理的に近いロケーションにある専用のVPS(仮想専用サーバー)の利用が不可欠です。プロのアルゴリズムトレーダーにとって、高速なVPSはツールではなく、勝つための「インフラ」そのものなのです。

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

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

コメント

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