1. CustomSymbolSetSessionQuote関数の概要と実務での活用法
CustomSymbolSetSessionQuoteは、MT5(MetaTrader 5)のカスタム銘柄において、「気配値(クオート)を受信する時間帯」を設定するための関数です。
MT5では、標準の通貨ペアだけでなく、ユーザーが独自の計算式や外部データから「カスタム銘柄」を作成できます。実務開発において、この関数は以下のようなシーンで活用されます。
- 合成通貨ペアの作成: 例えば、特定の通貨インデックスを作成する際、参照元となる市場の取引時間に合わせるために使用します。
- バックテストの精度向上: 特定の時間帯だけデータが配信される環境をシミュレートし、休止時間のノイズを除去します。
- 取引時間外の制御: 週末や深夜など、流動性が極端に低下する時間帯を「配信停止」として定義することで、不要なティック受信を抑制します。
初心者が特につまずきやすい点は、この関数が「取引可能時間(Trade Session)」ではなく「気配値受信時間(Quote Session)」を設定するものであるという点です。気配値が届かなければチャートは動きませんので、戦略の前提条件を定義する非常に重要なステップとなります。
2. 構文と戻り値
関数の構成は以下の通りです。
bool CustomSymbolSetSessionQuote(
string symbol_name, // カスタム銘柄名
ENUM_DAY_OF_WEEK day_of_week, // 曜日
uint session_index, // セッションインデックス(0から開始)
datetime from, // 開始時刻
datetime to // 終了時刻
);
パラメーターの解説
- symbol_name: 設定対象とするカスタム銘柄の名前です。あらかじめ
CustomSymbolCreateで作成しておく必要があります。 - day_of_week:
MONDAYやTUESDAYなど、ENUM_DAY_OF_WEEK列挙型で曜日を指定します。 - session_index: その曜日の「何番目のセッションか」を指定します。通常は
0ですが、昼休みなどでセッションが分かれる場合は1, 2...と増やします。 - from / to: セッションの開始と終了時刻です。日付部分は無視され、「時・分・秒」のみが設定値として利用されます。
戻り値
- 成功した場合は
true、失敗した場合はfalseを返します。失敗の理由はGetLastError()関数で確認できます。
3. 具体的な使い方・実践サンプルコード
以下は、カスタム銘柄「MyCustomFX」に対して、月曜日の午前9時から午後5時まで(日本時間を意識した設定例)のクオートセッションを設定するコード例です。
//+------------------------------------------------------------------+
//| カスタム銘柄のクオートセッションを設定するサンプル |
//+------------------------------------------------------------------+
void SetCustomSymbolSession()
{
string symb = "MyCustomFX";
// 1. まずカスタム銘柄が存在するか確認(存在しなければ作成する処理が別途必要)
if(!SymbolInfoInteger(symb, SYMBOL_CUSTOM))
{
Print("エラー: カスタム銘柄が存在しません。");
return;
}
// 2. セッションの開始時刻と終了時刻を定義
// 日付部分は任意(1970.01.01など)で、時間が重要です
datetime sessionStart = D'1970.01.01 09:00:00';
datetime sessionEnd = D'1970.01.01 17:00:00';
// 3. 月曜日の第0セッションとして設定
if(CustomSymbolSetSessionQuote(symb, MONDAY, 0, sessionStart, sessionEnd))
{
Print(symb + " の月曜日のクオートセッションを設定しました。");
}
else
{
Print("設定失敗。エラーコード: ", GetLastError());
}
// 4. (応用) 24時間フルレンジで設定したい場合
datetime fullStart = D'1970.01.01 00:00:00';
datetime fullEnd = D'1970.01.01 23:59:59';
CustomSymbolSetSessionQuote(symb, TUESDAY, 0, fullStart, fullEnd);
}
4. 使用上の注意点とよくあるエラー
- 日付設定の罠:
datetime型を使用しますが、MT5は「時刻」の部分しか見ていません。しかし、コードの可読性のためにD'1970.01.01 09:00:00'のように記述するのが一般的です。 - 既存セッションの上書き:
同じ曜日・同じインデックスに対して関数を呼び出すと、以前の設定は上書きされます。 - セッションの隙間:
to(終了)が23:59:59で、翌日のfrom(開始)が00:00:00の場合、その境界線でデータが途切れないよう注意が必要です。 - CustomSymbolSetSessionTradeとの併用:
クオート(気配値)セッションを設定しただけでは、売買ができるようにはなりません。実際に取引を行いたい場合は、別途CustomSymbolSetSessionTrade関数で取引可能時間を設定する必要があります。 - エラーコード 5304:
これは「カスタム銘柄が見つからない」場合に発生します。スペルミスや、銘柄作成前にセッション設定を行っていないか確認してください。
5. 【重要】自動売買における約定スピードと環境の罠
アルゴリズムトレードにおいて、プログラムのロジックと同じ、あるいはそれ以上に重要なのが「実行環境」です。どれほど洗練されたMQL5コードを書いても、自宅のPCや一般的な光回線から注文を出している限り、プロの世界では通用しません。
ネットワーク遅延(レイテンシ)は、1ミリ秒(0.001秒)単位で利益を削り取ります。自宅環境ではプロバイダー経由の不安定な経路を通るため、注文が証券会社のサーバーに届くまでに数十〜数百ミリ秒の遅延が発生し、その間に有利な価格は消滅してしまいます。この「スリッページ」による損失は、長期的に見ればEAのパフォーマンスを致命的に破壊します。極限まで約定スピードを高め、安定した24時間稼働を実現するには、証券会社のサーバーに物理的に近いデータセンターに設置された「専用のVPS」を利用することがクオンツエンジニアとしての必須条件です。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント