1. StringToTime関数の概要と実務での活用法
MQL5のStringToTime関数は、指定した「日付や時刻の文字列」をMQL5が計算で扱える「datetime型(1970年1月1日からの経過秒数)」に変換する関数です。
実務においては、主に以下のようなシーンで重宝されます。
- 外部設定(Input)からの時間指定: ユーザーがパラメーター入力欄に「2023.12.01 15:00」と入力した内容を、EA内部で判定に使う。
- 特定のイベント時間の管理: 経済指標の発表時刻や、東京市場のオープン時刻など、特定の時間をハードコーディング(直接記述)せずに文字列から生成する。
- ファイル・API連携: CSVファイルや外部ソースから取得した日時テキストを、バックテストや分析用の時刻データに変換する。
初心者が特につまずきやすいのは、「文字列のフォーマットが少しでも違うと、意図しない数値(0や現在の日付が付加された値)が返ってくる」という点です。これを正しく理解することが、堅牢なEA開発の第一歩となります。
2. 構文と戻り値
StringToTime関数の基本的な仕様は以下の通りです。
構文
datetime StringToTime(
string value // 日時を模した文字列
);
パラメーター
- value:
yyyy.mm.dd [hh:mi:ss]、yyyy/mm/dd [hh:mi:ss]、またはhh:mi:ssといった形式の文字列を指定します。
戻り値
- datetime型: 変換に成功すると、1970年1月1日00:00からの経過秒数が返ります。
- 変換に失敗した場合や、不正な文字列(例: “abc”など)の場合は、
0を返します。
補足: 日付を省略して時刻(例: “15:30″)だけを渡すと、プログラム実行当日の日付が自動的に補完されたdatetime値が生成されます。
3. 具体的な使い方・実践サンプルコード
以下は、ユーザーが入力した「取引停止時間」を判定する実用的なコード例です。文字列を正しくdatetime型に変換し、現在のサーバー時刻と比較するロジックを実装しています。
//--- 入力パラメーター
input string TargetTimeStr = "2023.10.27 21:00"; // 停止させたい日時を入力
void OnTick()
{
// 1. 文字列をdatetime型に変換
datetime targetTime = StringToTime(TargetTimeStr);
// 2. 変換チェック(エラーハンドリング)
if(targetTime == 0)
{
Print("エラー:日時の指定形式が正しくありません。");
return;
}
// 3. 現在のサーバー時刻を取得
datetime currentTime = TimeCurrent();
// 4. 時刻の比較ロジック
if(currentTime >= targetTime)
{
Print("設定時刻に到達しました。トレードを制限します。");
// ここに新規エントリー禁止やポジション決済のロジックを記述
}
else
{
// ログに出力して確認(デバッグ用)
Comment("目標時刻まであと: ", (targetTime - currentTime), " 秒");
}
}
4. 使用上の注意点とよくあるエラー
開発時にハマりやすいポイントを整理しました。
-
区切り文字の厳格さ:
基本はYYYY.MM.DDです。ドット(.)以外にもスラッシュ(/)やハイフン(-)が使える場合もありますが、プラットフォームの仕様変更や環境依存を避けるため、公式が推奨するドット形式に統一するのが最も安全です。 -
「時刻のみ」指定した時の挙動:
StringToTime("10:00")と記述した場合、「コードが実行された日の10:00」として扱われます。日を跨ぐEAの場合、翌日になるとこの値は前日のまま(古いデータのまま)になる可能性があるため、動的に本日の日付を組み合わせるなどの工夫が必要です。 -
秒数の欠落:
秒を省略して2023.10.27 21:00とした場合は、自動的に21:00:00(00秒)として扱われます。 -
存在しない日付:
2023.02.30(2月30日)のような存在しない日付を渡すと、予期せぬ挙動(あるいは0)を返すため、入力値のバリデーション(妥当性確認)は必須です。
5. 【重要】自動売買における約定スピードと環境の罠
アルゴリズムトレードにおいて、StringToTimeで正確なロジックを組むこと以上に重要なのが「実行環境」です。多くの個人開発者が自宅のPCでEAを稼働させがちですが、これには致命的なリスクが潜んでいます。家庭用インターネット回線は、プロバイダー経由の複雑なルートを通るため、数ミリ秒から数百ミリ秒のレイテンシ(遅延)が常時発生します。FX市場の価格は1ミリ秒以下の単位で変動しており、自宅PCからの注文が証券会社のサーバーに届く頃には、すでに不利な価格へ滑っている(スリッページが発生している)ことが多々あります。
このコンマ秒の遅延は、年間を通すと利益を大きく削り、本来なら利益が出るはずのロジックを損失へと変えてしまいます。プロのクオンツ環境に近づけるには、証券会社のサーバーと同じデータセンター内、あるいは至近距離に設置された自動売買専用のVPS(仮想専用サーバー)を利用することが不可欠です。24時間安定した電源と、超低遅延な光回線を備えたVPS環境を構築して初めて、あなたの書いた高度なアルゴリズムはその真価を発揮します。
💡 この記事の内容を実運用で活かすには?
この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント