PythonでForexデータを取得する方法
直接的な回答
PythonでForexデータを取得するには、データソース(例:タイムスタンプ付きのレートを返すAPI、ダウンロード可能な歴史的ファイル、またはプラットフォーム/ブローカーのエクスポート)からデータを読み込み、pandasのようなツールを使用して一貫した時系列形式に変換します。
仕組み(メカニクス)
Forex「データ」は通常、次のいずれかを指します:スポット価格(通常は通貨ペアレートとして引用)、歴史的バー(利用可能な場合はオープン/ハイ/ロー/クローズプラスボリューム)、または特定の方法論に基づく参考為替レート。コードを書く前に、必要なものを決めます:
- インストルメント:通貨ペア識別子(例:USD/EURを「USDあたりのEUR」またはその逆)。シンボルはソースによって異なります。
- 時間基準:タイムスタンプとタイムゾーン。ソースはUTC、ローカルタイムゾーン、または「市場時間」を提供する場合があります。
- サンプリング:ティックレベルデータ、分足、時間足、または日足。
- フィールド約束:値が直接ペアレートまたはその逆数を表すかどうか。
典型的なPythonのフローは次のとおりです:
- データをリクエストします(API呼び出しまたはファイル読み込み)。
- タイムスタンプを解析して
datetimeオブジェクトに変換します。 - 列を正規化します(時間、ビッド/アスクまたはクローズなどの標準名)。
- タイムスタンプでソートおよび重複を削除します。
- 希望する日付範囲と頻度にフィルタリングします。
例えば、ソースがCSVのような行を返す場合、pandas.read_csv(...)プラスpd.to_datetime(...)で分析できるデータフレームを構築できることがよくあります。
例のアプローチと独立したチェック
簡単な検証ルーチンを使用すると、一般的な問題を検出できます:
- 欠損データ:タイムインデックスにギャップがないか確認します(特にイントラデイデータの場合)。
- 重複:重複したタイムスタンプを削除または集約します。
- 単調な時間:データセットがソートされていることを確認します。
- ペア方向:ソースの「レート」が意図したベース/クォート方向に一致するか、既知の約束事と比較して確認します。
- クォートタイプ:「ビッド」または「アスク」をリクエストした場合、正しいフィールドが使用されていることを確認します。
リアルタイムの仮定をしない場合でも、データセットが遅延している場合、部分的に利用可能である場合、または異なるバー生成ルールで生成されている場合があると想定する必要があります。これらをコードだけで修正できるものではなく、データ品質の制約として扱います。
制限と確認すべき点
すべてのForexデータソースが同じ定義を提供しているとは限りません。考慮すべき主要な制限は次のとおりです:
- 異なるクォート約束事(直接レートと逆レート)。
- 異なるタイムスタンプ(タイムゾーンの違いとセッションの境界)。
- 不一致な集約ルール(バーがどのように形成されるか)。
- カバレッジの制限(一部のインストルメントや日付が欠けている場合があります)。
良い独立したアプローチは、1)選択したペア約束事を文書化し、2)使用したタイムゾーンと頻度を記録し、3)上記のチェックを実行することです。