こんにちは。ぼっちbotterよだかです
前回は、Binance Japan の BTC/JPY を対象にした Phase1 観測機を最小構成で立ち上げ、global BTC/USD × USD/JPY を fair value の基準線として置ける状態まで持っていきました。今回はその続きとして、粗かった FX 情報源を見直し、fair value の見え方をもう一段まともにするための修正を入れています。派手な実装ではありませんが、残差の解釈に直結する部分なので、小さくても意味のある一手でした。

-
-
🛠️開発記録#503(2026/4/5)新規リードラグ研究メモ(DAY1)「Binance Japan BTC/JPY向けPhase1観測機を最小構成で立ち上げた話」
続きを見る
前回までの課題: fair value の片側が粗かった
前回までの段階で、Binance Japan の BTC/JPY を対象にした Phase1 観測機そのものは、ひとまず動く状態まで持っていけていました。global BTC/USD × USD/JPY を fair value の基準線として置き、Binance Japan 側の価格との差分を premium / residual として見られるところまでは通っていたので、観測の土台としては最低限の形ができていたと言えます。
ただ、その時点では一つ大きな課題が残っていました。
fair value の片側、つまり USD/JPY の情報源が粗かったことです。
当初使っていた FX ソースは、無料・無認証で通せることを優先して選んだものでした。
その判断自体は Phase1 の初動として間違っていなかったと思います。実際、まずは観測機を小さく通すことが目的だったので、そこで高品質な FX データにこだわりすぎるのは本筋から外れます。ただ、そのぶん日中の為替変動を十分に拾えていない可能性があり、結果として fair value の見え方がかなり不自然になっていました。
具体的には、USD/JPY がほぼ一定値のまま見えてしまう一方で、Binance Japan 側と global BTC/USD 側は細かく動いていました。
そうなると、global BTC/USD × USD/JPY で作った fair value も片肺のような動き方になります。BTC 側だけは細かく動くのに、為替側がほとんど定数に近いままだと、Binance Japan 側との差分として見えている premium の中に、本当に見たい残差だけでなく、FX 情報源の粗さによって生じた見かけ上のズレまで混ざってしまいます。
この状態でも、「fair value だけでは説明しきれないズレが残っていそうだ」という感触自体は得られていました。
ただ、そのズレをそのまま「Binance Japan 固有の残差」や「クリプト市場側の遅延要素」と読んでしまうのは危険でした。なぜなら、その premium の一部は、単に USD/JPY の更新頻度が粗いせいで残差っぽく見えていただけかもしれないからです。
つまり、前回までの観測で分かったのは二つです。
一つは、最小構成の fair value だけで全部が説明できているわけではなさそうだということ。
もう一つは、その判断をこのまま先へ進めるには、FX 側の基準線をもう少しまともにしないと、残差の意味づけが危ういということでした。
この課題は、研究の順番としても無視しにくいものでした。
もしここで FX の粗さを放置したまま次に進んでしまうと、「実は為替の解像度不足だったもの」を、他の仮想通貨市場や lead-lag 構造で説明しにいくことになりかねません。そうなると、観測は前に進んでいるように見えても、研究としてはかなり危うくなります。ですので今回は、新しい市場を足す前に、まず fair value の片側を少しまともにすることを優先することにしました。
要するに、前回までの課題は単純でした。
観測機は通ったが、fair value の基準線はまだ粗い。
そして、その粗さが premium / residual の見え方に影響している可能性が高い。
だから次にやるべきことは、仮想通貨側の説明変数を増やすことではなく、まず FX 情報源を見直して、いま見えている残差の一部が本物なのかどうかをもう少しまともに判断できる状態を作ることでした。
今回やったこと: FX 情報源を Twelve Data に差し替えた

