📝

技術力で殴る前に「問い」を研げ。

に公開

はじめに

本記事は 仮想通貨 Advent Calendar 2025 のシリーズ2の6日目の記事です。

エンジニアやデータサイエンティストがクリプトトレードに参入する際、最も陥りやすい罠があります。それは、「高度なモデルや大量の特徴量を使えば、エッジ(優位性)が見つかる」という誤解です。

  • とりあえず大量のインジケーターをLightGBMに突っ込む
  • 深層強化学習の論文を実装してみる
  • グリッドサーチでパラメータを最適化し続ける

しかし、多くの場合、待っているのは「過学習(Overfitting)」という名の死です。

なぜでしょうか? それは 「解くべき問題(問い)」の定義が間違っているからです。

本稿では、 G. Pólya(ポーヤ)の名著『いかにして問題をとくか』の思考フレームワークを借りて、「データやモデルを触る前に行うべき、エッジ探索の作法」 を解説します。


0. そのエッジの原資は「誰」が払うのか?

コードを書く前に、冷徹な現実を直視しましょう。トレードはゼロサム(手数料を含めればマイナスサム)ゲームです。あなたが利益を得るためには、誰かが損をするか、コストを支払う必要があります。

エッジを定義し直しましょう。

真のエッジ(Edge)
市場構造、制度、あるいは人間の心理的バイアスによって、「特定のプレイヤーが不利な取引を強いられている」 状態。

「RSIが30を下回ったから上がる」のではありません。「恐怖に駆られた(あるいは強制清算された)プレイヤーが、適正価格以下で投げ売りせざるを得ないから、リバウンドが発生する」のです。

「対戦相手(Counterparty)」の顔が見えていない戦略は、すべてカーブフィッティングです。

この「構造」を見抜くために、ポーヤのアプローチをクオンツ向けに拡張した 6つのステージ を導入します。


1. エッジ探索の 6 ステージ

ポーヤの問題解決プロセスを、相場という不確実な領域向けに再構成します。

  1. 問いを定める(Frame the Question)
  2. 構造を理解する(Understand the Structure)
  3. 仮説空間を設計する(Design the Hypothesis Space)
  4. 最小のテストを設計する(Plan Minimal Tests)
  5. 実行して証拠を集める(Execute & Generate Evidence)
  6. 統合して問いを更新する(Synthesize & Update)

ステージ 0:問いを定める

― 「何を解くのか」を仕様化する

「儲かるロジックを作りたい」は願望であって、問いではありません。エンジニアリングの世界で「良い感じのアプリを作りたい」と言って開発を始めないのと同じです。

  • 時間軸の定義: 数秒(HFT)、数時間(Day)、数日(Swing)?
  • 優位性の定義: 勝率重視か、リスクリワード(損小利大)重視か?
  • 制約条件: スリッページや手数料にどれだけ耐えられるロジックか?

ステージ 1:構造を理解する

― その利益の源泉(Alpha)はどこから来るのか

ここで初めて「対戦相手」を想像します。あなたの利益は、以下のどの歪みから生まれるのでしょうか?

  1. 情報の非対称性: オンチェーンの誰よりも早い検知、未公開情報の利用(※合法な範囲で)
  2. 制度的歪み: 現物と先物の価格差(Basis)、Funding Rateの乖離
  3. 強制力: ロスカット(Liquidation)による強制決済
  4. 行動バイアス: 恐怖(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