機械学習による暗号通貨シグナル生成
機械学習は暗号通貨取引を根本的に変えました。かつてはテクニカル分析と手動の解釈に頼っていたものが、現在では数百万の価格ティック、オーダーブックのスナップショット、およびオンチェーンイベントからパターンを抽出できるニューラルネットワークの恩恵を受けています。このガイドでは、暗号通貨シグナルのためのML駆動の確認システムを構築する方法を探ります — Smart Money APIで信頼スコアを強化するために使用しているのと同じ技術です。
重要な洞察: MLシグナルは伝統的な指標と組み合わせたときに最も効果を発揮します。価格方向を52%の精度で予測するニューラルネットワークは無価値です。しかし、資金調達率が正でクジラのコンセンサスが強気であるときに勢いを確認するものはどうでしょうか?それは60%以上の勝率を持つシステムです。
数学的基礎
コードに飛び込む前に、数学を理解しましょう。すべてのニューラルネットワークは本質的に関数近似器です。入力特徴量(価格、出来高、資金調達率、クジラのコンセンサス)が与えられると、過去のデータにわたる予測誤差を最小化する重みを学習します。
教師あり学習のフレームワーク
ラベル付きデータから始めます: 過去の価格/シグナルのペア。
import numpy as np
import pandas as pd
df = pd.read_csv('btc_5m.csv')
features = df[['始値', '高値', '安値', '終値', '出来高', '資金調達率', 'クジラのロング']].values
targets = (df['終値'].shift(-5) > df['終値']).astype(int).values
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X = scaler.fit_transform(features)
暗号通貨のための特徴量エンジニアリング
生のOHLCVデータだけでは不十分です。以下が必要です:
- モメンタム指標: RSI, MACD, ADX (トレンドの強さを捉える)
- ボラティリティ指標: ATR, ボリンジャーバンドの幅 (拡張/圧縮を識別する)
- ボリュームプロファイル: 買い/売り圧力比率 (不均衡を発見する)
- オンチェーンシグナル: MVRV, SOPR, 取引所フロー (サイクルの位置を検出する)
- デリバティブデータ: 資金調達率, ロング/ショート比率 (レバレッジの極端さを示す)
- クジラの活動: コンセンサスの方向性, ポジションの変化, PnL (次の動きを予測する)
鍵は 情報の非対称性 — 大多数のトレーダーが見ていないシグナルを捉えることです。私たちのSmart Money APIは、デリバティブ、オンチェーン、クジラの3つのレイヤーを組み合わせた複合特徴量を提供し、単一の指標を凌駕します。
ニューラルネットワークアーキテクチャ
分類のための多層パーセプトロン (MLP)
単純な順伝播ネットワークはバイナリ分類(買い/売り)に驚くほど効果的です:
import torch
import torch.nn as nn
class CryptoMLP(nn.Module):
def __init__(self, input_size=7):
super().__init__()
self.fc1 = nn.Linear(input_size, 128)
self.fc2 = nn.Linear(128, 64)
self.fc3 = nn.Linear(64, 32)
self.fc4 = nn.Linear(32, 1)
self.dropout = nn.Dropout(0.3)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.dropout(x)
x = torch.relu(self.fc2(x))
x = self.dropout(x)
x = torch.relu(self.fc3(x))
x = torch.sigmoid(self.fc4(x))
return x
このアーキテクチャは、7つの入力特徴量が徐々に狭くなるレイヤー(128 → 64 → 32 → 1)を流れ、ReLU活性化関数とドロップアウトによる正則化が施されています。シグモイド出力は最終レイヤーを[0,1]に圧縮し、買い確率を表します。
LSTMを用いた時系列予測
リカレントネットワークの意義
価格変動は独立ではなく、記憶を持っています。LSTM(Long Short-Term Memory)ネットワークは時間的な依存関係を学習できます:「モメンタムが上昇し、資金調達レートが3時間の負値の後に正に転じた場合、次の5分足が陽線になる確率は58%です」
class CryptoLSTM(nn.Module):
def __init__(self, input_size=7, hidden_size=64, num_layers=2):
super().__init__()
self.lstm = nn.LSTM(input_size, hidden_size, num_layers, batch_first=True, dropout=0.3)
self.fc1 = nn.Linear(hidden_size, 32)
self.fc2 = nn.Linear(32, 1)
def forward(self, x):
lstm_out, _ = self.lstm(x)
last_hidden = lstm_out[:, -1, :]
x = torch.relu(self.fc1(last_hidden))
x = torch.sigmoid(self.fc2(x))
return x
このLSTMは60タイムステップ(5分足5時間分)のシーケンスを受け取り、次の方向を予測します。セル状態はシーケンス内のどの特徴が最も重要かを学習します。
シーケンスの準備
フラットなデータをスライディングウィンドウに変換:
def create_sequences(data, seq_len=60):
X, y = [], []
for i in range(len(data) - seq_len):
X.append(data[i:i+seq_len])
y.append(data[i+seq_len, -1])
return np.array(X), np.array(y)
X, y = create_sequences(X)
学習と評価
トレイン・テスト分割戦略
時系列データでは、 シャッフル厳禁。将来のデータリークは精度を過大評価します。
n = len(X)
train_idx = int(n * 0.7)
val_idx = int(n * 0.9)
X_train, y_train = X[:train_idx], y[:train_idx]
X_val, y_val = X[train_idx:val_idx], y[train_idx:val_idx]
X_test, y_test = X[val_idx:], y[val_idx:]
学習ループ
バイナリクロスエントロピー損失とAdamオプティマイザを使用:
model = CryptoLSTM()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
loss_fn = nn.BCELoss()
for epoch in range(100):
model.train()
optimizer.zero_grad()
preds = model(X_train_tensor)
loss = loss_fn(preds, y_train_tensor)
loss.backward()
optimizer.step()
model.eval()
with torch.no_grad():
val_preds = model(X_val_tensor)
val_loss = loss_fn(val_preds, y_val_tensor)
print(f"Epoch {epoch}: train={loss:.4f}, val={val_loss:.4f}")
Smart Money APIとの統合
私たちのMLモデルは従来の指標を置き換えるものではなく、それらを強化します。Smart Money APIとの連携方法:
def compute_confirmation_score(symbol, direction):
deriv_score = get_derivatives_score(symbol, direction)
onchain_score = get_onchain_score(symbol)
whale_score = get_whale_score(symbol, direction)
features = [deriv_score, onchain_score, whale_score, volatility, volume_trend]
ml_signal = lstm_model.predict(features)
composite = (deriv_score * 0.35 + onchain_score * 0.25 + whale_score * 0.25 + ml_signal * 0.15)
return {
"composite": composite,
"confidence": classify_confidence(composite),
"components": {"deriv": deriv_score, "onchain": onchain_score, "whale": whale_score, "ml": ml_signal}
}
ベストプラクティス
1. 過学習を避ける
- 使用 ドロップアウト層 (0.2-0.4 レート) でトレーニング中にニューロンをランダムにゼロ化
- 実装 早期停止 検証損失が改善しなくなった時点でトレーニングを停止
- トレーニング精度と検証精度の差を監視。差が広がる場合は過学習の可能性
2. クラスの不均衡に対処
「上昇」日が「下降」日より多い場合、モデルはより頻繁に上昇を予測します。重み付き損失を使用:
pos_weight = (len(y_train) - y_train.sum()) / y_train.sum()
loss_fn = nn.BCEWithLogitsLoss(pos_weight=torch.tensor(pos_weight))
3. 特徴量の正規化
ニューラルネットワークは特徴量のスケールに敏感です。入力特徴量は常に[0,1]または[-1,1]に正規化。スケーラーはトレーニングデータのみで再調整し、検証/テストに適用
4. ウォークフォワード検証
単一のテストセットの代わりにスライディングウィンドウを使用: 1年分のデータでトレーニングし、翌月でテスト。その後13ヶ月で再トレーニングし14ヶ月目でテストなど。これによりライブ取引条件をシミュレート
5. 実環境のパフォーマンスを監視
バックテストの精度はライブ精度とは異なります。モデルをデプロイし、実際の取引結果を追跡し、新しいデータで毎月再トレーニング。 シャープレシオ と 勝率 を実際の指標として使用(F1スコアではなく)
高度なテクニック
アテンション機構
Transformerベースのモデル(Attention Is All You Needなど)は、ネットワークがシーケンス内の最も重要な時点に「注目」できるようにします。暗号資産では、最近のボラティリティスパイクを古いデータよりも重視できます
アンサンブル手法
複数のアーキテクチャ(MLP、LSTM、XGBoost)をトレーニングし予測を平均化。アンサンブルモデルは通常、単一モデルより2-5%精度が向上
強化学習
価格方向の予測ではなく、累積PnLを最大化するエージェントをトレーニング。エージェントは信頼度と市場状況に基づいてポジションサイズを学習。これは暗号資産取引AIの最先端技術です
Smart Money APIでMLを活用
当社の複合スコアリングシステムは、デリバティブインテリジェンス、オンチェーン分析、クジラ追跡を統合 — 全てMLモデルの追加特徴量として統合可能。LSTM入力特徴量に追加すれば精度が3-5%向上
無料APIキーを取得 →