今回やったことはシンプルです。
FX 情報源を見直し、Frankfurter ベースだった USD/JPY 系列を Twelve Data ベースへ差し替えました。
前回の時点で見えていた問題は、USD/JPY の更新が粗く、fair value の片側が明らかに弱かったことです。
そのため今回は、「何が残差なのか」を議論する前に、まずは USD/JPY をもう少し timely に fair value へ反映できる状態を作ることを優先しました。
ただし、ここでも最初から重い構成にはしていません。
今回の目的は FX を高精度に研究することではなく、Phase1 の観測機に必要な最低限の改善を入れることです。ですので、専用の高頻度フィードや有料前提の構成には進まず、まずは Twelve Data の無料枠を使った polling ベースの構成に寄せました。ここで欲しかったのは「最速の為替」ではなく、fair value の解釈を壊さない程度に intraday を反映する為替系列です。
そのうえで、実装面では二つの整理を入れています。
一つ目は、API キーをローカル管理へ切り分けたことです。
Twelve Data は API キー前提なので、これまでのような無認証ソースとは扱いが変わります。今回はキーをコードへ直書きせず、ローカル環境から読む形に寄せました。Phase1 の小さな観測機とはいえ、ここは機密情報として扱うべきだと考えています。
二つ目は、無料枠を踏まえた polling 制御を入れたことです。
無料枠には 1 日あたりの上限があるため、単に更新頻度を上げればよいわけではありません。今回は、その上限を越えないよう polling 間隔を意識した構成にし、少なくとも「動かしていたらいつの間にか無料枠を使い切っていた」という状態は避けるようにしました。研究初期だからこそ、こうした運用コストの上限をあらかじめ意識しておく方がよいと判断しています。
さらに、差し替えたあとに Twelve Data 側の timestamp の扱いが粗いケースにもぶつかりました。
実際には receive 側は更新されているのに、source_event_ts の方が固定値に近く見えてしまい、その結果 freshness が不自然に積み上がる状態が出ていました。このままだと「データが古い」のか「timestamp の持ち方が粗い」のかが分かりません。そこで今回は、source_event_ts が粗すぎる場合には receive_ts へ補正するガードを入れています。ここは小さな修正ですが、観測機としてはかなり重要でした。値が出ているだけでは十分ではなく、その値の時間的な意味づけまでなるべく壊さないことが必要だからです。
また、今回の差し替えでは単に USD/JPY の取得元を変えただけではなく、どの情報源が active なのか、fallback が発動していないか、request count がどうなっているかもダッシュボード上で見えるようにしています。
これは、後から「今見ている premium はどの前提で計算されたものだったのか」を追えるようにするためです。観測機は、一度動けばそれで終わりではありません。何を元に計算しているのかが見えないと、あとで解釈を誤りやすくなります。そのため今回は、価格系列そのものだけでなく、FX 情報源まわりの状態も観測対象に含めるようにしました。
要するに、今回やったことは派手ではありません。
仮想通貨側の新しい情報源を増やしたわけでもなければ、Lead-Lag の新しい判定器を作ったわけでもありません。ただ、前回見えていた「fair value の片側が粗い」という課題に対して、そこを放置せず、Phase1 の基準線を一段まともにしたという意味ではかなり大きい修正だったと思っています。
今回の差し替えで見たかったのは、FX をきれいに取ることそのものではありません。
本当に見たかったのは、FX 情報源を少しまともにしたときに、premium / residual の見え方がどう変わるかです。
そこが今回の本題でした。
見えてきたこと: residual の一部は FX 側の粗さだったかもしれない

