技術講座

MQL5時系列データ・価格取得完全ガイド|CopyRates・iClose・SymbolInfoの基本

EAファンクラブ

MQL5でEAやインジケーターを開発する場合、ローソク足、現在価格、過去足、時刻、銘柄情報を正しく取得することが重要です。

エントリー条件、決済条件、インジケーター計算、サイン判定、通知、検証ログ、バックテスト確認などは、どの価格を、どの足で、どの時刻基準で取得しているかによって結果が変わる場合があります。

この記事では、MQL5のCopyRates、CopyTime、CopyOpen、CopyHigh、CopyLow、CopyClose、iTime、iOpen、iHigh、iLow、iClose、SymbolInfoDouble、SymbolInfoInteger、SymbolInfoString、TimeCurrent、TimeTradeServerなどを、実務で確認しやすいように整理します。

このページは、MT5 / MQL5の技術学習記事です。投資判断、売買タイミング、利益保証、勝率保証、推奨ロット、推奨銘柄、推奨エントリー、特定ブローカー誘導を目的とした内容ではありません。

MQL5で時系列データを正しく取得する理由

MQL5のEAやインジケーターは、価格データやローソク足データをもとに判定や表示を行います。

そのため、同じような条件に見えても、現在足を見ているのか、確定足を見ているのか、Bidを見ているのか、Askを見ているのか、終値を見ているのかで、結果が変わることがあります。

確認対象関係する関数確認すること
ローソク足全体CopyRates時刻、始値、高値、安値、終値、出来高、spread
終値CopyClose, iClose現在足か確定足か
高値・安値CopyHigh, CopyLow, iHigh, iLow参照するバー位置と期間
時刻CopyTime, iTime, TimeCurrentサーバー時間と日本時間の違い
現在価格SymbolInfoDoubleBid、Ask、point、spread関連
銘柄条件SymbolInfoInteger, SymbolInfoStringdigits、trade mode、銘柄名、通貨情報

時系列データの取得は、EAのsignal、execution、risk、exit、notification、external controlのうち、主にsignalや検証ログの基礎になります。

注文処理そのものとは別に、どのデータをもとに判定しているのかを明確にしておくと、不具合調査や開発相談が進めやすくなります。

公式リファレンスとの違い

MQL5公式リファレンスでは、各関数の正確な引数、戻り値、仕様を確認できます。

このページは公式リファレンスの代替ではありません。実装時には、関数ごとの正確な仕様を公式リファレンスで確認してください。

この記事では、公式仕様の丸写しではなく、実務で迷いやすい次の点を整理します。

  • 現在足と確定足の違い
  • Copy系関数とi系関数の使い分け
  • データ不足や取得失敗時の確認
  • サーバー時間と日本時間の違い
  • digits、point、spread、tick sizeの確認
  • 複数銘柄・複数時間足を扱う時の注意
  • バックテストとリアル環境で見え方が変わる理由

現在足と確定足の違い

価格データを扱う時に最初に確認したいのが、現在足と確定足の違いです。

現在足は、まだ形成中のローソク足です。価格が動くたびに、高値、安値、終値相当の値が変わる可能性があります。

確定足は、すでに形成が終わったローソク足です。通常、1本前の足を参照することで、再現性を確認しやすくなります。

種類一般的な位置特徴確認用途
現在足shift 0形成中で値が変わる可能性があるリアルタイム表示、点灯確認、速報通知
確定足shift 1形成済みで値が安定しやすいEA判定、バックテスト比較、再現性確認
過去足shift 2以降過去の値を比較できる連続条件、履歴判定、集計

現在足を使うこと自体が悪いわけではありません。ただし、現在足の値は変わる可能性があるため、EA化や検証では「なぜその足を読むのか」を仕様として明確にしてください。

ローソク足データの基本

ローソク足データには、時刻、始値、高値、安値、終値、出来高、spreadなどがあります。

MQL5では、これらを個別に取得する方法と、MqlRates構造体としてまとめて取得する方法があります。

