mcpField
F
fxview-parquet-consumer

fxview-parquet-consumer

github.com/terrylicaデータ・データベース161 回インストール今日更新
リポジトリ

fxview-parquet-consumer について

Parquet 形式で保存された FXView MT5 のティックデータを読み取り、クエリするためのスキルです。検証済みのスキーマとファイル配置を示し、データアダプター、DuckDB クエリ、Python または Rust のパイプラインを扱う開発者向けです。

主な機能

  1. 01ティック列の型と意味を説明
  2. 02Parquet のディレクトリと命名規則を記載
  3. 03DuckDB クエリ例を掲載
  4. 04flags ビットマスクと過去の符号化変更を解説
  5. 05分割ファイルと一般的な問題を説明

活用シーン

  1. 01DuckDB で特定日のティックを検索
  2. 02売買価格スプレッドの統計を計算
  3. 03ティックデータを Python または Rust のパイプラインに統合
  4. 04ファイル配置や flags の解釈を調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/terrylica/cc-skills --skill fxview-parquet-consumer

インストール後、Claude Code で/fxview-parquet-consumerを入力して読み込まれたか確認します。

詳細

FXView Tick Parquet コンシューマー

MT5 ティック収集システムが生成した Parquet ファイルから FXView のティックデータを読み取ります。

自己進化型スキル:このスキルは使用を通じて改善されます。指示が誤っている場合、パラメーターにずれが生じた場合、または回避策が必要だった場合は、先延ばしにせず、すぐにこのファイルを修正してください。実際に再現可能な問題がある場合にのみ更新してください。

このスキルを使用する場面

次の場合にこのスキルを使用してください。

  • FXView のティック Parquet ファイルを読み取る、またはクエリする場合
  • FXView のティックデータ用のアダプターやパイプラインを構築する場合
  • ティックデータに対する DuckDB クエリを作成する場合
  • ティックデータを Python または Rust のパイプラインに統合する場合
  • ティックデータのスキーマやファイルレイアウトを確認する場合

正式な情報源

https://github.com/terrylica/mql5/blob/05f7c82/docs/tick_research/SCHEMA_VERIFIED.md

このスキルでは検証済みのスキーマを要約しています。検証の詳細、フラグの分布、行グループの内部構造については、元のドキュメントを参照してください。

スキーマ

6 つの列はすべて NULL 不可です。EURUSD ファイルと XAUUSD ファイルのスキーマは同一です。

列Arrow 型DuckDB 型NULL 許容備考
time_mscInt64BIGINTNOUnix エポックのミリ秒
bidFloat64DOUBLENOBid 価格
askFloat64DOUBLENOAsk 価格
lastFloat64DOUBLENOFXView の FX では常に 0.0 — 無視してください
volumeInt64BIGINTNOFXView の FX では常に 0 — 無視してください
flagsUInt8UTINYINTNOMqlTick フラグのビットマスク(履歴全体で 6 種類。リテラル値との照合はせず、マスクビットを使用してください)

Parquet フッターのメタデータ

各ファイルのフッターに埋め込まれているキーと値のペアです。

キー値の例用途
symbolEURUSDシンボル名のみ(FXVIEW_ プレフィックスなし)
digits5 (EURUSD) / 2 (XAUUSD)価格の小数桁数
brokerFXViewブローカー名
created_at2026-03-24T10:32:35.101090+00:00ファイル作成時刻(RFC3339 UTC)

ファイルレイアウト

ディレクトリパターン: {base_path}/FXVIEW_{SYMBOL}/{YYYY}/{SYMBOL}_{YYYYMMDD}.parquet

例: ~/.cache/opendeviationbar/ticks/FXVIEW_EURUSD/2026/EURUSD_20260323.parquet

重要な非対称性: ディレクトリには FXVIEW_ プレフィックス(ブローカーを含む)が付きますが、ファイル名とメタデータにはシンボル名のみが使われます。混同しないでください。

クラッシュリカバリーファイル: {SYMBOL}_{YYYYMMDD}_1.parquet、_2.parquet など。EA が再起動し、当日分の既存ファイルを検出した際に作成されます。すべてのセグメントはフッターを含む、有効で完全な Parquet ファイルです。

XAUUSD との違い

プロパティEURUSDXAUUSD
digits52
価格スケール~1.15~4400
1 日あたりのティック数~416K~929K
last/volume常に 0常に 0
フラグの分布53% bid+ask、24% bid、23% ask98% bid+ask、bid/ask が各 ~1%

XAUUSD のティック密度は EURUSD の約 2.2 倍です。

DuckDB での使用例

1 日分を読み取る
SELECT * FROM read_parquet('~/.cache/opendeviationbar/ticks/FXVIEW_EURUSD/2026/EURUSD_20260323.parquet');
シンボルの全ファイルを読み取る(glob)
SELECT * FROM read_parquet('~/.cache/opendeviationbar/ticks/FXVIEW_EURUSD/**/*.parquet');
タイムスタンプを人間が読める形式に変換する
SELECT make_timestamp(time_msc * 1000) AS ts, bid, ask, ask - bid AS spread
FROM read_parquet('~/.cache/opendeviationbar/ticks/FXVIEW_EURUSD/2026/EURUSD_20260323.parquet');
スプレッド統計
SELECT avg(ask - bid) AS avg_spread, max(ask - bid) AS max_spread
FROM read_parquet('~/.cache/opendeviationbar/ticks/FXVIEW_EURUSD/2026/EURUSD_20260323.parquet');
フラグの分布
SELECT flags, count(*) AS cnt, round(count(*) * 100.0 / sum(count(*)) OVER (), 2) AS pct
FROM read_parquet('...')
GROUP BY flags
ORDER BY cnt DESC;

アンチパターン

  • FXView の外国為替では last 列や volume 列を使用しないでください(常にゼロです)
  • ファイル名に FXVIEW_ プレフィックスが付くと想定しないでください。付くのはディレクトリ名だけです
  • Rust の本番コードで価格に f64 を使用しないでください(digits メタデータを使った i64 固定小数点を使用してください)
  • time_msc が秒単位だと想定しないでください。ミリ秒単位です
  • マシン固有のパスをハードコードしないでください。パターン {base_path}/FXVIEW_{SYMBOL}/{YYYY}/{SYMBOL}_{YYYYMMDD}.parquet を使用してください

Parquet の内部仕様

  • 圧縮: ZSTD レベル 3
  • time_msc のエンコーディング: DELTA_BINARY_PACKED(単調増加するタイムスタンプに最適。ディクショナリエンコーディングは無効)
  • flags のエンコーディング: ディクショナリエンコーディング(カーディナリティが低く、全履歴で異なる値は 6 種類、通常の日では 3 種類)
  • bid、ask、last、volume: デフォルト(PLAIN + ZSTD)
  • 行グループ: 各約 65,536 行(最後のグループには残りの行が入ります)
  • ファイルサイズ: EURUSD の 1 日あたり約 416K ティックで約 1.35 MB

Flags ビットマスクのリファレンス

ドキュメント化されたビットをマスクし、リテラル値で照合しないでください。 bid の更新には flags & 2 <> 0、ask の更新には flags & 4 <> 0 を使用してください。以下のどちらのエンコーディングでも、また両方の履歴上の切り替わりにおいても、これが正しい方法です。WHERE flags = 130 または flags IN (130, 134) を使うと、2026-04-23 から 2026-08-13 までの期間の bid ティックがすべて ゼロ件 になります。

全データレイクの調査結果(2018-04 から 2026-08、全シンボル、2026-08-29 に測定。issue #155)。全履歴を通じて、この列には 6 種類の値が入ります。

イベントビット 7 形式(標準)ビットなし形式
bid 更新130 (=128|2)2
ask 更新132 (=128|4)、2018-06-15 までのみ4
bid+ask 更新134 (=128|6)6
  • 2018-06-15 までは、毎日の値の種類は正確に [130, 132, 134] です。2018-06-17 以降は [4, 130, 134] となり、132 は再び現れません。
  • ビットなし形式の 2 と 6 は 2021-07-01 に初めて現れ、その後短い期間に繰り返し出現し、2026-04-23 から 2026-08-13 までは継続しています。値の種類が [2, 4, 6] となる日(例:2021-07-02)は、データの欠損やファイルの破損を意味するものではありません。ビットなし形式ですべてのティックが存在しています。
  • ビット 7(128)はドキュメント化されていません。 MQL5 の MqlTick リファレンス には、ティックフラグが 6 種類(TICK_FLAG_BID、TICK_FLAG_ASK、TICK_FLAG_LAST、TICK_FLAG_VOLUME、TICK_FLAG_BUY、TICK_FLAG_SELL)と定義されており、128 に該当するものはありません。このブローカーは大半のティックでビット 7 を設定しますが、その意味は明らかになっていません。「最初のティックを示すマーカー」と呼ばないでください(TICK_FLAG_FIRST は存在しません)。

トラブルシューティング

問題原因解決策
ファイルが見つからないbase path またはシンボルが間違っているFXVIEW_ プレフィックスを含むディレクトリパターンを確認してください
last/volume がすべてゼロFXView の外国為替では正常外国為替ペアではこれらの列を無視してください
タイムスタンプがおかしい秒単位を使用していて、ミリ秒単位ではないtime_msc はミリ秒単位です。マイクロ秒にするには 1000 を掛けてください
スキーマが一致しないブローカーまたはバージョンが異なるSCHEMA_VERIFIED.md のパーマリンクと照合してください
同じ日のファイルが複数あるクラッシュリカバリ用の分割ファイル_N 付きのファイルはすべて有効です。結合してください

実行後の振り返り

このスキルの実行後、終了する前に次の点を確認してください。

  1. コマンドは成功しましたか? — 成功していない場合は、失敗の原因となった手順またはエラーテーブルを修正します。
  2. パラメーターや出力に変更はありましたか? — 基盤となるツールのインターフェースに変更があった場合は、使用例とパラメーターテーブルを更新して一致させます。
  3. 回避策が必要でしたか? — 別のフラグや追加手順など、その場で工夫する必要があった場合は、次回の実行で同じ回避策が不要になるよう、この SKILL.md を更新します。

問題が実際に発生し、再現可能な場合にのみ更新してください。推測で更新しないでください。

コメント