MQL5時系列データ・価格取得完全ガイド|CopyRates・iClose・SymbolInfoの基本
MQL5でEAやインジケーターを開発する場合、ローソク足、現在価格、過去足、時刻、銘柄情報を正しく取得することが重要です。
エントリー条件、決済条件、インジケーター計算、サイン判定、通知、検証ログ、バックテスト確認などは、どの価格を、どの足で、どの時刻基準で取得しているかによって結果が変わる場合があります。
この記事では、MQL5のCopyRates、CopyTime、CopyOpen、CopyHigh、CopyLow、CopyClose、iTime、iOpen、iHigh、iLow、iClose、SymbolInfoDouble、SymbolInfoInteger、SymbolInfoString、TimeCurrent、TimeTradeServerなどを、実務で確認しやすいように整理します。
このページは、MT5 / MQL5の技術学習記事です。投資判断、売買タイミング、利益保証、勝率保証、推奨ロット、推奨銘柄、推奨エントリー、特定ブローカー誘導を目的とした内容ではありません。
- MQL5で時系列データを正しく取得する理由
- 公式リファレンスとの違い
- 現在足と確定足の違い
- ローソク足データの基本
- CopyRatesの考え方
- CopyTime / CopyOpen / CopyHigh / CopyLow / CopyClose
- iTime / iOpen / iHigh / iLow / iClose
- Copy系とi系の使い分け
- データ不足と取得失敗
- 時刻の扱い|TimeCurrent・TimeTradeServer・TimeLocal
- サーバー時間と日本時間
- SymbolInfoDoubleで確認する値
- SymbolInfoInteger / SymbolInfoString
- digits / point / spread / tick size
- 複数銘柄・複数時間足での注意
- バックテストとリアル環境の差
- ログに出すべき確認情報
- EA利用者向けの確認ポイント
- MQL5開発者向けの確認ポイント
- 検証担当者向けの確認ポイント
- 問い合わせ前に送る情報
- 送ってはいけない情報
- MQL5時系列データ・価格取得チェック表
- 次に読む技術講座
- 次に確認するページ
- よくある質問
- まとめ
MQL5で時系列データを正しく取得する理由
MQL5のEAやインジケーターは、価格データやローソク足データをもとに判定や表示を行います。
そのため、同じような条件に見えても、現在足を見ているのか、確定足を見ているのか、Bidを見ているのか、Askを見ているのか、終値を見ているのかで、結果が変わることがあります。
| 確認対象 | 関係する関数 | 確認すること |
|---|---|---|
| ローソク足全体 | CopyRates | 時刻、始値、高値、安値、終値、出来高、spread |
| 終値 | CopyClose, iClose | 現在足か確定足か |
| 高値・安値 | CopyHigh, CopyLow, iHigh, iLow | 参照するバー位置と期間 |
| 時刻 | CopyTime, iTime, TimeCurrent | サーバー時間と日本時間の違い |
| 現在価格 | SymbolInfoDouble | Bid、Ask、point、spread関連 |
| 銘柄条件 | SymbolInfoInteger, SymbolInfoString | digits、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_volume | tick出来高 | ブローカーや銘柄により意味が異なる場合がある |
| spread | spread情報 | 検証条件や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 | 取引サーバー時刻を確認する | サーバー時刻の明示確認 | 接続状態に注意する |
| TimeLocal | PCローカル時刻 | 端末側時刻の確認 | 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 size | tick単位の価格刻み | 価格正規化、銘柄仕様確認 |
| Tick value | tickあたりの価値 | 損益概算、リスク計算補助 |
| Volume min | 最小ロット | ロット不正確認 |
| Volume step | ロット刻み | ロット丸め、分割決済 |
SymbolInfoDoubleで取得する値は、EAの注文前チェックやログ確認で重要です。
ただし、これらは投資判断のためではなく、EAが対象銘柄の仕様に合った処理をしているか確認するために使います。
SymbolInfoInteger / SymbolInfoString
SymbolInfoIntegerとSymbolInfoStringは、銘柄の整数値、フラグ、文字列情報を取得する時に使います。
| 関数 | 確認する内容 | 使う場面 |
|---|---|---|
| SymbolInfoInteger | digits、trade mode、stops level、spread関連など | 注文前確認、価格桁数、制限確認 |
| SymbolInfoString | 銘柄説明、基軸通貨、損益通貨など | 銘柄情報表示、ログ、通貨判定 |
Double、Integer、Stringのどの関数を使うかは、取得するプロパティの型によって変わります。
関数とプロパティの組み合わせが違うと、取得失敗や意図しない値になる場合があります。
digits / point / spread / tick size
EAやインジケーターの価格計算では、digits、point、spread、tick sizeを混同しないことが重要です。
| 項目 | 意味 | 確認する場面 | 注意点 |
|---|---|---|---|
| digits | 価格表示の小数点以下桁数 | NormalizeDouble、価格表示 | 銘柄によって異なる |
| point | MT5上の最小価格単位 | 距離計算、SL/TP距離、表示 | pipsと同じ意味とは限らない |
| spread | BidとAskの差 | エントリー見送り、注文前確認 | 変動する場合がある |
| tick size | 価格の最小変動単位 | 銘柄仕様、価格正規化 | pointと同じとは限らない場合がある |
| tick value | tickあたりの価値 | 損益概算、リスク確認補助 | 口座通貨や銘柄仕様で変わる場合がある |
価格距離を扱う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 | 取得対象の時間足 | チャート時間足との違い確認 |
| function | CopyRates、iCloseなど | どの取得処理が失敗したか確認 |
| shift | 参照バー位置 | 現在足・確定足の確認 |
| requested | 要求本数 | 必要本数の確認 |
| received | 取得本数 | データ不足の確認 |
| error | GetLastErrorなど | 失敗理由の候補確認 |
エラーコードの整理は、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-006 | MQL5関数辞書 | 時系列関連関数の全体像を確認する |
| LEARN-009 | MQL5ファイル操作・CSVログ出力完全ガイド | 取得データのCSVログ出力を確認する |
| LEARN-021 | MQL5マルチシンボル・マルチタイムフレーム完全ガイド | 複数銘柄・複数時間足の取得へ進む |
| LEARN-017 | MQL5ロット・証拠金・銘柄仕様完全ガイド | 銘柄仕様と価格単位を確認する |
次に確認するページ
技術講座を確認した後、導入・商品確認・開発相談・不具合報告へ進む場合は、以下のページも確認してください。
| ページ | 確認できること |
|---|---|
| 技術講座一覧 | 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ログを合わせて整理してください。