データ意味確認ポイント
timeローソク足の開始時刻サーバー時間基準で確認する
open始値足の開始価格
high高値現在足では更新される可能性がある
low安値現在足では更新される可能性がある
close終値現在足では現在値に近い扱いになる場合がある
tick_volumetick出来高ブローカーや銘柄により意味が異なる場合がある
spreadspread情報検証条件やEAログと合わせて見る

EAやインジケーターの判定では、どの価格を使っているかを明確にする必要があります。

「終値で判定」と書かれていても、現在足の終値相当を使うのか、1本前の確定足終値を使うのかで挙動が変わります。

CopyRatesの考え方

CopyRatesは、ローソク足データをまとめて取得するために使われます。

時刻、始値、高値、安値、終値、tick volume、spreadなどをまとめて取得したい場合に便利です。

確認項目内容注意点
symbol取得対象の銘柄サフィックスを含めた正確な銘柄名を使う
timeframe取得対象の時間足チャート時間足と異なる場合がある
start position取得開始位置shift 0かshift 1かを確認する
count取得本数必要本数を取得できたか戻り値で確認する
戻り値取得できた本数0以下の場合は処理を進めない

CopyRatesでは、戻り値を確認することが重要です。

想定した本数を取得できていない状態で配列を参照すると、データ不足や誤判定につながる場合があります。

CopyTime / CopyOpen / CopyHigh / CopyLow / CopyClose

CopyTime、CopyOpen、CopyHigh、CopyLow、CopyCloseは、ローソク足データのうち特定の項目だけをまとめて取得したい場合に使います。

関数取得する内容使う場面確認ポイント
CopyTimeバー時刻新バー判定、時刻比較サーバー時間基準で扱う
CopyOpen始値ローソク足条件、始値比較対象時間足とshiftを確認する
CopyHigh高値高値更新、レンジ確認現在足では変化する可能性がある
CopyLow安値安値更新、レンジ確認現在足では変化する可能性がある
CopyClose終値終値判定、確定足比較shift 0とshift 1の違いを確認する

単一の値だけを確認したい場合でも、複数本の値を比較する場合はCopy系関数が使いやすいことがあります。

たとえば、過去10本の終値を比較する、過去数本の高値・安値を確認する、新バー判定のために時刻配列を取得する場合などです。

iTime / iOpen / iHigh / iLow / iClose

iTime、iOpen、iHigh、iLow、iCloseは、指定した銘柄・時間足・バー位置の値を取得するために使います。

特定の1本の値を確認したい場合、実装上分かりやすい形で使われることがあります。

関数取得する内容使う場面注意点
iTime指定バーの時刻新バー判定、確定足確認shift指定を確認する
iOpen指定バーの始値ローソク足判定現在足か確定足かを確認する
iHigh指定バーの高値高値比較、ブレイク確認現在足では変わる可能性がある
iLow指定バーの安値安値比較、レンジ確認現在足では変わる可能性がある
iClose指定バーの終値終値条件、確定足判定shift 0とshift 1を混同しない

iCloseなどのi系関数を使う場合も、戻り値だけでなく、データが取得できているか、対象銘柄や時間足が正しいかを確認してください。

Copy系とi系の使い分け

Copy系関数とi系関数は、どちらか一方だけを覚えればよいというものではありません。

まとめて複数本のデータを取りたい場合はCopy系、特定のバーの値を読みたい場合はi系が使われることがあります。

比較項目Copy系i系
取得単位複数本をまとめて取得しやすい特定バーの値を取得しやすい
主な用途履歴比較、配列処理、インジ計算、検証シンプルな条件判定、単一点確認
戻り値確認取得本数を確認する値の有効性やデータ状態を確認する
注意点配列サイズ、AS_SERIES、取得本数shift、データ不足、対象銘柄
向いている例過去20本の終値を比較する1本前の終値を確認する

開発相談では、「CopyRatesを使ってください」や「iCloseでお願いします」と関数名だけを指定するよりも、何本分のどの価格を、どのタイミングで使いたいのかを伝える方が正確です。

データ不足と取得失敗

MQL5で時系列データを取得する時は、常にデータが十分にあるとは限りません。

新しく開いたチャート、初回起動直後、バックテスト開始直後、別銘柄参照、長期データ取得、VPS移行後などでは、必要な本数が取得できない場合があります。

