実際のお金を使わずに、投資ルールを誠実に検証する
過去の市場データでシンプルな投資ルールを試す小さなツール。ずるができず、実際の注文も出せないように作りました。
ニーズ
過去のデータで投資戦略を試すと、見事な結果に見えがちです。口には出さなくても、当時は誰も知り得なかった情報を使っているからです。
アイデア
戦略ではなく、落とし穴を中心にラボを組み立てること。
つくったもの
- ある日の終値で計算したルールは、翌日の値動きにだけ適用します。同じ日に適用することはありません。
- ポジションを変えるたびに、手数料0.05%を計上します。
- すべてのルールを「最初に買って何もしない」と比較します。市場が20%上がる中で8%しか稼げない戦略は、価値を失っています。
- 2つの安全装置:取引先のアドレスはデモ環境に固定され、コードは読み取りしかできないため、注文を出す手段がありません。
成果
- 3Python のモジュール
- 453コードの行数
- 11検証ごとに計算する指標
- 0出せる注文の数(意図的な設計)
自動テストはまだなく、実際のデモ取引キーでの実行記録もお見せできるものはありません。投資を決めるためではなく、仕組みを理解するためのツールです。
画面で見る
学んだこと
過去のデータで十分な数の組み合わせを試せば、どれかひとつは必ずうまくいったように見えます。検証の限界を知ることも、成果の一部です。
技術的な詳細 技術スタック、アーキテクチャ、設計判断(技術職の方向け)
技術スタック
- Python
- Streamlit
- pandas
- NumPy
- requests
- Alpaca API(デモ取引)
仕組み
- D日の終値で計算したシグナルを、D+1日の値動きに適用。ポジション変更ごとに0.05%のコストを計上し、常に「買って持ち続ける」を基準に比較します。
- 検証できるルールは2つ(移動平均の交差と、直近高値の上抜け)で、米国株の1〜5年分の日足データを使います。
- 取引 API のベース URL は、Alpaca の paper-api デモ環境にコードで固定(変更不可)。クライアントは読み取り専用で注文機能を持たず、キーは環境変数からのみ読み込みます。
- データが取れないとき(キーなし、401/403、リクエスト上限)は、Streamlit の画面が既定値の数字ではなく理由を表示します。
- 既知の偏り:エントリー価格を翌日の始値ではなくシグナルが出た日の終値で計算しているため、夜間の値幅が含まれます。
まだ足りない点
- 自動テストはまだない
- 投資ツールではない