こんにちは、よだかです。
今日は、久しぶりにCEX(中央集権型取引所)を中心としたbot研究を進めました。
ここ最近はDeFiのアービトラージや清算、Solanaの市場構造などを調べることが多かったのですが、CEX・CeFiの研究も改めて進めていきたいと考えています。
今回取り組んだのは、bitFlyerの現物市場とCFD市場の関係についての分析です。
両市場の価格や出来高、注文数量などを比較し、そこから何らかの予測上の優位性を見つけられないか検証しました。
結果から先に言うと、今回の検証では、取引利益につながる明確な優位性は確認できていません。
ただし、内部市場だけで分かることと、まだ説明できないことについて、以前より具体的に整理できました。
また、今日はBinanceで発生した大規模なハッキング事件についても調べています。この調査を通じて、CEXの内部構造とオンチェーン上の資産移動の関係、外部情報をbot開発へどう活用するかについても考えることになりました。
今回は、実際に確認したデータと検証結果、そこから更新した研究方針を整理します。
1.BinanceハッキングからCEXの内部構造を考える
最初に調べたのは、10月29日に発生したBinanceのハッキング事件です。
私自身もBinanceの口座を持っており、事件後には一時的な利用制限や通知を確認していました。そのため、今回の出来事は単なるニュース以上に気になるものでした。
11月3日に公開されたBinanceの初期調査報告書によると、攻撃者は開発者の端末を侵害し、内部システムへのアクセスを広げたうえで、ウォレットの署名サービスを不正に利用したとされています。
攻撃の入口として使われたのは、改ざんされた開発ツールや、採用面接を装って渡されたプログラムです。
外部から取り入れたプログラムを社内の開発環境で実行したことが、侵入につながったわけです。
ただし、今回の事件を単なるヒューマンエラーとして片付けるのは適切ではないと思います。
開発者の端末が侵害されたことと、その端末から本番環境の重要な機能まで操作できることは、別の問題だからです。
実際の攻撃では、社内のAIツールや配備用の認証情報なども悪用されています。
つまり、外部からの侵入だけでなく、侵入後にどこまで権限を拡大できる構造だったのかが重要になります。
また、今回の調査では、CEX内部の取引処理とブロックチェーン上の資産移動についても改めて確認しました。
CEXでは、通常の売買は内部台帳で処理されます。一方、外部ウォレットへの出金や取引所自身の資産移動には、オンチェーン上のトランザクションが必要です。
この違いを考えているうちに、一つ気になることがありました。
オンチェーンの資産移動を継続的に観測すれば、CEXの資産管理や資金移動の振る舞いを、外部からある程度把握できるのではないか。
ここから、オンチェーンデータの利用方法についても調べることにしました。
2.オンチェーンで見えるものと見えないものを区別する
調べてみると、取引所や大口保有者に属するアドレスの情報は、すでに相当な規模で公開・共有されていました。
ArkhamやGlassnodeなどの分析サービスでは、アドレスの帰属先を推定し、取引所への資金流入・流出やウォレット残高の変化などを分析しています。
コミュニティが公開しているアドレスラベルのデータも存在します。
こうした情報を利用すれば、主要CEXの既知ウォレットを監視し、普段とは異なる大規模な資金移動などを検知することは可能です。
ただし、ここには限界もあります。
例えば、Binanceに大量のBTCが送金されたとしても、それだけで売却が発生すると判断することはできません。
単なるウォレット間の資金移動かもしれませんし、マーケットメイクや担保管理のための移動かもしれません。
さらに、そもそもアドレスの帰属先が間違っている可能性もあります。
つまり、オンチェーンで資産が動いたという事実と、その資産移動が市場で何を意味するのかという解釈は別です。
この点は、取引所の外部情報をbotへ取り込む際に重要な問題になります。
私自身は、オンチェーンの大口送金をそのまま売買シグナルとして利用することには、あまり積極的ではありません。
資金移動を観測できても、それがどの取引所の、どの市場に、どの程度の強さで影響するのかを直ちに説明できるわけではないからです。
むしろ、オンチェーンデータは、市場の状態やその変化を理解するための補助情報として扱う方が自然ではないかと考えています。
ただし、この使い方についても、実際に有用性が確認できているわけではありません。
どの情報が、どの市場の、何を説明するのか。
そこを個別に確かめる必要があります。
3.bitFlyer現物・CFDの数量関係を測り直す
ここからは、今日のCEX bot研究についてです。
今回の主な対象は、bitFlyerの現物市場とCFD市場です。
まず、両市場の価格がどの程度連動しているのかを確認し、そのうえで約定数量、出来高、注文板の数量などを比較しました。
利用したのは、約1か月分の公式約定履歴と、一部期間の板データです。
分析の結果、価格については両市場が強く連動している一方、数量に関してはかなり異なる特徴がありました。
例えば、約定履歴の比較では、CFDの総出来高は現物の約4.4倍でした。
しかし、この倍率が常に維持されているわけではありません。
出来高の相関は1分単位で約0.44、5分単位では約0.61でした。
価格の連動性に比べると、出来高の関係はかなり不安定です。
また、1分間の出来高がゼロになる割合にも大きな違いがありました。
| 比較項目 | 現物 | CFD |
|---|---|---|
| 1分間の出来高ゼロの割合 | 24.6% | 3.1% |
| 1分間の平均出来高 | 0.1346 BTC | 0.5920 BTC |
| 1分間の出来高中央値 | 0.0135 BTC | 0.2905 BTC |
| 上位1%の時間窓が占める出来高 | 23.5% | 11.3% |
現物では、一部の非常に大きな出来高が平均値を引き上げています。
一方、CFDでは現物よりも継続的に約定が発生しており、数量分布の形も異なっていました。
したがって、全期間の平均倍率だけを使って、各時点の通常の出来高を判断するのは適切ではありません。
そこで今回は、過去の類似した出来高条件を参照し、それぞれの市場で通常どの程度の数量が発生するのかを推定する方法も試しました。
その基準から大きく外れた状態が、実際にどの程度発生しているのかも確認しています。
また、注文板についても比較しました。
ただし、こちらは約定履歴とは異なり、比較できるデータが1日分に限られます。
確認できた範囲では、最良気配の数量と、その周辺の価格帯まで含めた累積数量では、両市場の大小関係が異なる場合がありました。
これは板の厚さを比較するとき、最良気配だけを見ればよいわけではないことを示しています。
ただし、この1日の結果を全期間へ一般化することはできません。

4.内部市場の徹底検証でも売買優位性は確認できない
数量関係の違いが分かってきたところで、次に調べたのは、それらが将来の価格変化に関係しているかという問題です。
ここでは、集計する時間幅や、その後の価格を評価する時間幅を複数用意して比較しました。
最終的には、約31.8日分の公式約定履歴を利用し、15種類の集計窓と7種類の予測先について、必要な条件を満たした561比較を検証しています。
結果は、あまり芳しいものではありませんでした。
少なくとも今回の分析では、安定して価格の上昇・下降を選べる条件は確認できませんでした。
一方、将来の価格変化が通常より小さくなる可能性を示す条件は、2つ残っています。
ただし、ここでいう価格変化とは、ある時点と一定時間後の価格差です。
その間にどれだけ価格が上下したのか、実際にどの価格で売買できるのか、取引費用を差し引いて利益になるのかは別の問題です。
また、今回の候補は多数の条件を比較した後に抽出されたものです。
検証に用いた全期間はすでに探索対象となっており、新しい未使用データによる再現性は確認できていません。
特に短い時間幅では、約定が存在しない時間の影響も無視できません。
約定価格の観測間隔が広い場合、その間の価格変化を正確に再現することは難しくなります。
さらに、過去のイベントに対応する十分な板履歴もないため、実際の売買可能価格や執行費用を評価できていません。
したがって、今回の結果は次のように整理しています。
| 検証対象 | 現時点の判断 |
|---|---|
| 現物・CFDの数量関係 | 分布と時間的な違いを確認 |
| 数量関係からの逸脱 | 複数の状態を観測 |
| 将来の価格方向 | 安定した予測条件は未確認 |
| 将来の変動幅 | 追加検証に値する候補が残存 |
| 実際の売買収益 | 未確認 |
つまり、今回の検証で採用できるエントリ条件はまだありません。
しかし、これは内部市場の情報に有用性が存在しないと証明したわけではありません。
今回のデータと検証方法では、利益につながる優位性を確認できなかったという結論です。
簡単にエッジが見つかるとは、もともと思っていません。
まずは、この結果をそのまま受け止めたいと思います。
5.外部市場の情報は内部市場の説明不足を補う
今回の研究を進めながら、外部市場の情報をどのように活用するべきかについても考えました。
私の基本的な方針は、内部市場のデータで説明・検証できる部分については、まず内部データを使うというものです。
そのうえで、内部市場の情報だけでは説明しきれない現象が残った場合、外部市場のデータを補助的に使えないか検討します。
例えば、bitFlyerの現物とCFDの数量関係が、通常とは異なる状態になっていたとします。
その原因として、bitFlyer固有の取引参加者の行動が関係している可能性もあれば、他の主要BTC市場の変化が影響している可能性もあります。
あるいは、特別な外部要因など存在せず、通常の分布のばらつきかもしれません。
内部市場だけを観測していては、こうした説明を十分に区別できない場合があります。
そこで外部市場のデータを利用します。
ただし、外部データであれば何でもよいわけではありません。
他CEXの価格や出来高、デリバティブの建玉、オンチェーンの資金移動などは、それぞれbitFlyerとの接続関係が異なります。
特にオンチェーンの資金移動については、対象市場への影響が複数の段階を経て現れる可能性があります。
したがって、外部データを追加する際には、その情報が何を観測していて、どのような経路で対象市場に関係すると考えられるのかを確認したいところです。
ここ最近のSolana研究でも、単に価格差や取引量を調べるだけでなく、実際の参加者がどのような制約を引き受け、何に対して経済的な対価を得ているのかを追ってきました。
この点については、開発記録#601「Solanaのボトルネックを追う――実取引と流動性の経済構造調査」でも整理しています。
今回のCEX研究でも、基本的な姿勢は変わりません。
市場の構造や参加者の行動を具体的に把握し、観測された現象を説明できるか調べる。
そのうえで、説明できた内容がbotの予測やリスク判断に役立つかを検証する、という順序です。
ただし、説明力が高いことと、売買利益につながることは同義ではありません。
外部市場の情報が内部市場の状態をよく説明できたとしても、すでに価格に反映されていたり、情報の到着が遅かったりすれば、実際の取引には利用しにくい場合があります。
私が外部データに期待しているのは、単純に売買シグナルを増やすことではなく、内部情報だけでは識別できなかった市場状態や、その遷移を捉えられるようになることです。
それが既存の予測や取引判断をどれだけ改善できるかは、今後の検証課題になります。

6.データ収集を目的化せず、限定的な監視Runへ進む
ここまで分析して、次に問題になったのはデータの収集方法です。
これからWebSocketなどを利用して、市場データを継続取得することも考えています。
しかし、最初から大量のrawデータを保存する必要があるのかという疑問がありました。
もちろん、詳細なデータが必要になる研究もあります。
ただ、何を検証したいのか決まっていない段階で保存対象を増やしてしまうと、データの取得や管理自体が目的になりかねません。
そこで今回は、現在残っている仮説を固定し、実際の市場で条件が成立した場合に、その前後の価格反応を詳しく記録する方法を採用しました。
具体的には、仮想的なエントリ条件を設定し、その条件が成立したときだけ、必要な板や価格の推移を重点的に保存する仕組みです。
実際の注文は出しません。
また、条件が成立しなかった時間帯についても、発生頻度の分母や観測品質など、比較に必要な集計情報は残します。
この方式なら、通常時の大量のrawデータを保存せずに、関心のある現象の発生頻度や、その後の市場反応を観測できます。
今日は、この目的で6時間の仮想エントリ監視Runを開始しました。
記事執筆時点では監視を継続しており、結果はまだ評価していません。
今回のRunで確認したいのは、主に次の点です。
- 仮説の成立頻度はどの程度か。
- 過去データで観測された傾向は新しい期間でも現れるか。
- 条件成立後の価格変化はどのような分布になるか。
- 途中の最大変動や到達時間に特徴はあるか。
- 観測した価格変化は、実際の板の状態と整合しているか。
ただし、6時間の観測で統計的な再現性を判断できるとは考えていません。
まずは、検証したい現象を適切に検出し、必要な情報を記録できるか確認する段階です。
以前の開発記録#600「DEX Arbの『判定不能』を分解する――短時間Runで見えた観測と実行の制約」でも、監視の稼働と有効な市場観測は別の問題であることを整理しました。
今回も同じです。
長く動かしたからといって、必ずしも研究が進むわけではありません。
次のRunで何を判断できるようになるのかを決め、その判断に必要なデータだけを集める。
今後も、この進め方を基本にしたいと思います。

7.外部情報を活用しながら開発の信頼境界を守る
もう一つ、今日の調査を通じて考えたのが開発環境のセキュリティです。
Binanceの事件では、外部から取り入れた開発用プログラムが攻撃の入口になっていました。
私自身もCODEXなどのAIを利用して開発を進めています。
そのため、外部で公開されているリポジトリやライブラリをどのように扱うべきか、改めて考える必要があると感じました。
今回調べたアドレス帰属データについても、GitHubなどには既存の実装や公開データが存在します。
こうした情報は研究に役立ちますが、外部で公開されたプログラムを、そのまま実行する必要はありません。
基本的には、外部の設計資料や実装を参考にしながら、必要な処理を自前で構築・検証する方針で進めたいと考えています。
また、外部コードを実行しなければ完全に安全というわけでもありません。
AIエージェントの場合、外部資料に含まれる指示を誤って実行するプロンプトインジェクションという問題もあります。
したがって、外部情報を参照することと、外部情報に書かれた指示へ従うことは分離する必要があります。
特に、実際の資産を扱うbotでは、研究・開発環境と取引を執行する環境の権限を分けることが重要です。
この点は、先日の開発記録#603「DEX Arbの執行環境を整える――管理UIと権限分離の実装」で扱った、管理機能と資産操作権限の分離にもつながる話です。
もちろん、自前実装であれば必ず安全になるわけではありません。
ただ、外部情報を何の根拠で信用し、どの処理を実行し、どのような権限を与えるのかを自分で把握できる構造にはしておきたいです。
これはセキュリティだけでなく、研究の再現性や検証可能性にも関係する問題だと思います。
8.CEX・CeFi研究は観測の再構築から進める
最後に、今日の研究の現在地を整理します。
今回のbitFlyer現物・CFDの分析では、価格の連動性、出来高の関係、数量分布の違い、通常の関係からの逸脱などを確認しました。
そのうえで複数の予測条件を検証しましたが、安定した方向予測や、費用控除後の利益につながる優位性は確認できていません。
一方、追加検証に値する可能性のある条件は残っています。
ただし、今回の探索結果だけでは採用できません。
まずは新しい市場データを使った限定的な監視Runを進め、実際の市場でどのような反応が発生するのかを確認します。
その結果を踏まえて、必要な観測を追加するか、仮説の優先度を下げるか判断する予定です。
また、外部市場の情報についても、現段階で広範囲に収集するつもりはありません。
内部市場の情報だけでは説明できない問題を具体化し、それを補う可能性のある情報を、必要に応じて追加する方針です。
もともとCEXの短期取引では、同じ板や約定情報を利用して他の参加者より早く反応しようとすると、通信速度や注文処理などのインフラ競争になりやすいと感じています。
もちろん、内部市場の情報だけで優位性を得られないと決まったわけではありません。
また、外部情報を利用すれば速度競争を回避できるとも限りません。
ただ、複数市場の関係や状態変化を理解することで、単純な反応速度以外のところに優位性を見つける余地はあるのではないかと考えています。
その可能性も、今後実際のデータで検証していく必要があります。
今日の研究は、CEX・CeFi研究を再開するためのリハビリのような位置づけです。
目立ったエッジを発見したわけではありませんが、内部市場で何が分かり、何が分からないのかを少し具体化できました。
そして、次に何を観測するかについても、一つの形にできました。
内部市場の観測を土台にし、説明できない部分へ必要な外部情報を加える。
外部データを増やすこと自体を目的にするのではなく、どの情報がどの判断を改善するのかを確かめていきたいと思います。
今回の結果は、まだ収益にはつながっていません。
それでも、確認できていない優位性をあるものとして扱わず、現在の仮説を実際の市場で検証する段階へ移れたことは、今後の研究に必要な区切りだと思います。
引き続き、ぼちぼち進めていきます。
それでは、また。