テストデータの話 — どこから持ってきて、どう整えているか

解説・基盤 · 1 min

検証に使っているヒストリカルデータの出どころ、保存形式、対象期間、そして『データの品質』をどうチェックしているかをまとめます。

検証は「データがすべて」と言ってもいいくらい、もとになるデータが命です。ここでは、このサイトの検証で使っているデータの中身を紹介します。

どんなデータを使っているか

メインで使っているのは、FXの主要な通貨ペアや金(ゴールド)などの1分足(M1)のOHLCVデータです。OHLCVというのは、各時間の「始値・高値・安値・終値・出来高」のこと。1分足を持っておけば、そこから5分足・1時間足・日足など好きな時間軸に作り直せます。

期間はおおむね2015年から最近まで。長い期間があると、上昇相場・下落相場・荒れた時期(コロナショックなど)をまたいでテストできるので、「特定の相場でしか勝てない戦略」をあぶり出せます。

株価指数(S&P500や日経225など)については、別のデータ源(Yahoo Financeの日足や、Dukascopyの分足)も使っています。指数はFXとは違う動きをするので、分散の材料としてとても役立ちます。

保存形式 — なぜParquetなのか

生のデータはCSV(テキスト)ですが、そのまま読むと毎回とても遅いです。そこで、Parquetという列指向の形式に変換して保存しています。これは表計算でいう「列ごとにギュッと圧縮して保存する」イメージで、読み込みが圧倒的に速く、複数の検証から同時に読んでも安全です。

おかげで、たくさんの検証を並行して走らせても、データの読み込みが足を引っぱりません。

データの品質チェック(これが地味に重要)

実は、過去に痛い目を見たことがあります。ある時期の金のデータに異常があり、それが原因で戦略が「すごく勝てている」ように見えていたんです。調べたら、勝ちの大部分がその壊れたデータ由来でした。

この経験から、**異常なバーを自動で検出して除外する仕組み(データ・クリーニング)**を入れました。たとえば「1日の値幅が異常に大きい」「価格が不自然に飛んでいる」といったバーをはじきます。検証は、原則このクリーンなデータで行います。

出どころについての補足

FXのヒストリカルデータは、ある取引所(ブローカー)の実データを使っています。フォーマットは一般的なテキスト形式ですが、中身はそのブローカーの配信値です。ブローカーが違えばスプレッド(売買の価格差)や値も少し変わるので、「どのデータで検証したか」で結果は多少変わるという点は、いつも頭に置いています。だからこそ、コスト(スプレッドやスリッページ)を厳しめに見積もって検証するようにしています。

元データ(ヒストリカル)はライセンスの都合などから公開リポジトリには含めていません。ここで紹介しているのは「どう扱っているか」という方法の話です。