1. CustomSymbolSetString関数の概要と実務での活用法
MQL5のCustomSymbolSetStringは、ユーザーが独自に作成した「カスタム銘柄(Custom Symbol)」に対して、文字列型のプロパティを設定するための関数です。具体的には、銘柄の説明文、ベース通貨、利益通貨、あるいはその銘柄の参照元となる計算式などをプログラムから動的に書き換える際に使用します。
実务での活用シーン
FXのシステムトレード開発において、標準の通貨ペアだけでなく「合成通貨ペア(例:特定の通貨指数のシミュレーション)」や「独自の相関インデックス」を作成したい場合があります。この際、CustomSymbolCreateで作成した空の銘柄に対し、適切な名称や説明を付与しないと、チャート上での識別が困難になったり、計算ロジックでエラーが発生したりします。
開発者がつまずきやすいポイント
初心者が特につまずきやすいのは、「標準銘柄(証券会社が提供する通常のUSDJPYなど)には使用できない」という点です。この関数はあくまで自分が作成したカスタム銘柄専用です。また、プロパティの種類(ENUM_SYMBOL_INFO_STRING)を間違えると、意図した設定が反映されず、デバッグに時間を取られることがよくあります。
2. 構文と戻り値
CustomSymbolSetString関数の基本的な構文は以下の通りです。
bool CustomSymbolSetString(
string symbol_name, // カスタム銘柄名
ENUM_SYMBOL_INFO_STRING prop_id, // 設定するプロパティのID
string prop_value // 設定する文字列
);
パラメーター
- symbol_name: 操作したいカスタム銘柄の名称です(例: “MyIndex”)。
- prop_id: 設定したい情報の種類を指定します。
SYMBOL_BASIS: 派生元の銘柄名SYMBOL_CURRENCY_BASE: ベース通貨SYMBOL_CURRENCY_PROFIT: 利益通貨SYMBOL_DESCRIPTION: 銘柄の長い説明文
- prop_value: 実際に設定する文字列データです。
戻り値
設定に成功した場合は true、失敗した場合は false を返します。失敗の理由を確認するには GetLastError() 関数を呼び出します。
3. 具体的な使い方・実践サンプルコード
以下のサンプルは、オリジナルのカスタム銘柄「USDJPY_Custom」を作成し、その説明文とベース通貨を設定するスクリプトです。
void OnStart()
{
string customSymbolName = "USDJPY_Custom";
// 1. すでに存在する場合は一旦削除(テスト用)
if(SymbolExist(customSymbolName, true))
{
CustomSymbolDelete(customSymbolName);
}
// 2. カスタム銘柄の作成(既存のUSDJPYをベースにする)
if(!CustomSymbolCreate(customSymbolName, "CustomSymbols\\MyForex", "USDJPY"))
{
Print("カスタム銘柄の作成に失敗しました。エラーコード: ", GetLastError());
return;
}
// 3. CustomSymbolSetStringを使用してプロパティを設定
// 銘柄の説明を設定
if(!CustomSymbolSetString(customSymbolName, SYMBOL_DESCRIPTION, "独自の計算ロジックによるUSDJPY"))
{
Print("説明文の設定に失敗。エラー: ", GetLastError());
}
// ベース通貨をUSDに設定
if(!CustomSymbolSetString(customSymbolName, SYMBOL_CURRENCY_BASE, "USD"))
{
Print("ベース通貨の設定に失敗。エラー: ", GetLastError());
}
// 4. 気配り値表示に追加して確認できるようにする
SymbolSelect(customSymbolName, true);
Print("カスタム銘柄 '", customSymbolName, "' の設定が完了しました。");
}
4. 使用上の注意点とよくあるエラー
① 標準銘柄へのアクセス
前述の通り、CustomSymbolSetString は証券会社が提供する銘柄(例:通常の EURUSD)には機能しません。標準銘柄の情報を取得することはできますが、書き換えることは不可能です。
② プロパティ型の不一致
ENUM_SYMBOL_INFO_STRING ではなく、数値型(ENUM_SYMBOL_INFO_INTEGER や ENUM_SYMBOL_INFO_DOUBLE)で扱うべき項目にこの関数を使うとエラーになります。例えば、桁数(SYMBOL_DIGITS)を設定する場合は CustomSymbolSetInteger を使用してください。
③ 銘柄の選択状態
カスタム銘柄を修正する際、その銘柄がすでにチャートで開かれていたり、バックテストで使用されていたりすると、一部のプロパティ変更が即座に反映されない、あるいはエラーになるケースがあります。設定変更は、銘柄を「使用していない状態」で行うのが安全です。
5. 【重要】自動売買における約定スピードと環境の罠
アルゴリズムトレードにおいて、ロジックの正確性と同じくらい重要なのが「実行環境の物理的距離」です。自宅のPCでMT5を稼働させ、CustomSymbolSetStringなどで緻密な指標計算を行っても、証券会社のサーバーとの通信に数十〜数百ミリ秒のレイテンシ(遅延)があっては、プロのクオンツがひしめく市場では勝ち目がありません。
ネットワークの遅延は「スリッページ」という形で直接的な損失を招きます。例えば、0.1秒の遅延により本来の約定価格からわずか0.1ピップス不利な条件で約定した場合、取引回数が増えるほどその累積損失はEAの期待利得を食いつぶします。この物理的な壁を打破するには、取引サーバーと同じデータセンター内、あるいは極めて近距離に配置された「トレーディング専用VPS」の導入が必須です。極限まで約定スピードを高めることは、もはやオプションではなく、シストレをビジネスとして成立させるための最低条件と言えるでしょう。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント