本文へスキップ
作品一覧
開発中 · ペーパートレード中

Quant Lab

トス証券のOpen APIから取った米国株の日足でルールベースの戦略を動かし、バックテストで比べ、決まった時刻にペーパートレードします。実際の注文は出さず、判断の理由はすべてわかりやすい言葉で表示します。

ライトモードのQuant Labのホーム。ペーパートレードの資産を大きな数字とグラフで表示し、横にボットの一覧
なに
Webアプリ(インストール可)+ ワーカー · 自分用
開始
2026年
担当
ひとりで
動いている場所
Docker Compose · 非公開、Tailscale経由

概要

最終的な目標は自動売買です。最初のゴールはあえて小さく、実際の注文につながるコードをいっさい持たないまま、ボットが決まった時刻のペーパートレードを2週間、誰も触らずに続けることです。

株にくわしくない人でもわかるようにつくっています。戦略にはニックネームがあり(「のんびりトレンド乗り」は50/200のゴールデンクロス)、設定は選択肢で選び、判断は「上昇トレンドです。明日、市場が開いたらQQQを買います」のように表示されます。ホーム画面は大きな金額とそのグラフが中心で、ライト・ダークに対応し、スマホのホーム画面に追加できます。

自分用のツールなのでリンクはありません。トスの相場データは第三者に配布できないため、スクリーンショットは合成データです。

できること

日足データ
銘柄ごとに全期間をPostgreSQLに取り込み、欠損・重複・休場日・外れ値をチェックします。調整後株価が変わると取り直します。
バックテスト
よく知られた4つの戦略(ゴールデンクロス、Faberの200日線、Connors RSI(2)、タートルのブレイクアウト)を、ただ持ち続けた場合と年ごとに比べます。
毎日の模擬売買
米国市場の引けから2時間後、ワーカーが確定した足で判断し、翌営業日の始値で手数料とスリッページ込みで約定させます。
Telegram通知
シグナル、約定、警告、その日の資産、ただ持ち続けた場合と比べる週次レポート。ワーカーやサーバーが止まれば、外部のheartbeatが知らせます。
リアルタイム価格、レバレッジETF
米国市場の取引時間中は現在値と当日の未確定の足を表示します。判断は引けを待ったまま。2倍・3倍のETFにも、専用のチェックつきで対応しています。
どこでも読みやすく
ライトとダークのテーマ、韓国のアプリと同じく上昇は赤・下落は青、そしてホーム画面に追加できるスマホ表示。
戦略を試す画面。4つの戦略カード、銘柄、期間、ひとことでまとめた結果
ただ持ち続けた場合と比べたバックテストと、年ごとの結果
50日・200日平均線と売買した日がわかる価格チャートと取引一覧
ダークモードのホーム画面
スマホで見た価格チャートと取引

つくり

バックエンド
Python 3.14 · uv · FastAPI · Pydantic v2 · SQLAlchemy 2 · Alembic · pandas
フロントエンド
React · TypeScript · Vite · TanStack Query · Lightweight Charts
データ
PostgreSQL 17 · トス証券 Open API(読み取りのみ)· exchange_calendars
インフラ
Docker Compose · AWS Lightsail (Terraform) · Tailscale · GitHub Actions
品質
pytest · ruff · mypy (strict) · oxlint

メモ

バックテストとボットは同じ関数

判断と約定は、バックテストでもワーカーでも同じコードです。過去の営業日ごとに定期実行を再生したところ、実際のQQQのデータで約定までバックテストと一致しました。

今日の足はまだ終わっていない

トスは米国市場が開く前から当日の足を埋め始めます。引けから2時間たった足だけを使い、あとで値が変われば取り直します。

何度再起動しても注文は一度

ボット・銘柄・営業日のユニークキー、ボットごとに待機注文はひとつ、advisory lockでワーカーはひとつだけ。同じ足をもう一度評価しても何も起きません。

トレンドフォローで得るのは安定、リターンではない

2000年からのQQQでは、50/200クロスが年10.5%・最大下落−36%、ただ持ち続けると年8.1%・−83%。2010年からなら、リターンは持ち続けたほうが上です。

投資助言ではありません。注文はすべてシミュレーションで、スクリーンショットは合成データです。