開発の目的
一番の目的はシンプルで、USDJPYの値動きを予測し、将来的にはその予測をもとに 実際に売買して利益を出すこと。ただし、いきなり実弾(実際の資金)を投じるのは リスクが高すぎるので段階を踏んで進めることにする。
- まずは予測プログラムを作り精度を検証
- しばらくは売買せず様子見し、予測がどれくらい当たるのかを見極める
- ある程度精度に納得できてから実際の取引に進む
「作ったから即トレード」ではなく、「本当に使えるものなのか」を先に確認する、という当たり前ではあるが大事なステップを踏もうと思う。
プログラムの構成
開発したプログラムは、役割ごとに3つのスクリプトに分けている。
| スクリプト | 役割 |
|---|---|
| feature_engineering.py | 生の四本値(Open, High, Low, Close)データから、移動平均・RSI・MACD・ADXなどのテクニカル指標を計算し、機械学習で使える特徴量に変換する |
| train_model.py | 特徴量データを使ってモデルを学習させる(事前に1回、または定期的に実行) |
| predict.py | 学習済みモデルと直近の値動きデータから、実際に予測を出力する(運用時に都度実行) |
学習と予測を分離しているのがポイントで、学習は重い処理なので事前にまとめて済ませておき予測は直近データを渡すだけで済むように設計した。
予測する内容
単純に「上がるか下がるか」の2択だけではなく、以下の3点をセットで出すようにした。
- 向こう1週間の予想上限値・下限値(4時間足30本先までの値幅)
- 上昇・下降どちらが優勢か
- その優勢さの強度(0〜100のスコア)
方向を当てるだけの二値予測だと「際どく当たった」のか「はっきり優勢だった」のかが 区別できない。強度スコアを添えることで日々の値をながめながら 「今回は自信度が高そうだから注視する」「今回は弱いので参考程度に」といった 判断がしやすくなるはず。
現状の精度:正直、まだ発展途上
実際の20年分弱(2009年〜2026年)のUSDJPY 4時間足データで学習・検証してみたところ 現時点の結果はこちら。
| 指標 | モデル | 単純な比較対象(ベースライン) |
|---|---|---|
| 上限値予測の誤差 | 0.618% | 0.602% |
| 下限値予測の誤差 | 0.748% | 0.728% |
| 方向の的中率 | 47.1% | 53.8%(常に「上がる」と予想した場合) |
正直なところ、まだ単純な比較対象を上回れていない。「過去のOHLCデータだけから1週間先の方向を当てる」というタスクは学術的にも実務的にも精度50〜55%程度が現実的な上限とされることが多く、今回の結果もその範囲に収まっている。為替が効率的市場に近いことを考えると、ある意味では想定内の結果とも言える。
今後は検証期間を複数に分けて評価する(ウォークフォワード検証)、予測対象期間を短くしてみる、モデルの種類を変えてみる、といった改善を少しずつ試していく予定だ。
今後の運用方針
というわけで、しばらくは以下の方針で進めようと思う。
- 実際の売買はまだしない。まずは精度の見極めが最優先
- 週1回、このブログで予測値を公開する。予想上限値・下限値・優勢方向・強度スコアをセットで載せる
- 週末に、その週の結果を振り返って報告する。予測がどれだけ当たったか/外れたかを包み隠さず記録していく
派手な成果を最初から謳うのではなく、地道に精度を検証しながら、「本当に使えるレベルになったら」実際の取引に進むという慎重なスタンスで続けていこうと思う。
次回の更新では最初の予測値を公開する予定。