今回の差し替えでいちばん大きかったのは、fair value の見え方が前よりかなり自然になったことです。
これは単に「情報源を変えた」という話ではなく、観測している premium / residual の意味が一段はっきりしてきた、という変化でした。
Frankfurter ベースで見ていたときは、USD/JPY がほぼ一定値のまま見える時間が長く、fair value の片側が止まっているような状態になっていました。
その結果、Binance Japan 側とのズレとして見えていた premium の中に、「本当に見たい残差」だけでなく、「為替系列が粗いせいで残っている見かけのズレ」も混ざっていた可能性がありました。前回の段階では、その疑いをかなり強く持っていました。
今回 Twelve Data へ差し替えたことで、USD/JPY が日中で段階的に更新され、その変化が fair value に素直に乗るようになりました。
その結果として、前よりも BJ Mid と Fair Value JPY の関係が読みやすくなり、premium の帯も縮んで見える場面が増えました。ここはかなり重要で、以前観測していた residual の一部は、やはり FX 側の粗さに由来していた可能性が高いと考えてよさそうです。
これは後ろ向きな結果ではありません。
むしろ、今回の修正が意味を持っていたことの証拠です。もし情報源を差し替えても premium / residual の見え方がほとんど変わらなければ、「FX を見直した意味は薄かった」と言えたはずです。ですが、実際には fair value の挙動が前より自然になり、premium の見え方も変わりました。つまり、今回の修正は単なる細部調整ではなく、観測している残差の質そのものに影響していたということになります。
そのうえで、もう一つ大事なのは、timely な FX を入れても premium が完全に消えたわけではないという点です。
ここはかなり面白いところで、以前の residual の一部は FX の粗さで説明できそうですが、全部がそれで終わったわけではありません。fair value の片側を少しまともにしたあとでも、なお Binance Japan 側とのズレが残る場面があります。そうなると、今度は逆に「FX を多少まともにしても残る premium は何なのか」が次の論点になってきます。
ただし、この段階でもまだ過剰には読まない方がよいと思っています。
いま言えるのは、fair value の基準線が改善され、以前の residual の一部は FX 由来だった可能性が高いということまでです。
ここから先をすぐに「では、残りはクリプト市場側の遅延要素だ」と決めてしまうのは早いです。なぜなら、まだ
- global BTC/USD proxy の置き方
- Binance Japan 固有の venue premium
- premium の滞留時間
- スプレッドを跨いで意味を持つサイズなのか
といった論点が残っているからです。
ですので、今回の差し替え後の見え方をいちばん素直にまとめるなら、こうなります。
FX 情報源を改善したことで、fair value は前よりかなり自然になった。以前の residual の一部は FX 側の粗さに由来していた可能性が高い。そのうえで、timely な FX を入れてもなお残る premium があるなら、そこから先が本当に見たい残差候補になる。
今回見えてきたのは、残差の正体そのものではありません。
まずは、残差の中に混ざっていた「明らかに粗い部分」が少し削れたということです。
研究としてはかなり地味ですが、この工程を飛ばさなかったことで、次に見るべきものが少しきれいになったと感じています。
次にやること: 残る premium が取れるサイズかを当たる
次にやることは、仮想通貨側の説明変数をすぐ増やすことではありません。
まずは、いま残っている premium が、そもそも執行レベルで意味を持ちうるのかをざっくり確認したいと思っています。
今回の修正で、以前の residual の一部は FX 側の粗さに由来していた可能性が高いことが見えてきました。
その結果として、残る premium は前より少し細く、前より少し信用できるものになったと言えます。ただ、ここでそのまま「では次は何が効いているのか」を細かく説明しに行くと、あとで「きれいに説明できるが、結局薄すぎて取れない」という流れになる可能性があります。そこは先に避けておきたいです。
ですので次は、まず観測側で
- premium がどの程度の大きさで残るのか
- そのズレがどれくらいの時間続くのか
- Binance Japan 側のスプレッドと比べてどうか
- 広がった premium がその後どう戻るのか
を見ます。
要するに、残る premium は、コストを跨いで取りに行く価値がありそうかを、粗く当たりたいということです。
ここで言う「執行コストを考える」は、まだ厳密な評価ではありません。
スリッページやサイズ依存の約定率まで入れた本格的な execution backtest をやる段階ではないと思っています。今やりたいのはもっと手前の確認で、そもそも見えている残差が薄すぎないかを見たいだけです。もし残る premium が 1〜2bps をふらつくだけなら、構造として面白くても戦場としてはかなり厳しいかもしれません。逆に、数bps以上のズレがある程度残るなら、その時点で次の観測に進む意味が出てきます。
つまり、次の確認は二段階です。
まず、timely な FX を入れたあとでも残る premium の分布と滞留時間を見る。
そのうえで、それが Binance Japan 側のスプレッドや執行コストを跨ぐ余地があるのかをざっくり判定する。
ここで「薄すぎる」と見えれば、そこで一度優先度を落とす判断もできますし、「まだ見に行く価値がある」と思えれば、そのあとでようやく仮想通貨側の要因を掘りにいけばよいはずです。
今回の DAY2 で fair value の基準線は一段まともになりました。
だから次は、「まだ残っているものが何か」をすぐ説明しに行くのではなく、その残りに戦う価値があるのかを先に見る。次回は、そこを確認する回にしたいと考えています。