PolarsとDuckDBで始めるパーソナルクォンツ分析ターミナル
コードで株価を分析しようとしたことがある開発者なら、きっと同じ経験をしているはずです。まずJupyter Notebookを開き、Pandasをインポートして、どこかの無料APIから過去のローソク足データを取得します。数日のうちにノートブックは数百もの読みにくいセルで溢れ、テクニカル指標の計算は何分も冻结するようになります。ちゃんとしたインターフェースはなく、Matplotlibのチャートを睨むしかない──そんな状況です。
最近、GitHubでshy31氏のリポジトリ「tick-stock-panel」を見つけました。クォンツ分析、バックテスト、株券監視のための完全なオープンソースプラットフォームを、1つのDockerコンテナ内でローカルに実行できるものです。プロジェクトは中国A股市場向けに作られていますが、アーキテクチャの考え方や技術スタックは、どの資産を取引する場合でも別途レビューする価値があります。
内部構造と動作原理
自作スクリーニングツールの最大の問題はパフォーマンスです。数千ものティッカーをPandasでループ処理しながら移動平均線、MACD、RSI、ボリンジャーバンドを計算すると、マシンはすぐに悲鳴を上げます。
tick-stock-panelでは、この問題がモダンなデータスタックで解決されています:
- Polarsがパラレル処理でテクニカル指標の計算と市場全体のスクリーニングを数秒で実行します。
- Enrichedテーブル用のローカルストレージ形式としてParquetを使用しています。
- DuckDBがヘビーデューティなデータベースを起動せずに、ディスク上のParquetに対して高速な分析クエリを実行します。
- 隔離されたバックテストモジュールでvectorbtを使用しています。
- FastAPIとsse-starletteがServer-Sent Eventsでデータを提供し、重い計算の進捗をストリーミングします。
- React 18とLightweight Charts、EChartsライブラリでクリーンなダッシュボードを構築しています。
アーキテクチャはコンパクトです。バックエンドとバンドルされたフロントエンドは2ステージのDockerfileにパッケージングされています。外部のPostgreSQLやRedisは不要で、データベース全体をローカルに保持します。
プラットフォームの主な機能
開発者は機能を4つの主要なブロックに分割しています:フィルタリング、仮説検証、市場追跡、個別の資産分析です。
| Dashboard | Strategy Screener |
![]() |
![]() |
| Backtesting | Factor Search |
![]() |
![]() |
スクリーニングと組み込み戦略
システムには18の готовых 株券選択戦略が含まれています。フィルタリングの仕組みはPolars上で動作します:市場が閉じた後、パイプラインがEnrichedデータセットを計算し、ユーザーのクエリがティッカーテーブル全体の条件をチェックします。標準的な指標出来高、ローソク足パターンを組み合わせたり、独自のシグナルを記述したりできます。
バックテストとアルファファクター探索
テストは2つのモードに分かれています:
- IC・IR指標計算、クォンタイル収益ロングショートスプレッドによる個別ファクター評価。取引システムを構築する前にノイズをフィルタリングするのに役立ちます。
- T+1決済ルール、スリッページ、ブローーカー手数料、損切りを含む完全な戦略バックテスト。
ファクター探索モジュールは興味深い実装です。システムはトレーニングセット上でランクの組み合わせを検索し、相関のある指標をフィルタリングし、アウトオブサンプルデータで結果を検証します。ただし、発見されたルールは盲目的に適用されません。候補は下書きに保存され、稼働プールに追加される前に手動で確認する必要があります。
| Monitoring Center | Limit Ladder |
![]() |
![]() |
| Sector Analysis | Watchlists |
![]() |
![]() |
リアルタイム監視と異常値検出
ダッシュボードにはライブ監視モジュールが含まれています。価格水準、指標、平均からの乖離に基づいてトリガールールを設定できます。イベントが発生すると、パネルはWebhookを送信し、ブラウザ通知を表示し、Web Speech APIを通じてティッカーを音声で読み上げます。
言語モデルの統合
プロジェクトにはOpenAI互換インターフェース経由でLLM統合が追加されました。Ollama、DeepSeek、またはクローズドAPIを接続できます。モデルは2つの実用的な役割を果たします:テキスト説明からスクリーニングルールコードを生成することと、市場閉店後のセクター別騰落分析を含む夕方のレポートを作成することです。
デプロイと実行方法
最も 빠르게プロジェクトを起動する方法はDocker Composeです:
cp .env.example .env
docker compose up --build
ビルド後、パネルは http://localhost:3018 で開きます。
ローカル開発には、Python 3.11+、Node.js 20、パッケージマネージャー uv と pnpm が必要です:
cp .env.example .env
./dev.sh
スクリプトは環境をチェックし、 uv でバックエンドの依存関係を、 pnpm でフロントエンドの依存関係をインストールし、FastAPIをポート30番で、Vite開発サーバーを30番で起動します。
設定は .env ファイルで行います:
TICKFLOW_API_KEY= # Ключ источника данных TickFlow (можно оставить пустым для базового режима)
AI_API_KEY= # Ключ LLM-провайдера для генерации стратегий
PORT=3018 # Порт приложения
自有データソースの接続
基本プロジェクトは中国のTickFlowサービスSDK用に設定されていますが、開発者はデータレイヤーをプラグイン可能にしました。リポジトリにはNode.jsプラグイン stock-sdk とYAMLによる宣言的なソース記述の例が含まれています。
MOEX、コイン取引所、Yahoo Financeにパネルを適応させたい場合は、日次バー.Providerインターフェースを実装し、Parquet形式でそれらを供給するだけです。他のすべての仕組み──移動平均線の計算、バックテストエンジン、Lightweight Chartsのグラフ、アラートシステム──は変更なしで動作し続けます。
試してみる価値はあるか
tick-stock-panelプロジェクトは、特にアーキテクチャのクリーンさで注目に値します。著者はヘビーデューティなリレーショナルデータベースをPolars + DuckDB + Parquetに置き換え。これにより普通のノートPCでもシステムが軽快に動作します。
中国市場で取引をしているなら、プロジェクトは箱から出してすぐに使える рабочийツールとして使用できます。他の取引所に興味がある場合は、リポジトリのコードベースが自有の分析ターミナルを構築するための優れたテンプレートになるでしょう。
関連プロジェクト







