freqAI-LSTM トレーディングモデル完全ガイド
初心者から上級者まで徹底解説
第1章: はじめに - このシステムは何をするのか
1.1 プロジェクトの全体像
freqAI-LSTMは、暗号通貨の自動取引を行うための人工知能システムです。このシステムは、まるで経験豊富なトレーダーが市場を監視し、過去のパターンを学習して未来の価格動向を予測するように、機械学習の力を使って取引判断を自動化します。
想像してみてください。あなたが株式市場で取引する際、チャートを見て、複数の指標(移動平均線、RSI、MACDなど)を確認し、「今が買い時か、売り時か」を判断しますよね。このシステムは、その判断プロセス全体をAIに学習させ、24時間休むことなく市場を監視し続けることができるのです。
1.2 なぜこのシステムが重要なのか
従来の自動取引システムは、単純なルール(「RSIが30以下なら買い」など)に基づいていました。しかし、市場は複雑で常に変化しています。このfreqAI-LSTMシステムの革新的な点は、以下の3つの能力を持っていることです。
学習能力: 過去のデータから市場のパターンを自動的に学習します。人間のトレーダーが何年もかけて身につける経験を、AIは短期間で習得できます。
適応能力: 市場の状況(ボラティリティの高低、トレンドの有無)に応じて、自動的に戦略を調整します。まるで熟練トレーダーが市場環境に応じて取引スタイルを変えるように。
多次元分析: 人間が同時に処理できる情報量には限界がありますが、このシステムは数十種類の指標を同時に分析し、それらの複雑な相互作用を考慮して判断を下します。
第2章: 基礎知識 - システムを理解するための土台
2.1 LSTMとは何か - 時間を理解するAI
LSTMは「Long Short-Term Memory(長短期記憶)」の略で、時系列データを扱うための特殊なニューラルネットワークです。なぜ「時系列」が重要なのでしょうか。
株価や暗号通貨の価格は、現在の値だけを見ても十分な判断はできません。「どこから来て、どこへ向かっているのか」という流れを理解することが重要です。例えば、現在の価格が100ドルだとしても、1時間前が90ドルだったのか110ドルだったのかで、意味は全く異なります。
通常のニューラルネットワークは「記憶力」を持ちません。各データポイントを独立して処理します。しかしLSTMは、人間の記憶のように、過去の情報を保持しながら新しい情報を処理できます。
LSTMの記憶メカニズムの例:
LSTMは3つの「ゲート」を持っています。これは、人間の脳が情報を選別するプロセスに似ています。
- 忘却ゲート: 「この古い情報はもう重要ではない」と判断して忘れる
- 入力ゲート: 「この新しい情報は重要だ」と判断して記憶する
- 出力ゲート: 「今、この記憶された情報を使うべきだ」と判断して出力する
株価予測の文脈で考えると、LSTMは「3日前の急騰は短期的なニュースによるものだったから、もう重視しなくていい」(忘却)、「昨日から継続している上昇トレンドは重要だ」(入力)、「今の時点で、この上昇トレンドの情報を予測に使おう」(出力)という判断を自動的に学習します。
2.2 テクニカル指標の基礎 - 市場を読む言語
このシステムは複数のテクニカル指標を使用します。それぞれの指標は、市場の異なる側面を測定する「センサー」のようなものです。
移動平均線(MA): 過去の価格の平均値を計算することで、短期的なノイズを除去し、トレンドの方向を明確にします。10日移動平均線が上向きなら、短期的な上昇トレンドを示しています。
具体例として、過去10日間の終値が「100, 102, 101, 103, 105, 104, 106, 108, 107, 110」だとすると、10日移動平均は104.6となります。個々の日の変動よりも、全体的な流れが「上昇している」ことが見えてきます。
RSI(相対力指数): 買われすぎ、売られすぎを判定する指標です。0から100の値を取り、一般的に70以上で買われすぎ、30以下で売られすぎと判断されます。
RSIの直感的な理解としては、「最近の価格上昇の勢いと下落の勢いのバランス」を測っていると考えてください。RSIが90なら、最近は上昇ばかりで、そろそろ調整(下落)が来るかもしれません。
MACD(移動平均収束拡散): 2本の移動平均線の関係を見ることで、トレンドの変化を検出します。短期線が長期線を上抜けたら買いシグナル、下抜けたら売りシグナルとなります。
MACDは、まるで「速い船」と「遅い船」を追跡しているようなものです。速い船(短期移動平均)が遅い船(長期移動平均)を追い越す瞬間は、市場の勢いが変わる重要なポイントです。
ボリンジャーバンド: 価格の変動範囲を統計的に計算した指標です。バンドが広がっている時は市場が不安定(ボラティリティが高い)、狭まっている時は安定していることを示します。
ボリンジャーバンドは、価格の「通常の範囲」を視覚化します。価格がバンドの外に出るということは、統計的に異常な動きをしていることを意味し、多くの場合、その後バンド内に戻ろうとする動きが見られます。
CCI(商品チャンネル指数): 価格が統計的な平均からどれだけ離れているかを測定します。極端な値は、価格が平均に戻る可能性を示唆します。
ROC(変化率): 現在の価格が数期間前と比べてどれだけ変化したかをパーセンテージで表します。モメンタム(勢い)の強さを測る指標です。
2.3 機械学習における正規化の重要性
各指標は異なるスケールを持っています。RSIは0〜100、価格は数千ドル、出来高は数百万といった具合です。これらをそのまま機械学習モデルに入力すると、大きな値を持つ特徴量が過度に重視されてしまいます。
正規化とは、すべての指標を同じスケール(例えば-1〜1や0〜1)に変換するプロセスです。このシステムではZ-score正規化を使用しています。
Z-score正規化の計算:
正規化された値 = (元の値 - 平均値) / 標準偏差
これにより、「この値は平均から標準偏差の何倍離れているか」という統一的な尺度で全ての指標を表現できます。例えば、Z-scoreが2.0なら「平均より2標準偏差高い」という意味で、統計的に見て非常に高い値だと判断できます。
第3章: システムアーキテクチャ - 全体の構造を理解する
3.1 システムの3つの主要コンポーネント
このシステムは大きく3つの部分から構成されています。
データ処理パイプライン: 生の市場データを取得し、テクニカル指標を計算し、正規化して機械学習モデルが理解できる形式に変換します。
LSTMモデル: 処理されたデータから未来のターゲットスコアを予測します。このスコアは「市場が有利な状態にあるか」を数値化したものです。
意思決定エンジン: LSTMの予測結果と設定された閾値を比較し、実際の売買シグナルを生成します。
3.2 データフローの全体像
システム内のデータの流れを段階的に追ってみましょう。
ステップ1: データ収集
取引所APIから生の市場データ(価格、出来高、時刻)を1時間ごとに取得します。このシステムは、設定により2時間足と4時間足のデータも同時に収集し、複数の時間軸から市場を分析します。
ステップ2: 特徴量生成
FreqAIフレームワークの3つの関数で段階的に特徴量を生成します。
基本特徴量では、価格の変化率、生の出来高、生の価格を記録します。これらは最も根本的な市場情報です。
拡張特徴量では、CCI、RSI、MACD、ボリンジャーバンドなど、計算されたテクニカル指標を追加します。ここで重要なのは、これらの指標を複数の時間軸(1時間足、2時間足、4時間足)で計算することです。短期的な動きと長期的な動きの両方を捉えることで、より包括的な市場理解が可能になります。
さらに、相関ペア(BTC/USDTとETH/USDT)からの特徴量も含めます。暗号通貨市場では、主要コインの動きが他のコインに影響を与えることが多いため、この相関情報は非常に有用です。
標準特徴量では、曜日や時刻といった時間的特徴を追加します。市場は時間帯によって特性が変わることがあるため(例えば、米国市場が開く時間帯は出来高が増える)、この情報も重要です。
ステップ3: 正規化
すべての指標をZ-score正規化により標準化します。これにより、異なるスケールの指標を公平に比較できるようになります。
ステップ4: 動的重み付け
正規化された指標に対して、市場状況に応じた重みを適用します。これがこのシステムの最も革新的な部分の一つです。
例えば、強いトレンドが発生している時は、モメンタム指標(ROC)の重みを1.5倍に増やします。なぜなら、トレンド相場では「勢い」が継続する傾向があるからです。一方、レンジ相場(横ばい)では、RSIのような逆張り指標がより有効になります。
ステップ5: 統合スコア計算
重み付けされた指標を総合し、さらに市場レジームとボラティリティ調整を適用して、最終的なターゲットスコアを計算します。
このターゲットスコアの式を改めて見てみましょう:
T = S × R × V × R2 × V2
各乗算項目には深い意味があります。Sは指標の総合評価、Rは短期的な市場環境、Vは短期的なリスク調整、R2は長期的なトレンド、V2は長期的なリスク調整を表します。すべてが掛け算になっているということは、どれか一つでもゼロや負の値になれば、全体のスコアも低くなるということです。これは「すべての条件が揃った時だけ取引する」という慎重なアプローチを反映しています。
ステップ6: LSTM予測
過去5時間分のターゲットスコアをLSTMモデルに入力し、次の時間のスコアを予測します。
LSTMは単純に「今のスコアが高いから次も高い」と予測するのではありません。「過去5時間のスコアの推移パターン」を学習しています。例えば、「スコアが徐々に上昇しているパターンの後は、さらに上昇が続く傾向がある」といった時系列的な関係性を捉えます。
ステップ7: 売買判断
予測されたスコアを閾値と比較し、売買シグナルを生成します。
- スコアが0.59453以上: ロング(買い)エントリー
- スコアが0.80573以下: ショート(売り)エントリー
これらの閾値は、過去のデータでの最適化によって決定されたものです。買い閾値が比較的低く、売り閾値が高いのは、このシステムが「ロングポジションを取りやすく、ショートポジションには慎重」という特性を持つことを意味します。
3.3 PyTorchLSTMモデルの詳細構造
モデルのアーキテクチャをレイヤーごとに見ていきましょう。
入力層: 5時間分の特徴量データを受け取ります。各時間ステップには、数十個の特徴量(正規化された指標群)が含まれています。
LSTM層(3層構成):
第1層: 入力データを受け取り、隠れ状態(128次元)を生成します。この層は「生のデータから基本的なパターンを抽出する」役割を持ちます。
第2層: 第1層の出力を受け取り、さらに抽象的なパターンを学習します。「複数の基本パターンの組み合わせ」を理解する層です。
第3層: 最も高レベルの特徴を抽出します。「市場全体の文脈」を理解する層と言えます。
各LSTM層の後には、バッチ正規化とドロップアウトが適用されます。
バッチ正規化: 各ミニバッチのデータを正規化することで、学習を安定化させます。これにより、学習が速く進み、より良い性能が得られます。
ドロップアウト(40%): ランダムに40%のニューロンを一時的に無効化します。これは「過学習」を防ぐための重要な技術です。
過学習とは何でしょうか。例えば、学生が試験問題の答えを丸暗記してしまい、新しい問題には対応できないような状態です。ドロップアウトは、ネットワークが特定のニューロンに依存しすぎないようにし、より汎用的なパターンを学習させます。これは、スポーツチームで「誰かが欠けても機能する」ような堅牢なシステムを作るのに似ています。
全結合層:
LSTM層の出力(128次元)を36次元に圧縮します。これは「高次元の複雑な情報を、予測に必要な本質的な情報に凝縮する」プロセスです。
アルファドロップアウト(50%): さらなる正則化のため、全結合層でも50%の確率でニューロンを無効化します。アルファドロップアウトは通常のドロップアウトより、SELU活性化関数と相性が良い改良版です。
出力層: 36次元のベクトルを最終的な予測値(1次元)に変換します。この値が、次の時間のターゲットスコアの予測値です。
第4章: 動的重み付けシステム - 適応的市場分析の核心
4.1 なぜ動的重み付けが必要なのか
固定された重みだけを使う従来のシステムには、根本的な問題があります。市場環境は常に変化するのに、システムの判断基準は変わらないのです。
これは、天候に関係なく同じ服を着続けるようなものです。晴れの日も雨の日も、夏も冬も同じ服では快適に過ごせません。同様に、トレンド相場とレンジ相場では、有効な指標が異なります。
4.2 基本重みの最適化
システムは、過去のデータに基づいて各指標の基本的な重要度を学習しています。
指標 | 重み | 解釈 |
---|---|---|
移動平均偏差 | 0.54347 | 中程度の重要性 |
MACD | 0.82226 | 高い重要性 |
ROC | 0.56675 | 中程度の重要性 |
RSI | 0.77918 | 高い重要性 |
ボリンジャーバンド幅 | 0.98488 | 最も高い重要性 |
ボリンジャーバンド幅の重みが最も高いのは興味深い結果です。これは、市場のボラティリティ(変動性)の情報が、取引判断において極めて重要であることを示しています。ボラティリティが高い時は慎重に、低い時は積極的に、という判断の基準になるからです。
4.3 トレンド強度による動的調整
システムはトレンドの強さを常に監視し、強いトレンドが検出されたら自動的にモメンタム指標の重みを増やします。
トレンド強度の計算方法:
トレンド強度 = |移動平均線 - 現在価格|
この値が大きいほど、価格が移動平均から大きく離れていることを意味し、強いトレンドが発生していると判断できます。
強トレンドの閾値:
強トレンド閾値 = 14期間の平均トレンド強度 + 1.5 × 標準偏差
この式は統計学的な考え方に基づいています。「平均より1.5標準偏差以上大きい値」は、統計的に見て非常に大きな値です。これにより、本当に強いトレンドだけを検出できます。
重み調整の実行:
トレンド強度が閾値を超えたら、モメンタム(ROC)の重みを1.5倍にします。
なぜモメンタムなのでしょうか。強いトレンドが発生している時、市場は「勢いが勢いを生む」傾向があります。上昇トレンドなら、さらに買いが買いを呼び、下降トレンドなら、さらに売りが売りを呼びます。この「勢い」を測定するのがモメンタム指標なので、トレンド時にはより重視すべきなのです。
4.4 集約スコアの計算プロセス
各指標を正規化し、重み付けし、合計するプロセスを具体例で見てみましょう。
仮に、ある時点での正規化済み指標値が以下だとします:
- 正規化MA偏差: 0.5
- 正規化MACD: 0.8
- 正規化ROC: 0.3
- 正規化RSI: -0.2(売られすぎを示唆)
- 正規化BB幅: 0.6
そして、現在は強トレンドが検出されているとします。
集約スコアの計算:
S = (0.54347 × 0.5) + (0.82226 × 0.8) + (0.56675 × 1.5 × 0.3) + (0.77918 × -0.2) + (0.98488 × 0.6)
注目すべきは、ROCの重みが通常の0.56675から、1.5倍の0.85013に増加している点です。
計算すると:
S = 0.272 + 0.658 + 0.255 - 0.156 + 0.591 = 1.620
このスコアは、「全体的に強気の市場状態」を示していますが、RSIが負の値(売られすぎ)を示しているため、単純に全ての指標が一致しているわけではありません。重み付け合計により、より重要な指標(MACDやBB幅)の意見が強く反映されます。
第5章: マーケットレジーム判定 - 市場の「状態」を理解する
5.1 レジーム判定の重要性
「レジーム」とは、市場の基本的な状態や性質のことです。主に3つのレジームがあります:
上昇トレンド: 価格が継続的に上昇している状態。このとき、「押し目買い」戦略が有効です。
下降トレンド: 価格が継続的に下落している状態。このとき、「戻り売り」戦略が有効です。
レンジ相場: 価格が一定の範囲内で上下している状態。このとき、「逆張り」戦略が有効です。
同じ指標の同じ値でも、どのレジームにいるかによって解釈が180度変わります。例えば、RSIが70(買われすぎ)でも、強い上昇トレンド中なら「さらに上昇する」可能性がありますが、レンジ相場なら「反転下落する」可能性が高いのです。
5.2 第1レジームフィルター - ボリンジャーバンドによる短期判定
ボリンジャーバンドは、価格の「正常範囲」を統計的に定義します。中央線は移動平均、上限と下限は±2標準偏差の位置にあります。
レジーム判定のロジック:
レンジ相場(R = 0):
価格がボリンジャーバンドの中央付近にある時です。これは「市場が平均的な状態にある」ことを意味します。統計学的には、データの約68%は平均±1標準偏差の範囲内に収まるため、この状態は「普通」と言えます。
レンジ相場では、システムはシグナルを抑制します。なぜなら、明確な方向性がないため、誤ったシグナルが多く発生しやすいからです。
上昇レジーム(R = 1):
価格が中央線と上限線の両方を上回っている時です。これは統計的に見て非常に強い上昇を意味します。
「両方を上回る」という条件が重要です。一時的に上限を超えただけ(すぐに戻る場合)と、継続的に上限を超えている場合を区別するためです。
下降レジーム(R = -1):
価格が中央線と下限線の両方を下回っている時です。統計的に見て非常に強い下落を意味します。
実際の例:
ビットコインの価格が10,000ドルで、ボリンジャーバンドが以下の状態だとします:
- 上限: 10,500ドル
- 中央線: 10,000ドル
- 下限: 9,500ドル
ケース1: 価格が10,600ドルに上昇
価格 > 中央線(10,600 > 10,000): True
価格 > 上限(10,600 > 10,500): True
→ R = 1 (上昇レジーム)
ケース2: 価格が10,200ドル
価格 > 中央線(10,200 > 10,000): True
価格 > 上限(10,200 > 10,500): False
→ R = 0 (レンジ相場)
5.3 第2レジームフィルター - 長期トレンド判定
100期間移動平均線は、長期的なトレンドを示します。100時間(約4日間)の平均を取るため、短期的なノイズに影響されにくい、安定した指標です。
判定ロジック:
現在価格 > 100期間MA → R2 = 1 (長期上昇トレンド)
現在価格 < 100期間MA → R2 = -1 (長期下降トレンド)
このシンプルな判定が、なぜ強力なのでしょうか。移動平均は「群衆の平均的なコスト」を表していると考えられます。価格が移動平均を上回っている時、多くの参加者が利益を持っており、市場心理は強気です。逆に下回っている時は、多くの参加者が損失を抱えており、市場心理は弱気です。
5.4 2段階フィルターの相互作用
短期レジーム(R)と長期レジーム(R2)を掛け合わせることで、より信頼性の高い判定ができます。
組み合わせの例:
最強の買いシグナル:
R = 1 (短期上昇) × R2 = 1 (長期上昇) = 1
短期も長期も上昇トレンド。非常に強い上昇環境です。
混合シグナル:
R = 1 (短期上昇) × R2 = -1 (長期下降) = -1
短期的には上昇しているが、長期的には下降トレンド。これは「戻り売りのチャンス」かもしれません。最終スコアは負になり、システムは慎重になります。
レンジ相場:
R = 0 (レンジ) × R2 = 1 (長期上昇) = 0
短期的に方向性がないため、長期トレンドがどうであれ、スコアはゼロになります。システムは取引を控えます。
第6章: ボラティリティ調整 - リスクの動的管理
6.1 ボラティリティとは何か
ボラティリティは、価格変動の激しさを表す指標です。高ボラティリティは大きなチャンスと同時に大きなリスクを意味します。
想像してみてください。穏やかな川と急流の川。穏やかな川では安全に船を進められますが、急流では一瞬のミスが大事故につながります。市場のボラティリティも同じです。
6.2 逆ボラティリティ調整の理論
このシステムは「逆ボラティリティ重み付け」という手法を使います。つまり、ボラティリティが高いほど、シグナルの重みを下げるのです。
なぜ逆数を使うのでしょうか。高ボラティリティの時、価格は予測不可能に動きます。この不確実性が高い状況で、システムが強い確信を持つのは危険です。したがって、ボラティリティが2倍になったら、シグナルの強さを半分にする、というアプローチが合理的です。
6.3 ボリンジャーバンド幅による調整(V)
ボリンジャーバンド幅は、短期的なボラティリティを測定します。
計算式:
BB幅 = (上限バンド - 下限バンド) / 中央バンド
V = 1 / BB幅
具体例:
価格が10,000ドルの時:
低ボラティリティケース:
- 上限: 10,200ドル
- 下限: 9,800ドル
- BB幅 = (10,200 - 9,800) / 10,000 = 0.04
- V = 1 / 0.04 = 25
高ボラティリティケース:
- 上限: 11,000ドル
- 下限: 9,000ドル
- BB幅 = (11,000 - 9,000) / 10,000 = 0.20
- V = 1 / 0.20 = 5
低ボラティリティの時、Vは25と高く、シグナルが強化されます。高ボラティリティの時、Vは5と低く、シグナルが抑制されます。この差は5倍です。つまり、ボラティリティが5倍になると、システムの確信度は5分の1になります。
6.4 ATRによる調整(V2)
ATR(Average True Range、真の値幅の平均)は、長期的なボラティリティを測定します。
ATRは、各期間の価格変動幅を平均化したものです。ボリンジャーバンドが「現在の価格分布」を見るのに対し、ATRは「平均的な変動幅」を見ます。
計算例:
過去14日間の各日の値幅(高値-安値)が平均500ドルなら、ATRは500です。
V2 = 1 / ATR = 1 / 500 = 0.002
ATRが大きい(市場が荒れている)時、V2は小さくなり、ターゲットスコアを抑制します。
6.5 二重ボラティリティ調整の効果
V(短期)とV2(長期)の両方を使うことで、より堅牢な調整が可能になります。
シナリオ別の動作:
安定市場(両方低ボラティリティ):
V = 25, V2 = 0.002
調整倍率 = 25 × 0.002 = 0.05
システムは積極的にシグナルを出します。
一時的な急変動(短期高、長期低):
V = 5, V2 = 0.002
調整倍率 = 5 × 0.002 = 0.01
短期的な混乱を認識し、やや慎重になります。
長期不安定市場(両方高):
V = 5, V2 = 0.0004
調整倍率 = 5 × 0.0004 = 0.002
市場全体が不安定と判断し、極めて慎重になります。
この二重調整により、システムは「一時的なスパイク」と「持続的な不安定性」を区別できます。
第7章: ターゲットスコアの統合 - すべてが一つになる
7.1 統合式の全体像
すべての要素を組み合わせた最終的なターゲットスコアの式を、もう一度見てみましょう:
T = S × R × V × R2 × V2
この式の美しさは、そのシンプルさにあります。掛け算だけで構成されているため、直感的に理解できます。
7.2 各要素の役割の再確認
S(集約スコア): 「指標は何を言っているか?」
複数のテクニカル指標の総合評価。市場の基本的な強弱を表します。Sが高いほど、市場は強気です。
R(短期レジーム): 「今、市場はどういう状態か?」
-1(下降)、0(レンジ)、1(上昇)の3値。Rが0なら、どれだけSが高くても、ターゲットスコアはゼロになります。「レンジ相場では取引しない」という原則を強制します。
V(短期ボラティリティ調整): 「今の市場はどれだけ予測可能か?」
高いほど安定、低いほど不安定。Vが0.1なら、スコアは10分の1に減少します。「不確実性が高い時は慎重に」という原則を実装します。
R2(長期トレンド): 「大きな流れはどちらを向いているか?」
-1(下降)または1(上昇)。R2が-1なら、スコア全体が負になります。「長期下降トレンドでは買わない」という原則を強制します。
V2(長期ボラティリティ調整): 「市場の基本的な安定性はどうか?」
長期的なリスク環境を反映。V2が小さいと、どれだけ他の条件が良くても、最終スコアは低く抑えられます。
7.3 掛け算の意味 - 論理積(AND)の実装
なぜ足し算ではなく掛け算なのでしょうか。掛け算は「AND条件」を実装します。
足し算の場合:
T = S + R + V + R2 + V2
この場合、一つの要素が非常に大きければ、他の要素が悪くてもカバーできてしまいます。例えば、Sが10でRが0(レンジ相場)でも、T=10+0+...=大きな値になる可能性があります。
掛け算の場合:
T = S × R × V × R2 × V2
この場合、一つでもゼロがあれば、全体がゼロになります。すべての条件が満たされた時だけ、高いスコアが得られます。これは「慎重な」トレーディングアプローチを実装しています。
7.4 実際の計算例
具体的なシナリオでターゲットスコアを計算してみましょう。
シナリオ1: 理想的な買い条件
- S = 2.0 (指標は強気)
- R = 1 (短期上昇トレンド)
- V = 0.8 (やや安定)
- R2 = 1 (長期上昇トレンド)
- V2 = 0.9 (安定的)
T = 2.0 × 1 × 0.8 × 1 × 0.9 = 1.44
このスコアは買い閾値(0.59453)を大きく上回り、強い買いシグナルとなります。
シナリオ2: レンジ相場
- S = 2.5 (指標は非常に強気)
- R = 0 (レンジ相場)
- V = 0.9 (安定)
- R2 = 1 (長期上昇トレンド)
- V2 = 0.8 (安定)
T = 2.5 × 0 × 0.9 × 1 × 0.8 = 0
指標がどれだけ強気でも、レンジ相場(R=0)のため、スコアはゼロ。取引は行われません。
シナリオ3: 高ボラティリティ市場
- S = 1.8 (指標は強気)
- R = 1 (短期上昇トレンド)
- V = 0.2 (非常に不安定)
- R2 = 1 (長期上昇トレンド)
- V2 = 0.3 (不安定)
T = 1.8 × 1 × 0.2 × 1 × 0.3 = 0.108
方向性は良くても、ボラティリティが高すぎるため、スコアは買い閾値を下回ります。取引は控えられます。
シナリオ4: トレンド反転の可能性
- S = 1.5 (指標はやや強気)
- R = 1 (短期上昇)
- V = 0.7 (やや安定)
- R2 = -1 (長期下降トレンド)
- V2 = 0.6 (やや不安定)
T = 1.5 × 1 × 0.7 × (-1) × 0.6 = -0.63
短期的には上昇していますが、長期トレンド(R2=-1)が下降のため、スコアは負。システムはこれを「戻り売りのチャンス」の可能性と見なし、売りシグナルの検討対象となります。
第8章: エントリーとExit戦略 - 実際の取引決定
8.1 閾値の設定と意味
システムは2つの閾値を使用します:
- 買い閾値: 0.59453
- 売り閾値: 0.80573
なぜこの値なのでしょうか。これらは「ハイパースペース最適化」という手法で、過去のデータに対して最も良い結果を出すように調整された値です。
非対称性の意味:
買い閾値が低く、売り閾値が高いという非対称性に注目してください。これは、システムが「ロングポジション(買い)を取りやすく、ショートポジション(売り)には慎重」という性質を持つことを意味します。
暗号通貨市場は長期的には上昇傾向があるため、この非対称性は合理的です。また、ショートポジションは理論的には無限の損失リスクがあるため、より高い確信度を要求するのも理にかなっています。
8.2 ロングエントリーの詳細
条件の完全なリスト:
-
do_predict == 1
FreqAIが「この時点で予測する価値がある」と判断していることを確認します。データ品質が低い時期や、学習データが不足している時期は、このフラグが0になり、予測自体が行われません。 -
ターゲットスコア > 0.59453
予測されたターゲットスコアが買い閾値を超えていることを確認します。これは「市場環境が十分に有利である」という判断です。 -
volume > 0
出来高がゼロでないことを確認します。これは基本的なサニティチェックで、市場が実際に機能していることを確認します。
エントリーの実行:
これらすべての条件が同時に満たされた時、システムはロングポジションに入ります。「AND条件」であることが重要で、一つでも条件が満たされなければ、エントリーは行われません。
8.3 ショートエントリーの詳細
条件:
- do_predict == 1
- ターゲットスコア < 0.80573 (負の方向)
- volume > 0
ショートエントリーは、スコアが売り閾値(0.80573)を下回る「負の値」になった時に発生します。なぜ負の値になるのでしょうか。
ターゲットスコアの計算式を思い出してください:
T = S × R × V × R2 × V2
RやR2が-1の時、スコアは負になります。つまり、下降レジームや長期下降トレンドの時です。
8.4 Exit戦略の設計
Exit条件はエントリー条件の逆転として設計されています。これは「対称的な戦略」と呼ばれ、シンプルで論理的です。
ロングポジションのExit:
ターゲットスコア < 0.80573
つまり、スコアが売り閾値を下回ったら、ロングポジションを手仕舞います。
ショートポジションのExit:
ターゲットスコア > 0.59453
つまり、スコアが買い閾値を上回ったら、ショートポジションを手仕舞います。
Exit戦略の利点:
この設計により、システムは「市場環境が変わったら、すぐにポジションを閉じる」という原則を実装します。損失を限定し、利益を守るための重要な機能です。
また、この戦略は「常にどちらかのポジションを持つ」のではなく、「条件が悪い時はポジションを持たない」というアプローチを取ります。これは「休むも相場」という格言を実装したものです。
8.5 取引フローの完全なシナリオ
シナリオ: 上昇トレンドから調整局面への遷移
時刻0:00 - ポジションなし
- スコア: 0.45 (買い閾値以下)
- 判断: 取引条件が不十分。待機。
時刻1:00 - ロングエントリー
- スコア: 0.65 (買い閾値を超えた)
- 市場状況: 強い上昇トレンド、低ボラティリティ
- 判断: ロングポジション開始。
時刻2:00 - ポジション保持
- スコア: 0.72 (依然として高い)
- 判断: ポジション継続。
時刻3:00 - ポジション保持
- スコア: 0.68 (やや低下したが、まだ売り閾値以上)
- 判断: ポジション継続。
時刻4:00 - Exit実行
- スコア: 0.78 (売り閾値を下回った)
- 市場状況: レンジ相場に移行、ボラティリティ上昇
- 判断: ロングポジションを閉じる。
時刻5:00 - ポジションなし
- スコア: 0.55
- 判断: 新規エントリー条件が揃うまで待機。
第9章: 学習プロセスと最適化 - システムはどのように賢くなるか
9.1 機械学習の訓練プロセス
LSTMモデルは、大量の過去データから学習します。学習プロセスは以下のステップで進みます。
ステップ1: データ準備
過去の価格データから、すべての特徴量とターゲットスコアを計算します。例えば、1年分のデータなら約8,760時間分のデータポイントがあります。
ステップ2: 訓練・検証・テスト分割
データを3つに分割します:
- 訓練データ(70%): モデルの学習に使用
- 検証データ(15%): モデルの調整に使用
- テストデータ(15%): 最終性能の評価に使用
この分割により、「過学習」を検出できます。訓練データでの性能は良いが、テストデータでの性能が悪い場合、過学習が発生しています。
ステップ3: ミニバッチ学習
全データを一度に処理するのではなく、32サンプルずつ(バッチサイズ32)処理します。
なぜミニバッチなのでしょうか。全データを一度に使うと、メモリが足りなくなります。また、ミニバッチを使うことで、学習プロセスに適度な「ノイズ」が加わり、より良い汎化性能が得られることが知られています。
ステップ4: 誤差の計算
モデルの予測値と実際のターゲットスコアの差(誤差)を計算します。使用される損失関数はMSE(平均二乗誤差)です。
MSE = (1/n) × Σ(予測値 - 実際の値)²
二乗することで、大きな誤差により大きなペナルティを課します。
ステップ5: 逆伝播とパラメータ更新
誤差から、各ニューロンの重みをどう変更すべきか計算し、パラメータを更新します。学習率(0.003)は、「一度にどれだけ大きく変更するか」を制御します。
小さすぎると学習が遅く、大きすぎると不安定になります。0.003という値は、適度なバランスを取る値として選ばれています。
ステップ6: エポックの反復
このプロセスを10エポック(全データを10回通る)繰り返します。
各エポックで、モデルは徐々に賢くなっていきます。しかし、エポック数が多すぎると過学習のリスクが高まるため、10という適度な数が選ばれています。
9.2 ハイパーパラメータ最適化
モデルには多くの「ハイパーパラメータ」があります。これらは学習によって決まるのではなく、事前に設定する必要がある値です。
主要なハイパーパラメータ:
- LSTM層数: 3
- 隠れ層次元: 128
- ドロップアウト率: 0.4
- 学習率: 0.003
- バッチサイズ: 32
- ウィンドウサイズ: 5
これらの値を最適化するために、「ハイパースペース最適化」という手法が使われています。これは、様々な組み合わせを試し、最も良い結果を出す組み合わせを見つける自動探索プロセスです。
最適化プロセスの例:
- 初期値で学習し、性能を測定
- 性能が良くなる方向にパラメータを調整
- 再度学習し、性能を測定
- このプロセスを何百回も繰り返す
- 最も良い性能を出したパラメータの組み合わせを採用
この最適化により、閾値(0.59453と0.80573)や指標の重み(w0〜w4)も決定されました。
9.3 過学習との戦い
過学習は機械学習における最大の敵の一つです。このシステムは、複数の防御線を持っています。
防御線1: ドロップアウト
各層で40%のニューロンをランダムに無効化します。これにより、モデルは「特定のニューロンに依存しない」ように学習します。
比喩で言えば、サッカーチームが「キーマン一人がいないと機能しない」のではなく、「誰が欠けても他のメンバーがカバーできる」ように訓練するようなものです。
防御線2: バッチ正規化
各層の出力を正規化することで、学習を安定化させます。これにより、極端に大きな値や小さな値が学習を阻害することを防ぎます。
防御線3: 早期停止(Early Stopping)
検証データでの性能が悪化し始めたら、学習を停止します。これは「訓練データに特化しすぎる前に止める」という戦略です。
防御線4: データ分割
訓練、検証、テストの3分割により、モデルが「見たことのないデータ」での性能を適切に評価できます。
防御線5: 正則化
L2正則化により、パラメータが極端に大きくなることを防ぎます。これは「シンプルなモデルを好む」という原則の実装です。
第10章: パフォーマンス評価と課題
10.1 報告された性能指標
作者の報告によれば、このシステムは120日間のテストで90%以上の精度を達成しました。
精度の解釈:
「90%の精度」とは、システムが予測した方向(上昇か下降か)が90%の確率で正しかったという意味です。これは非常に高い数値に見えますが、いくつかの注意点があります。
精度だけでは十分ではありません。例えば、90%の確率で小さく勝ち、10%の確率で大きく負けるなら、トータルでは損失になる可能性があります。理想的には、精度に加えて、リスク・リターン比率や最大ドローダウンなどの指標も評価すべきです。
120日間は、機械学習モデルの評価としては比較的短期です。より長期間(例えば数年)のテストや、様々な市場環境(強気相場、弱気相場、レンジ相場)での性能評価が望ましいです。
10.2 システムの強み
適応性:
動的重み付けシステムにより、市場環境の変化に自動的に適応します。固定ルールのシステムが失敗する状況でも、機能し続ける可能性があります。
堅牢性:
多層の過学習防止策により、新しいデータに対しても安定した性能を維持できます。
透明性:
各コンポーネントの役割が明確で、なぜその判断をしたのか理解できます。ブラックボックスではありません。
拡張性:
新しい指標や戦略を追加することが容易な設計です。モジュラー構造により、一部を変更しても全体に影響しません。
10.3 既知の課題と制限
データ依存性:
過去のパターンが未来も続くという仮定に基づいています。市場構造が根本的に変わる「レジームシフト」には弱い可能性があります。
計算コスト:
LSTMモデルの訓練と推論には、それなりの計算リソースが必要です。M1 MaxやRTX3070といったハイエンドハードウェアが推奨されています。
プラットフォーム依存性:
Freqtradeのバージョンに敏感で、2024.02以降のバージョンで問題が発生することが報告されています。これは、プラットフォームの更新に追従する必要があることを意味します。
パラメータの複雑性:
多数の調整可能なパラメータがあり、最適化が複雑です。不適切な設定は性能を大きく悪化させる可能性があります。
限定的な検証期間:
120日間という比較的短期間のテストのみが報告されています。より長期的な、また様々な市場環境での検証が必要です。
10.4 改善の方向性
作者も認識している改善点がいくつかあります。
非類似度測定の導入:
現在のシステムは、すべてのトレーニングデータを等しく扱います。しかし、現在の市場状況に「似ている」過去のデータと「似ていない」データでは、参考にすべき程度が異なるはずです。
非類似度測定を導入することで、「今の市場に似た過去のデータからより多く学ぶ」ことができます。これはアンサンブル学習や重み付き学習として実装できます。
リスク管理の強化:
現在のシステムは、エントリーとExitの判断に焦点を当てていますが、ポジションサイズの動的調整は限定的です。ボラティリティや口座の残高に応じて、リスクを動的に調整するシステムを追加できます。
マルチタイムフレーム統合の改善:
現在も複数の時間軸のデータを使用していますが、それらの統合方法をさらに洗練させる余地があります。例えば、「アテンション機構」を使って、各時間軸の重要度を動的に調整できます。
説明可能性の向上:
LSTM は「なぜその予測をしたのか」を説明するのが難しいという問題があります。SHAP値やLIMEといった説明可能性手法を導入することで、各取引判断の根拠をより明確にできます。
第11章: 実運用への道 - 理論から実践へ
11.1 バックテストからペーパートレードへ
バックテストで良い結果が出ても、それだけで実運用を始めるのは危険です。段階的なアプローチが重要です。
ステップ1: 拡張バックテスト
120日間だけでなく、少なくとも1〜2年分のデータでテストします。様々な市場環境(強気相場、弱気相場、レンジ相場、高ボラティリティ期、低ボラティリティ期)を含むことが重要です。
ステップ2: ウォークフォワード分析
「学習期間」と「テスト期間」を時系列に沿って移動させながら評価します。例えば、6ヶ月学習→1ヶ月テスト→次の6ヶ月学習→次の1ヶ月テスト、という具合です。
これにより、モデルが「常に再訓練される」実運用環境をシミュレートできます。
ステップ3: ペーパートレーディング
実際の市場データを使い、リアルタイムで判断を下しますが、実際の資金は投入しません。バックテストでは見えなかった問題(レイテンシー、スリッページ、約定の問題など)を発見できます。
少なくとも1〜3ヶ月のペーパートレードで、システムが予想通りに動作することを確認すべきです。
ステップ4: 小規模実運用
最初は、損失しても問題ない小額から始めます。全資金の1〜5%程度が推奨されます。
11.2 継続的な監視とメンテナンス
システムを稼働させたら終わりではありません。継続的な監視が不可欠です。
日次チェック項目:
- システムが正常に稼働しているか(エラーログの確認)
- 予期しない大きな損失が発生していないか
- 取引頻度が異常ではないか(多すぎる、または全く取引しない)
週次チェック項目:
- 週間パフォーマンスの評価
- 市場環境の変化の確認
- 主要な指標(勝率、平均利益、最大ドローダウン)のトラッキング
月次チェック項目:
- モデルの再訓練が必要かどうかの判断
- パラメータの調整が必要かどうかの検討
- システム全体のレビューと改善点の特定
四半期チェック項目:
- 包括的なパフォーマンスレビュー
- ハイパーパラメータの最適化の再実行
- 新しい特徴量や戦略の追加の検討
11.3 リスク管理の実装
技術的に優れたシステムでも、適切なリスク管理なしでは破綻する可能性があります。
ポジションサイジング:
各取引で、口座の何%をリスクにさらすか決定します。一般的には、1取引あたり1〜2%が推奨されます。
例えば、口座に10,000ドルあり、1取引あたり2%のリスクを取るなら、200ドルの損失で止める必要があります。価格が1%動くごとに100ドル変動する場合、ポジションサイズは2単位(2%の価格変動で200ドルの損失)となります。
ストップロス:
システムのExitシグナルに加えて、固定的なストップロスも設定すべきです。例えば、エントリー価格から5%下落したら、シグナルに関係なく強制的に損切りします。
これは「システムの誤作動や予期せぬ市場の暴落」に対する保険です。
最大ドローダウン制限:
口座残高が一定割合(例えば20%)下落したら、自動的にすべてのポジションを閉じ、システムを停止します。
これは「壊滅的な損失」を防ぐための最後の防衛線です。
ポートフォリオ分散:
複数の通貨ペアや戦略を組み合わせることで、リスクを分散します。一つの戦略が失敗しても、全体への影響を限定できます。
11.4 法規制とコンプライアンス
自動取引システムの運用には、法的な側面も考慮が必要です。
税務:
暗号通貨取引の利益は、多くの国で課税対象です。すべての取引記録を保持し、適切に申告する必要があります。
規制遵守:
居住国の金融規制を確認し、遵守することが重要です。一部の国では、自動取引に特別な制限があります。
取引所の利用規約:
使用する取引所の利用規約を確認し、自動取引が許可されているか、レート制限などの制約がないか確認します。
第12章: まとめと今後の展望
12.1 システムの総合評価
freqAI-LSTMは、現代的な機械学習技術とトレーディングの実践知を巧みに統合したシステムです。
技術的完成度: 高
LSTMアーキテクチャ、動的重み付け、マーケットレジーム判定、ボラティリティ調整など、各コンポーネントが理論的根拠を持ち、適切に実装されています。
実用性: 中〜高
報告されたパフォーマンスは印象的ですが、より長期的な検証と実運用での実績が必要です。
拡張性: 高
モジュラー設計により、新しい指標や戦略の追加が容易です。オープンソースであることも、コミュニティによる改善を促進します。
学習価値: 極めて高
アルゴリズムトレーディングに興味がある開発者にとって、このプロジェクトは多くの実践的な技術と考え方を学べる優れた教材です。
12.2 機械学習トレーディングの未来
このプロジェクトは、機械学習トレーディングの現在と未来を示唆しています。
トレンド1: ディープラーニングの普及
LSTM、Transformer、注意機構など、より高度なディープラーニング技術が取引システムに統合されていくでしょう。
トレンド2: 説明可能なAI
「なぜその判断をしたのか」を説明できるシステムが重要になります。規制当局も説明可能性を要求する傾向があります。
トレンド3: マルチモーダル学習
価格データだけでなく、ニュース、ソーシャルメディア、オンチェーンデータなど、複数のデータソースを統合するシステムが増えるでしょう。
トレンド4: 強化学習
教師あり学習(LSTMなど)だけでなく、環境と相互作用しながら学習する強化学習の応用が進むでしょう。
トレンド5: フェデレーテッドラーニング
プライバシーを保ちながら、複数のトレーダーが協力して学習するフェデレーテッドラーニングが注目されるかもしれません。
12.3 学習者へのアドバイス
このシステムから学び、さらに発展させたい方へのアドバイスです。
基礎を固める:
機械学習の基礎(線形回帰、ニューラルネットワーク、過学習など)をしっかり理解することが重要です。高度なシステムは、基礎的な概念の上に構築されています。
小さく始める:
最初から複雑なシステムを作ろうとせず、シンプルな戦略から始めましょう。単純な移動平均クロスオーバー戦略でも、適切に実装し、バックテストし、改善するプロセスを学べます。
データの重要性を理解する:
「モデルはデータと同じくらい良い」という格言があります。データの品質、前処理、特徴量エンジニアリングに時間を投資しましょう。
過信しない:
どれだけ優れたシステムでも、100%確実ではありません。適切なリスク管理と継続的な監視が不可欠です。
コミュニティに参加する:
オープンソースプロジェクトに貢献し、他のトレーダーや開発者と交流することで、多くを学べます。
倫理的配慮:
アルゴリズムトレーディングは市場に影響を与えます。フラッシュクラッシュや市場操作などの問題にも意識的であるべきです。
12.4 最終的な考察
freqAI-LSTMプロジェクトは、技術と実践の橋渡しとなる優れた例です。理論的に洗練されているだけでなく、実際に動作するシステムとして実装されています。
しかし、最も重要なのは、これが「完成したシステム」ではなく、「継続的に改善される生きたプロジェクト」であるということです。市場は常に変化し、新しい技術も日々登場します。成功する取引システムは、この変化に適応し続けるものです。
このガイドを通じて、freqAI-LSTMシステムの深い理解を得られたことを願います。しかし、理解することと実装することは別です。実際に手を動かし、実験し、失敗から学ぶことで、真の習熟が得られます。
トレーディングの世界は、興奮と挑戦に満ちています。適切な知識、ツール、そして慎重さを持って取り組めば、技術者として、また潜在的にはトレーダーとしても、大きく成長できるでしょう。
付録A: 用語集
LSTM(Long Short-Term Memory): 時系列データを扱うための特殊なニューラルネットワーク。長期的な依存関係を学習できる。
ドロップアウト: 過学習を防ぐために、ランダムにニューロンを無効化する手法。
バッチ正規化: 各層の出力を正規化し、学習を安定化させる手法。
ハイパーパラメータ: 学習前に設定する必要があるパラメータ(層数、学習率など)。
過学習: モデルが訓練データに特化しすぎて、新しいデータに対する性能が低下する現象。
エポック: 全訓練データを1回通ること。
バックテスト: 過去のデータを使ってシステムの性能を評価すること。
ペーパートレード: 実際の資金を使わず、リアルタイムでシステムをテストすること。
ボラティリティ: 価格変動の激しさ。
レジーム: 市場の基本的な状態(上昇トレンド、下降トレンド、レンジ相場など)。
ロング: 買いポジション。価格上昇で利益を得る。
ショート: 売りポジション。価格下落で利益を得る。
スリッページ: 注文価格と実際の約定価格の差。
ドローダウン: 資産残高のピークからの下落幅。
付録B: 参考リソース
プロジェクト関連:
機械学習基礎:
- PyTorch公式チュートリアル
- Deep Learning Specialization (Coursera)
- "Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow" by Aurélien Géron
トレーディング基礎:
- "Technical Analysis of the Financial Markets" by John J. Murphy
- "Algorithmic Trading" by Ernest P. Chan
- "Advances in Financial Machine Learning" by Marcos López de Prado
コミュニティ:
- Freqtrade Discord
- QuantConnect フォーラム
- Stack Overflow (タグ: algorithmic-trading, machine-learning)
この完全ガイドが、freqAI-LSTMシステムの理解と、さらなる学習の出発点となることを願っています。