症状原因候補最初に確認すること
CopyRatesが必要本数を返さない履歴データ不足、期間不足、銘柄未選択戻り値、銘柄名、時間足、履歴データ
iCloseが期待値にならないshift違い、時間足違い、未確定足参照shift、対象時間足、現在足/確定足
別銘柄の値が取れないMarket Watch未表示、サフィックス違い銘柄名、Market Watch、SymbolSelect
バックテストで値が不足するテスト期間不足、必要バー数不足テスト開始日、必要本数、初期化ログ
初回だけ失敗する履歴読み込み中、handle準備中再試行設計、ログ、BarsCalculated

取得失敗時にそのまま判定を進めると、誤ったサインや注文条件につながる場合があります。

必要なデータがそろっていない場合は、判定を見送り、ログへ理由を出す設計が重要です。

時刻の扱い|TimeCurrent・TimeTradeServer・TimeLocal

MQL5では、時刻の扱いも重要です。

EAの稼働時間、日次制御、通知時刻、ログ時刻、バックテスト期間、外部連携の記録では、どの時刻を基準にしているかを確認する必要があります。

関数主な意味使う場面注意点
TimeCurrent現在のサーバー時刻として扱われることが多いEA稼働時間、ログ、日次処理日本時間とは一致しない場合がある
TimeTradeServer取引サーバー時刻を確認するサーバー時刻の明示確認接続状態に注意する
TimeLocalPCローカル時刻端末側時刻の確認VPSやPC設定に影響される
iTime / CopyTimeローソク足の時刻新バー判定、足時刻確認チャートのサーバー時刻基準で確認する

時刻をログへ出す場合は、サーバー時間なのか、PCローカル時間なのか、日本時間へ変換したものなのかを明確にしておくと、問い合わせ時の混乱を減らせます。

サーバー時間と日本時間

MT5のチャート時刻やローソク足時刻は、日本時間と一致しない場合があります。

EAの時間指定、日次制御、通知時刻、バックテスト期間を確認する時は、日本時間だけでなく、MT5上のサーバー時間を確認する必要があります。

確認項目内容注意点
チャート時刻ローソク足に表示される時刻サーバー時間基準であることが多い
Expertsログ時刻ログ左端の時刻端末表示や環境により見え方が変わる場合がある
EA内部時刻TimeCurrentなどで取得した時刻ログ本文に明示すると確認しやすい
日本時間利用者が普段見る時刻MT5時刻へ変換して確認する必要がある

時間指定のEAやインジケーターでは、「日本時間で何時」ではなく、「MT5サーバー時間で何時」として判定している場合があります。

検証環境と運用環境の違いは、MT5検証・運用環境ガイドも参考にしてください。

SymbolInfoDoubleで確認する値

SymbolInfoDoubleは、銘柄に関する小数値を取得する時に使います。

現在価格、point、tick size、tick value、最小ロット、最大ロット、volume stepなど、EAの計算や注文前確認に関係する値を取得する場面があります。

項目例確認する内容関係する場面
Bid売値側の現在価格SELL決済、現在価格表示、spread確認
Ask買値側の現在価格BUY注文、現在価格表示、spread確認
Point最小価格単位pips/points換算、距離計算
Tick sizetick単位の価格刻み価格正規化、銘柄仕様確認
Tick valuetickあたりの価値損益概算、リスク計算補助
Volume min最小ロットロット不正確認
Volume stepロット刻みロット丸め、分割決済

SymbolInfoDoubleで取得する値は、EAの注文前チェックやログ確認で重要です。

ただし、これらは投資判断のためではなく、EAが対象銘柄の仕様に合った処理をしているか確認するために使います。

SymbolInfoInteger / SymbolInfoString

SymbolInfoIntegerとSymbolInfoStringは、銘柄の整数値、フラグ、文字列情報を取得する時に使います。

関数確認する内容使う場面
SymbolInfoIntegerdigits、trade mode、stops level、spread関連など注文前確認、価格桁数、制限確認
SymbolInfoString銘柄説明、基軸通貨、損益通貨など銘柄情報表示、ログ、通貨判定

