1. CustomSymbolCreate関数の概要と実務での活用法
MQL5のCustomSymbolCreateは、MetaTrader 5(MT5)上に「ユーザー独自のカスタム銘柄」を作成するための関数です。標準で提供されている通貨ペアや指数だけでなく、エンジニアが定義した独自の計算式や外部データに基づいた銘柄をプラットフォーム上に構築できます。
実務での主な活用シーン:
* 合成通貨ペアの作成: 例えば「EURGBPとGBPUSDを合成してEURUSDの挙動を分析する」といった、スプレッド取引やアービトラージ戦略の検証。
* 外部データのインポート: 仮想通貨の取引所データや、CSVから読み込んだ独自の経済指標をチャート化し、MT5の強力なバックテスト機能を利用する。
* バックテストの最適化: 特定の期間や特定のティックデータだけを抽出したカスタム銘柄を作り、テスト時間を短縮する。
初心者がつまずきやすいポイント:
多くの開発者が「関数を呼び出せばすぐにチャートが表示される」と誤解しがちですが、この関数はあくまで「箱(器)」を作るだけのものです。箱を作った後に、価格データ(ヒストリーやティック)を流し込み、銘柄の属性(スプレッドやストップレベルなど)を別途設定しなければ、有効な銘柄として機能しません。この「器の作成」と「中身の注入」を分けて考えることが、実務開発における最初のステップです。
2. 構文と戻り値
CustomSymbolCreate関数の構文は非常にシンプルです。
bool CustomSymbolCreate(
string symbol, // 作成するカスタム銘柄の名前
string path="", // 銘柄を表示するディレクトリパス(「Custom\FX」など)
string origin=NULL // プロパティをコピーする元の銘柄名
);
パラメーター解説:
1. symbol: 作成したい銘柄の識別名です(例: “GOLD_SILVER_RATIO”)。
2. path: MT5の「気配値表示」ウィンドウ内のどのグループに配置するかを指定します。空文字の場合は「Custom」直下に配置されます。
3. origin: 既存の銘柄(”EURUSD”など)を指定すると、その銘柄のスワップ計算方式、取引時間、小数点以下の桁数などの設定をそのまま引き継げます。一から設定するのは大変なため、基本的には似た性質の銘柄を指定するのが実務上の定石です。
戻り値:
* 成功した場合は true、失敗した場合は false を返します。失敗の理由は GetLastError() 関数で詳細を確認できます(よくあるエラーは、既に同名の銘柄が存在する場合などです)。
3. 具体的な使い方・実践サンプルコード
以下は、既存の「USDJPY」をベースにして、独自のカスタム銘柄「MY_USDJPY」を作成するスクリプトの例です。
//+------------------------------------------------------------------+
//| カスタム銘柄作成サンプルのスクリプト |
//+------------------------------------------------------------------+
void OnStart()
{
string customSymbolName = "MY_USDJPY_CUSTOM";
string groupPath = "CustomEx\\Majors";
string baseSymbol = "USDJPY";
// 1. 既に存在するか確認し、存在する場合は削除(初期化のため)
ResetLastError();
if (SymbolInfoInteger(customSymbolName, SYMBOL_CUSTOM))
{
Print("既存のカスタム銘柄を削除します...");
CustomSymbolDelete(customSymbolName);
}
// 2. カスタム銘柄の作成
// baseSymbol(USDJPY)のプロパティを継承して作成
if (CustomSymbolCreate(customSymbolName, groupPath, baseSymbol))
{
Print("カスタム銘柄の作成に成功: ", customSymbolName);
// 3. 作成した銘柄を「気配値表示」に追加(これで見えるようになる)
SymbolSelect(customSymbolName, true);
// 4. 追加のカスタマイズ(例:スプレッドを固定10ポイントに設定)
CustomSymbolSetInteger(customSymbolName, SYMBOL_SPREAD_FLOAT, 0);
CustomSymbolSetInteger(customSymbolName, SYMBOL_SPREAD, 10);
Print("設定完了。チャートを開いてデータを確認してください。");
}
else
{
Print("作成失敗。エラーコード: ", GetLastError());
}
}
このコードを実行すると、MT5の気配値表示の中に「CustomEx > Majors > MY_USDJPY_CUSTOM」が出現します。この後、CustomRatesUpdateなどの関数を使って価格データを投入することで、通常のチャートと同じように扱えるようになります。
4. 使用上の注意点とよくあるエラー
- 銘柄名の重複: 既に存在するカスタム銘柄や、ブローカーが提供している銘柄と同じ名前は使えません。必ずユニークな名前を付ける必要があります。
- 作成後の反映:
CustomSymbolCreateを実行しただけでは、チャートを開くことはできません。必ずSymbolSelect(name, true)を呼び出して気配値ウィンドウに表示させる必要があります。 - データのクリーンアップ: デバッグ中に何度も作成・削除を繰り返すと、MT5のデータフォルダ内に不要な設定ファイルが残ることがあります。開発時は
CustomSymbolDeleteを適切に使い、リソースを管理しましょう。 - 計算モデルの不一致:
origin(コピー元)に指定する銘柄の計算方式(証拠金計算やスワップ計算)が、自分の作成したいモデルと一致しているか確認してください。ここがズレていると、バックテストの結果が現実離れしたものになります。
5. 【重要】自動売買における約定スピードと環境の罠
カスタム銘柄を使いこなし、高度なアルゴリズムを組み上げたとしても、最後の実行環境で手を抜くと全てが水の泡となります。日本の家庭用インターネット回線は、動画視聴やWeb閲覧には十分ですが、ミリ秒(1/1000秒)を争うFXの自動売買においては致命的な「遅延(レイテンシ)」を抱えています。自宅PCから海外の取引サーバーへ注文を出す際、パケットは多くの物理的拠点を経由し、そのたびに数十から数百ミリ秒のタイムラグが発生します。この遅延は、スリッページ(注文価格と約定価格の乖離)を引き起こし、理論上の利益を瞬時に削り取ります。
プロのクオンツエンジニアが共通して行う対策は、取引サーバーに物理的に近いデータセンター内に設置された「専用VPS(仮想プライベートサーバー)」の利用です。VPSを利用することで、ネットワーク遅延を1〜2ミリ秒程度まで極限に抑えることが可能になり、急激な価格変動時でも狙った価格での約定確率が劇的に向上します。また、24時間365日安定して稼働し続ける専用サーバーは、OSのアップデートによる予期せぬ再起動や停電といった「自宅PC特有のリスク」を排除します。本気でシストレでの収益化を目指すのであれば、VPSの導入はオプションではなく、必須のインフラ投資であると断言できます。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント