技術力で殴る前に「問い」を研げ。
はじめに
本記事は 仮想通貨 Advent Calendar 2025 のシリーズ2の6日目の記事です。
エンジニアやデータサイエンティストがクリプトトレードに参入する際、最も陥りやすい罠があります。それは、「高度なモデルや大量の特徴量を使えば、エッジ(優位性)が見つかる」という誤解です。
- とりあえず大量のインジケーターをLightGBMに突っ込む
- 深層強化学習の論文を実装してみる
- グリッドサーチでパラメータを最適化し続ける
しかし、多くの場合、待っているのは「過学習(Overfitting)」という名の死です。
なぜでしょうか? それは 「解くべき問題(問い)」の定義が間違っているからです。
本稿では、 G. Pólya(ポーヤ)の名著『いかにして問題をとくか』の思考フレームワークを借りて、「データやモデルを触る前に行うべき、エッジ探索の作法」 を解説します。
0. そのエッジの原資は「誰」が払うのか?
コードを書く前に、冷徹な現実を直視しましょう。トレードはゼロサム(手数料を含めればマイナスサム)ゲームです。あなたが利益を得るためには、誰かが損をするか、コストを支払う必要があります。
エッジを定義し直しましょう。
真のエッジ(Edge)
市場構造、制度、あるいは人間の心理的バイアスによって、「特定のプレイヤーが不利な取引を強いられている」 状態。
「RSIが30を下回ったから上がる」のではありません。「恐怖に駆られた(あるいは強制清算された)プレイヤーが、適正価格以下で投げ売りせざるを得ないから、リバウンドが発生する」のです。
「対戦相手(Counterparty)」の顔が見えていない戦略は、すべてカーブフィッティングです。
この「構造」を見抜くために、ポーヤのアプローチをクオンツ向けに拡張した 6つのステージ を導入します。
1. エッジ探索の 6 ステージ
ポーヤの問題解決プロセスを、相場という不確実な領域向けに再構成します。
- 問いを定める(Frame the Question)
- 構造を理解する(Understand the Structure)
- 仮説空間を設計する(Design the Hypothesis Space)
- 最小のテストを設計する(Plan Minimal Tests)
- 実行して証拠を集める(Execute & Generate Evidence)
- 統合して問いを更新する(Synthesize & Update)
ステージ 0:問いを定める
― 「何を解くのか」を仕様化する
「儲かるロジックを作りたい」は願望であって、問いではありません。エンジニアリングの世界で「良い感じのアプリを作りたい」と言って開発を始めないのと同じです。
- 時間軸の定義: 数秒(HFT)、数時間(Day)、数日(Swing)?
- 優位性の定義: 勝率重視か、リスクリワード(損小利大)重視か?
- 制約条件: スリッページや手数料にどれだけ耐えられるロジックか?
ステージ 1:構造を理解する
― その利益の源泉(Alpha)はどこから来るのか
ここで初めて「対戦相手」を想像します。あなたの利益は、以下のどの歪みから生まれるのでしょうか?
- 情報の非対称性: オンチェーンの誰よりも早い検知、未公開情報の利用(※合法な範囲で)
- 制度的歪み: 現物と先物の価格差(Basis)、Funding Rateの乖離
- 強制力: ロスカット(Liquidation)による強制決済
- 行動バイアス: 恐怖(Panic Sell)、強欲(FOMO)、アンカリング
ステージ 2:仮説空間を設計する
― 特徴量エンジニアリングの指針を決める
「構造」がわかれば、見るべきデータ(特徴量)が決まります。
- 「強制ロスカット」を狙うなら → 価格そのものより 「Open Interest(未決済建玉)の減少」 や 「Liquidation Map」 が重要。
- 「需給の不均衡」を狙うなら → 「Funding Rate」 や 「Long/Short Ratio」 が重要。
機械学習を使う場合でも、漫然とOHLCV(始値・高値・安値・終値・出来高)を入れるのではなく、「歪みを表現する指標」を計算して入力するのが腕の見せ所です。
ステージ 3:最小のテストを設計する
― "Fail Fast"(早く失敗せよ)
ポーヤは「問題を単純化せよ」と説きました。
壮大なバックテストフレームワークを作る前に、「その仮説が箸にも棒にもかからないこと」 を10分で確認しましょう。
PythonとPandasで十分です。
# 仮説:「Funding Rate(FR)が極端にマイナスの時、ショートカバーで上がるはず」
# 最小テスト:FRが下位1%の時の、次足のリターン平均を見る
import pandas as pd
# df = (FRと価格データを含むDataFrame)
# 閾値を決定(下位1%)
threshold = df['fundingRate'].quantile(0.01)
# 条件抽出
condition = df['fundingRate'] < threshold
# 条件合致時の次足リターン平均
mean_return = df[condition]['next_return'].mean()
base_return = df['next_return'].mean()
print(f"通常時の平均リターン: {base_return:.5f}")
print(f"異常時の平均リターン: {mean_return:.5f}")
# この時点で有意差がなければ、この仮説は捨てるか、条件を絞り込む
ステージ 4:実行して証拠を集める
― バックテストは「答え合わせ」ではなく「診断」
バックテストの結果が右肩上がりになったとしても、喜ぶのはまだ早いです。
「なぜ勝てたのか」 を分解します。
- 時期による偏り: 2021年のバブル相場だけで稼いでいないか?
- 銘柄による偏り: 特定の草コインのパンプだけで稼いでいないか?
コラム:オーバーフィッティングの罠
もし、パラメータを少しずらしただけでパフォーマンスが激減するなら、それは「エッジ」ではなく「ノイズ」にフィッティングしています。「太いエッジ(Robust Edge)」は、パラメータが多少ずれても機能し続けます。
ステージ 5:統合して問いを更新する
― 研究ノート(Research Log)をつける
最後のステージは、結果の一般化です。
実験結果はすべて「資産」です。失敗した実験も、「そのアプローチは機能しない」という貴重なデータです。
おすすめは、「研究ノート」 をつけることです。
| Date | Hypothesis (仮説) | Method (検証法) | Result (結果) | Insight (気付き) |
|---|---|---|---|---|
| 12/01 | 急落後の反発狙い | 5%下落でLong | × (-0.2%) | 下落トレンド中は機能しない |
| 12/02 | ↑にFR条件を追加 | FR<0ならLong | ○ (+1.5%) | 需給の偏り(FR)が重要 |
このように仮説と結果を言語化し、更新し続けるプロセスそのものが、あなたの問題解決能力を高めます。
まとめ:インジケーターではなく「思考」を武器にせよ
- エッジの背後には必ず「理由(構造)」がある。 理由なきエッジは幻である。
- 「誰がお客様か」を常に問う。 対戦相手が見えないなら、お客様は自分かもしれない。
- ポーヤのプロセス(問い→構造→仮説→検証)を回す。 コードを書くのは、思考が固まってから。
今日のクリプト市場で通用した手法は、明日には使えなくなるかもしれません。しかし、「市場の歪みを見つけ、仮説を立て、検証する」という思考の型 は、市場がどう変わろうとも一生使える武器になります。
偉そうなことを書きましたが、自分への戒めとして書いているのでご容赦ください!
Discussion