Double、Integer、Stringのどの関数を使うかは、取得するプロパティの型によって変わります。

関数とプロパティの組み合わせが違うと、取得失敗や意図しない値になる場合があります。

digits / point / spread / tick size

EAやインジケーターの価格計算では、digits、point、spread、tick sizeを混同しないことが重要です。

項目意味確認する場面注意点
digits価格表示の小数点以下桁数NormalizeDouble、価格表示銘柄によって異なる
pointMT5上の最小価格単位距離計算、SL/TP距離、表示pipsと同じ意味とは限らない
spreadBidとAskの差エントリー見送り、注文前確認変動する場合がある
tick size価格の最小変動単位銘柄仕様、価格正規化pointと同じとは限らない場合がある
tick valuetickあたりの価値損益概算、リスク確認補助口座通貨や銘柄仕様で変わる場合がある

価格距離を扱うEAでは、points指定なのか、価格差なのか、pips感覚なのかを明確にする必要があります。

設定値の単位が曖昧なままでは、銘柄やブローカー環境が変わった時に意図と異なる距離になることがあります。

複数銘柄・複数時間足での注意

MQL5では、現在チャートの銘柄だけでなく、別銘柄や別時間足のデータを参照することがあります。

マルチタイムフレームのインジケーターや、複数銘柄を監視するEAでは、対象銘柄、時間足、データ取得状態を明確にする必要があります。

確認項目内容注意点
対象銘柄どのsymbolを読むかサフィックスを含めて正確に指定する
対象時間足どのtimeframeを読むかチャート時間足とEA内参照時間足が違う場合がある
Market Watch対象銘柄が表示されているか非表示銘柄はデータ取得に失敗する場合がある
履歴データ必要本数があるか初回起動やVPS移行後に不足する場合がある
ログどの銘柄・時間足を読んだか問い合わせ時に確認しやすくする

複数銘柄・複数時間足を扱う場合は、取得対象をログに出しておくと確認しやすくなります。

たとえば、chart_symbol、target_symbol、chart_tf、target_tf、copy_count、copy_resultなどを記録すると、原因切り分けに役立ちます。

バックテストとリアル環境の差

価格取得そのものはMQL5の関数で行いますが、バックテストとリアル環境では、データの見え方や条件が異なる場合があります。

項目バックテストリアル環境
価格データテストに使うヒストリカルデータに依存するリアルタイム配信に依存する
spreadテスター条件に依存する変動する場合がある
現在足テスターの進行に合わせて変化するtickごとに変化する
履歴不足テスト期間や取得済みデータに影響される初回起動や別銘柄参照で不足する場合がある
時刻テスト対象データのサーバー時間接続サーバーの時刻

バックテスト結果は将来の結果を保証するものではありません。

価格取得の確認では、テスト期間、銘柄名、時間足、spread条件、使用したsetファイル、ログを合わせて整理してください。

ログに出すべき確認情報

時系列データや価格取得に関する不具合を確認する時は、ログに何を出すかが重要です。

単に「データ取得失敗」と出すだけでは、銘柄名、時間足、取得本数、shift、関数名が分からず、原因を切り分けにくくなります。

ログ項目内容確認用途
symbol取得対象の銘柄サフィックス違いの確認
timeframe取得対象の時間足チャート時間足との違い確認
functionCopyRates、iCloseなどどの取得処理が失敗したか確認
shift参照バー位置現在足・確定足の確認
requested要求本数必要本数の確認
received取得本数データ不足の確認
errorGetLastErrorなど失敗理由の候補確認

エラーコードの整理は、MQL5エラーコード辞典も参考にしてください。

EA利用者向けの確認ポイント

EA利用者が価格取得やローソク足判定に関する不具合を相談する場合、関数名を理解していなくても、必要な情報を整理できます。

  • 対象EA名・インジケーター名
  • バージョン
  • 銘柄名
  • 時間足
  • 使用したsetファイル
  • バックテストかリアル環境か
  • 発生時刻
  • Expertsログ
  • Journalログ
  • スクリーンショット

特に、チャート左上に表示されている銘柄名と、EAがログに出しているtarget_symbolが一致しているかを確認してください。

MQL5開発者向けの確認ポイント

MQL5開発者は、価格取得処理で取得失敗やデータ不足を前提にした設計を行う必要があります。

設計項目確認ポイント理由
戻り値確認Copy系の取得本数を確認するデータ不足時の誤判定を避けるため
shift固定現在足か確定足かを仕様化するバックテストとリアルの差を減らすため
銘柄名管理サフィックスを含めて扱う別口座や別ブローカーでの不一致を避けるため
時間足管理チャート時間足と参照時間足を分けるマルチタイムフレーム対応のため
ログ設計取得対象、要求本数、取得本数を出す不具合調査をしやすくするため
時刻基準サーバー時間か日本時間か明示する時間指定の誤解を避けるため

関数の役割整理は、MQL5関数辞書も確認してください。

検証担当者向けの確認ポイント

検証担当者は、チャート上の見た目だけでなく、EAやインジケーターがどのデータを読んでいるかを確認する必要があります。

  • 現在足を読んでいるか、確定足を読んでいるか
  • 対象銘柄が正しいか
  • 対象時間足が正しいか
  • 必要本数の履歴データがあるか
  • バックテスト期間が十分か
  • spread条件がログと一致しているか
  • サーバー時間と日本時間を混同していないか
  • CopyBufferやCopyRatesの戻り値が確認されているか
  • 同じsetファイルで再現できるか

検証環境の整理は、MT5検証・運用環境ガイドも参考になります。

問い合わせ前に送る情報

価格取得、時系列データ、ローソク足判定に関する相談では、次の情報を整理してください。

情報必要性注意点
EA名・インジ名対象特定ファイル名と表示名が違う場合がある
バージョン仕様差分確認古い版と混在しないようにする
銘柄名symbol確認サフィックスを含めて記録する
時間足参照データ確認チャート時間足とEA内参照時間足を分ける
setファイル入力条件の再現認証情報やURLが含まれないか確認する
ExpertsログEA・インジ側の状態確認データ取得失敗前後を含める
JournalログMT5端末側の状態確認接続、テスター、履歴取得関連を確認する
スクリーンショットチャート状態確認口座番号や個人情報を隠す

開発依頼前の資料整理は、MT5開発依頼前に用意する資料まとめも参考にしてください。

送ってはいけない情報

ログ、setファイル、スクリーンショットを送る前に、次の情報が含まれていないか確認してください。

  • 口座番号の全桁
  • 投資家パスワード
  • マスターパスワード
  • Webhook URLの実値
  • GAS URLの実値
  • APIキー
  • 認証トークン
  • 個人情報
  • 第三者の個人情報が入ったログ

問い合わせが必要な場合は、必要情報を整理したうえで、不具合報告・サポート依頼を確認してください。

MQL5時系列データ・価格取得チェック表

  • □ 現在足と確定足のどちらを使うか整理した
  • □ shift 0とshift 1の違いを確認した
  • □ CopyRatesの戻り値を確認した
  • □ CopyCloseやiCloseで取得する足を確認した
  • □ 対象銘柄名をサフィックス込みで確認した
  • □ 対象時間足を確認した
  • □ 必要本数の履歴データがあるか確認した
  • □ TimeCurrentなどの時刻基準を確認した
  • □ サーバー時間と日本時間を混同していない
  • □ SymbolInfoDoubleでBid / Ask / pointなどを確認した
  • □ digits / point / spread / tick sizeを混同していない
  • □ バックテストとリアル環境の差を確認した
  • □ データ取得失敗時のログを用意した
  • □ setファイル、Expertsログ、Journalログを保存した
  • □ 口座番号や認証情報をマスクした

次に読む技術講座

この講座とあわせて確認すると、MT5・MQL5開発、検証、不具合調査の流れを整理しやすくなります。

No講座確認できること
LEARN-006MQL5関数辞書時系列関連関数の全体像を確認する
LEARN-009MQL5ファイル操作・CSVログ出力完全ガイド取得データのCSVログ出力を確認する
LEARN-021MQL5マルチシンボル・マルチタイムフレーム完全ガイド複数銘柄・複数時間足の取得へ進む
LEARN-017MQL5ロット・証拠金・銘柄仕様完全ガイド銘柄仕様と価格単位を確認する

