定量戦略開発 — 仮説から本番運用まで

利益を生む取引戦略を構築するには、直感以上のものが必要です。検証可能な仮説、厳密なバックテスト、そしてカーブフィッティングを避けるための慎重な最適化が必要です。このガイドでは、Smart Money APIのアルゴリズムを支えるのと同じ方法論で、定量戦略をゼロから構築する手順を説明します。

重要な原則: トレーダーの95%は、サンプル内データで最適化するために失敗します。過去のデータで200%のリターンを出す戦略は、実際の取引ではおそらく損失を出すでしょう。この罠を避ける方法を学びましょう。

仮説段階

反証可能な主張から始める

すべての戦略は、特定の検証可能な仮説から始まります。「ビットコインは時々上昇する」ではなく、「資金調達率が正で、かつクジラのロングコンセンサスが65%を超える場合、次の4時間足は56%の確率で高値で終わる」といったものです。

良い仮説:

悪い仮説:

あなたの優位性を定義する

あなたは 何を知っているのか 市場が価格に反映していないものは何ですか?Smart Money APIにとっては、「クジラのコンセンサスは、一般投資家が反応する2〜4時間前に変化する。上位250のウォレットをリアルタイムで追跡すれば、その動きを先取りできる」ということです。

戦略フレームワーク

1. エントリー条件

いつエントリーしますか?明確にしてください:

Python — エントリーロジック
# 戦略: クジラコンセンサス + デリバティブの一致
def should_enter_long(symbol, bar):
# 条件1: クジラのコンセンサス > 65% ロング
whale_long_pct = get_whale_consensus(symbol)
cond_whale = whale_long_pct > 0.65
# 条件2: 資金調達率が正で増加中
fr_current = get_funding_rate(symbol)
fr_previous = get_funding_rate(symbol, offset=1)
cond_fr = (fr_current > 0) and (fr_current > fr_previous)
# 条件3: LSR > 1.25(ロングがショートより多い)
lsr = get_long_short_ratio(symbol)
cond_lsr = lsr > 1.25
# 条件4: 価格が50日移動平均を上回る(上昇トレンドの文脈)
ma_50 = get_sma(symbol, 50)
cond_trend = bar.close > ma_50
return cond_whale and cond_fr and cond_lsr and cond_trend

2. エグジット条件

いつクローズしますか?利益目標とストップを定義してください:

Python — エグジットロジック
def should_exit_long(entry_price, current_price, time_in_trade):
pnl_pct = (current_price - entry_price) / entry_price
# 利益目標: +2%
if pnl_pct > 0.02:
return True, "profit_target"
# ストップロス: -1%
if pnl_pct < -0.01:
return True, "stop_loss"
# 時間ベースのエグジット: 4時間後にクローズ
if time_in_trade > timedelta(hours=4):
return True, "time_exit"
return False, None

3. ポジションサイジング

1トレードあたりどのくらいリスクを取りますか?ケリー基準または固定分数ベッティングを使用してください:

Python — ポジションサイジング
def calculate_position_size(account_balance, win_rate, avg_win, avg_loss):
# ケリー基準: f* = (p*b - q) / b
# p = 勝率, b = 勝ち/負け比率, q = 負け率
p = win_rate
q = 1 - win_rate
b = avg_win / avg_loss
kelly_fraction = (p * b - q) / b
# ケリーの25%を使用して保守的になる(破産を避ける)
position_fraction = kelly_fraction * 0.25
risk_amount = account_balance * position_fraction
return risk_amount

バックテスターの構築

イベント駆動型バックテストエンジン

Python — バックテストフレームワーク
class BacktestEngine:
def __init__(self, initial_capital=10000):
self.capital = initial_capital
self.trades = []
self.equity_curve = []
def run(self, data, strategy):
for i, bar in enumerate(data):
# オープントレードのエグジット条件をチェック
for trade in self.trades:
should_close, reason = trade.check_exit(bar.close)
if should_close:
pnl = (bar.close - trade.entry_price) * trade.size
self.capital += pnl
self.trades.remove(trade)
# エントリー条件をチェック
if strategy.should_enter(bar):
size = calculate_position_size(...)
trade = Trade(entry_price=bar.close, size=size)
self.trades.append(trade)
self.equity_curve.append(self.capital)
return self.calculate_metrics()

主要バックテスト指標

過剰最適化の回避

過学習の罠

過去データでパラメータを調整して200%のリターンが出ても、実際の運用では失望します。厳密なアウトオブサンプルテストを使用してください:

ウォークフォワード検証: 1年分のデータで最適化し、次の3ヶ月でテスト。その後2-3年目で最適化し、3年目の第1四半期でテスト。全データセットで繰り返し、アウトオブサンプル結果のみを報告。

パラメータ感応度

グリッドサーチで複数のパラメータ組み合わせをテストしつつ、複雑さにペナルティを課す:

Python — ウォークフォワード付きグリッドサーチ
def walk_forward_optimization(data, param_ranges):
results = []
train_window = 252 # 1年分の日次データ
test_window = 63 # 3ヶ月分
for i in range(0, len(data) - train_window - test_window, test_window):
train_data = data[i:i+train_window]
test_data = data[i+train_window:i+train_window+test_window]
# トレーニングデータで最適化
best_params = None
best_return = -float('inf')
for params in param_combinations(param_ranges):
backtest_result = backtest(train_data, params)
if backtest_result.return_pct > best_return:
best_return = backtest_result.return_pct
best_params = params
# 未見データでテスト
oos_result = backtest(test_data, best_params)
results.append({"is": best_return, "oos": oos_result.return_pct})
return results

本番環境への移行

まずはペーパートレード

実際の資金をリスクにさらす前に、2-4週間のシミュレーション取引を行ってください。スリッページ、レイテンシー、執行の影響で、実際の戦略はバックテストより5-15%低いパフォーマンスになります。ペーパートレードがバックテストと近い結果なら準備完了です。

ライブ取引におけるリスク管理

ライブ取引は異なります。厳格な制限を設定してください:

Smart Money APIとの連携

当社のコンファメーションスコアをシグナルの事前フィルターまたは乗数として使用:

Python — API連携
import requests
def execute_with_confirmation(symbol, direction, signal_strength):
# Smart Moneyのコンファメーションを取得
response = requests.get(
f"https://api.smartmoneyapi.com/v1/confirm?symbol={symbol}&direction={direction}",
headers={"X-API-Key": API_KEY}
)
data = response.json()
# Smart Moneyの信頼度に基づいてサイズ乗数を適用
if data["confidence"] == :
position_size = base_size * 1.5
elif data[信頼度] == :
position_size = base_size * 1.0
elif data[信頼度] == :
position_size = base_size * 0.5
elif data[信頼度] == 拒否:
return スキップ # 取引しない
# 最終サイズで取引を実行
execute_order(symbol, direction, position_size)

Smart Moneyシグナルでより良い戦略を構築

クジラ追跡、デリバティブインテリジェンス、オンチェーンメトリクスを定量モデルに組み込みます。Smart Money確認を追加すると、バックテストされた戦略が5-8%向上します。

無料でバックテストを開始 →