この記事の内容
この記事を読むと…
- 明示的な時刻を持つCSVと検査窓を用意する。
- 欠損・重複・価格競合を区別して調査する。
- JSTとUTCの表記を同じ瞬間へ対応させる。
記事内で用語を調べる
バックテスト BidとAsk(売値と買値) エキスパートアドバイザー(EA)欠けたローソク足だけでは、データ提供者の障害か休場かは分かりません。先に指定期間と足の作り方を確認します。ローカルCSVチェッカーは固定時刻グリッドの空き、重複、価格競合と無効行を調べ、価格を作りません。戦略の履歴検証前に何を解決すべきかを整理する道具です。
欠損を数える前に何を決める?
銘柄、提供元、Bid・Askかmidpointか、時間足を記録。同じEUR/USDでも別系列で、足の開始時刻同士を比較します。終了時刻でラベルしたexportは開始時刻のexportに対しずれて見える場合があります。
ヘッダーはtimestamp,open,high,low,close。以後は半角コンマ区切りの五列だけです。価格は半角小数点、桁区切りなし。引用符、追加列、セミコロン区切りは先に変換が必要で、未対応形式を推測せず拒否します。元データは別に残します。
2026-10-12T08:00:00Zと2026-10-12T10:00:00+02:00は同じ瞬間です。秒は必須、小数秒は最大3桁。offsetのないserver時刻はzoneを特定できず、そこへ単にZを付けるとUTC変換でなく意味の変更です。OANDAのalignment設定など、提供元の足の規約を確認します。
最初と最後の想定開始時刻を両方指定。08:00〜08:11、1分間隔なら両端を含め12枠です。最初を起点にしたグリッドへ最後も正確に乗る必要があります。等しい経過時間の模型であり、暦の月や夏時間で長さが変わる現地日を固定1440分へ置き換えません。
チェッカーの使い方と再現
CSVを選び、1〜1440分の整数間隔と二つの境界を入力。解析はブラウザー内で行い、内容の送信・永続保存はしません。上限2MiB、100000行、想定100000枠です。長い期間は重複しない期間へ分け、設定を記録してください。
価格は有効15桁・フィールド48文字まで。精度を超える記録を無効として、丸めで競合を隠しません。口座情報や個人情報を含まないOHLCファイルで行い、APIのtokenを入力する機能ではありません。
CSVの時刻グリッドの欠損を調べる
ファイルをブラウザー内で解析し、送信・永続保存しません。形式はtimestamp,open,high,low,closeです。上限2 MiB。時刻にはZまたは明示的なUTCオフセットが必要です。
架空export:12行でも完全ではない
配布CSVは合成教材で、brokerの実気配や口座記録ではありません。M1、2026-10-12の08:00〜08:11UTCを指定。clean版は12個の異なる時刻で空きなし。diagnostic版は12行でも有効なグリッド上の時刻は8個です。
| 検出 | この例の意味 |
|---|---|
| 空き4枠 | 08:03、08:04、08:10、08:11に有効足なし |
| 重複行2 | 08:02と08:06が再登場 |
| 価格競合1グループ | 08:06に有効だがOHLCが異なる二足 |
| 無効行1 | 08:04のhighがopenより低い |
| グリッド外1、時刻逆行1 | 08:07:30はM1外、08:09の後に08:08 |
最長の空きはそれぞれ開始時刻2枠分。同率では最初の08:03〜08:04を返します。これは計測した通信障害の継続時間ではなく、原因はファイル以外の情報と照合します。
架空M1:12枠のうち8枠を使用
横にスクロールすると図全体を確認できます。
新しいJST例:同時刻の別表記を二本の足にしない
日本のJSTはUTC+9、夏時間なし。架空USD/JPYの同じBid系列M1、2026-10-12の17:00〜17:02JSTを三つの開始時刻とします。各足のOHLCは教材としてopen150.00、high150.10、low149.90、close150.05JPY/USDで固定。実相場ではありません。
2026-10-12T17:00:00+09:00と2026-10-12T08:00:00Zは同じ瞬間。同じOHLCのこの二行に17:01と17:02の二行を加えた四行では、期待3、有効時刻3、重複1、空き0、競合0です。四行だから四分間ではありません。
別の誤った版で本来の17:00、17:01、17:02JSTをUTCへ変換せず17:00Z、17:01Z、17:02Zと書くと、正しい08:00〜08:02Zの窓では対象外3、有効時刻0、空き3。表示だけを直したつもりで9時間ずらしています。これを提供者の三分の障害と断定したり、最後の値で埋めたりしません。
実際のserver時刻がJSTとは限りません。提供元のzoneと開始・終了ラベルを確認して正規化し、変換手順を原ファイルと一緒に残します。正しいoffsetなら二つの表記を同じ瞬間として照合できますが、元のzoneが不明な記録に推測で+09:00を与えるものではありません。
提供元zoneを確定してから正規化。Zの追加とUTC変換は別の操作です。
小さな画面では横にスクロールするか、図を拡大できます。数値と要点は下のテキストにも記載しています。
- 17:00+09:00と08:00Z
- 同じ瞬間 – 同じOHLCなら競合でなく重複。
- 二表記+17:01/17:02の四行
- 有効3、重複1、空き0 – 行数だけで枠数を数えない。
- 誤って17:00等へZを付ける
- 対象外3、空き3 – 9時間ずれる。障害を断定しない。
自動修復せず、何を調べる?
網羅性は行数でなく異なる有効時刻を数えます。同じ行の重複は枠を増やさず、同時刻の有効OHLCが二種類なら1枠を占めながら競合も残ります。空き0だけで使用可能とは判定できません。両版を残して原データと照合し、都合のよい価格や新しい版を自動採用しません。
有限の価格で、highがopen・close・low以上、lowが他価格以下でなければ無効です。無効足、範囲外とグリッド外は網羅性を増やしません。全件を数えますが各グループの表示例は20件までで、壊れたファイルによる過剰表示を防ぎます。
週末の空きは実商品のsession暦、session内ならダウンロードログと原資料へ照合。OANDAのcompleteはその足の終了時刻が未来でないという属性で、export全体が完全という証明ではありません。
連続チャートのため最後の価格を埋めると合成足となり、指標やstop執行の結果を変え得ます。並べ替えも同時刻のOHLC競合を解決しません。原exportと、理由・根拠ごとの別の修正記録を残します。
OHLCが全てあれば記録tickでテストした証拠?
いいえ。足は全ての価格順序を表しません。MetaQuotesは1分足があって対応tickがない場合にtick生成を行う仕組みを説明。M1の網羅性だけで実測tickだけの使用とは言えません。testerログ、tick提供期間と選択modeを確認します。
要求期間と実テスト期間も比較。MetaQuotesは準備history不足なら開始日がずれる場合とログの確認を説明します。CopyRatesでは要求数と実返却数を照合。取得や構築がまだ続いている場合があり、返った分だけで要求した全期間があるとはしません。MT4・MT5のテスト設定と検証方法へつなげます。
データ報告の次に行うこと
- 原export、設定と結果を保存。銘柄、価格系列、zoneとsession資料を添え、他の人も同じ検査を再現できるようにする。
- 最長の空きと全競合を原資料・取得ログへ照合。確認できた休場を記録、欠損なら修正版を取得。同じ窓で再解析して前結果も保存。
- 受理した期間で短いvisual戦略検証を行い、疑わしい区間のsignal、spreadと執行順序を確認。Pythonの別engineでもデータとsignalを調べる。結果は将来収益を予測しない。
理解度を確認
練習の目安: 約2分.
答えと解説を見る
期待12−使用8=4枠。重複とグリッド外の行は網羅性を増やしません。
よくある質問
空の1分は提供者のエラー?
空き0でも価格競合がある理由は?
あらゆるexportを変換せず読める?
完全なグリッドならbacktestを採用できる?
出典と検証
- developer.oanda.com
内容の参考資料。記事に記載した範囲と前提を確認してください。
- developer.oanda.com
内容の参考資料。記事に記載した範囲と前提を確認してください。
- www.metatrader5.com
内容の参考資料。記事に記載した範囲と前提を確認してください。
- www.metatrader5.com
内容の参考資料。記事に記載した範囲と前提を確認してください。
- www.mql5.com
内容の参考資料。記事に記載した範囲と前提を確認してください。
計算例には前提条件を明記しています。現在の市場データや提供会社の取引条件の代わりにはなりません。