次に確認するページ

技術講座を確認した後、導入・商品確認・開発相談・不具合報告へ進む場合は、以下のページも確認してください。

ページ確認できること
技術講座一覧MT5・MQL5・EA開発に関する技術講座を順番に確認できます。
導入ガイドEA、インジケーター、補助ツールを導入する前の確認事項を整理できます。
商品一覧EAファンクラブで扱う補助ツール、インジケーター、コピーEAなどを確認できます。
開発代行ページEA、インジケーター、補助ツールの新規作成・改修相談を確認できます。
不具合報告・サポート依頼ログ、スクリーンショット、再現手順を整理して相談する場合に確認できます。

よくある質問

CopyRatesとiCloseはどちらを使うべきですか?

用途によります。複数本のローソク足データをまとめて扱いたい場合はCopyRates、特定バーの終値だけを確認したい場合はiCloseが使われることがあります。どちらを使うかより、取得する銘柄、時間足、shift、戻り値確認が重要です。

現在足の値を使うと何が問題ですか?

現在足は形成中のため、値が変わる可能性があります。リアルタイム通知や点灯確認には使える場合がありますが、EA化やバックテスト比較では、確定足を使う方が再現性を確認しやすい場合があります。

サーバー時間と日本時間はどこが違いますか?

MT5のチャート時刻やローソク足時刻は、接続している取引サーバーの時刻を基準にしている場合があります。日本時間と一致しないことがあるため、時間指定のEAでは時刻基準を確認してください。

digitsとpointは何に使いますか?

digitsは価格表示の桁数、pointはMT5上の最小価格単位です。価格表示、SL/TP距離、pips/points換算、ログ表示などに関係します。

バックテストとリアルで価格取得は変わりますか?

使用する関数が同じでも、バックテストではヒストリカルデータやテスター条件に依存し、リアル環境ではリアルタイム配信やspread変動に影響されます。条件を分けて確認してください。

データ不足時はどのログを確認しますか?

Expertsログ、Journalログ、Strategy Testerログを確認します。対象銘柄、時間足、要求本数、取得本数、GetLastError、テスト期間、履歴データの有無を整理してください。

複数時間足のデータを使う時の注意はありますか?

チャート時間足と参照時間足を分けて考える必要があります。M15チャート上でH1データを読む場合などは、EAログにchart_tfとtarget_tfを出しておくと確認しやすくなります。

SymbolInfoDoubleで何を確認できますか?

Bid、Ask、point、tick size、tick value、volume min、volume stepなど、銘柄の数値情報を確認する場面があります。注文前確認やログ確認で重要です。

iCloseで取得した値とチャート表示が違うように見えるのはなぜですか?

参照しているshift、時間足、銘柄名、現在足か確定足かが違う可能性があります。チャート上の見た目だけでなく、EAログで取得対象を確認してください。

価格取得の不具合を相談する時は何を送ればよいですか?

EA名、バージョン、銘柄名、時間足、setファイル、Expertsログ、Journalログ、スクリーンショット、発生時刻、バックテスト条件を整理してください。口座番号や認証情報はマスクしてください。

まとめ

MQL5で時系列データや価格を取得する時は、CopyRates、CopyTime、CopyOpen、CopyHigh、CopyLow、CopyClose、iTime、iOpen、iHigh、iLow、iClose、SymbolInfo系、Time系関数の役割を分けて整理することが重要です。

現在足と確定足、shift 0とshift 1、サーバー時間と日本時間、digitsとpoint、BidとAsk、Copy系とi系の違いを混同すると、EAやインジケーターの挙動確認が難しくなります。

データ取得に失敗した場合は、関数名、銘柄名、時間足、要求本数、取得本数、shift、GetLastError、履歴データの有無をログで確認してください。

バックテストとリアル環境では、同じ関数を使っていても、データ条件、spread、時刻、履歴状態が異なる場合があります。検証時は、銘柄名、時間足、期間、setファイル、Expertsログ、Journalログを合わせて整理してください。

MT4/MT5 技術講座へ戻る

ABOUT ME
記事URLをコピーしました