JoinQuant Skill
修正なしでJoinQuantプラットフォーム上で実行できる定量化戦略コードを生成します。
このスキルを使用するタイミング
使用すべき場合:
- JoinQuant(聚宽)での株式バックテスト / ペーパートレード / 本番取引
- ETFローテーション、多因子銘柄選択、モメンタム、平均回帰戦略
- JoinQuantでの先物(期货)戦略
- 信用取引(融资融券)戦略
- 戦略コードのレビュー / リント:幻覚APIや未来関数違反を検出
- 戦略アイデアをJoinQuant API呼び出しに変換
使用すべきでない場合:
- JoinQuantを使用しないローカルデータ分析(
jqdatasdk、pandas、numpyを直接使用) - 他のプラットフォーム(vectorbt、backtrader、vn.py)での戦略バックテスト(代わりに該当するスキルを使用)
- 純粋な機械学習モデルのトレーニング(JoinQuant固有のAPIは不要)
- JoinQuant模擬取引以外のブローカーAPI(CTP、Interactive Brokersなど)での本番取引(別のスキルが必要)
デフォルトモード
ほとんどのユーザーリクエストは以下の3つのパターンのいずれかに該当します。まずパターンを検出し、それに応じてルーティングします:
| パターン | トリガー | アクション |
|---|---|---|
| クイックコード | "帮我写一个 X 策略" / "用聚宽实现 Y" | テンプレートを選択し、ユーザー固有の部分を埋め、貼り付け可能なコードを返す |
| API質問 | "聚宽里 get_price 的 fq 参数是什么意思" / "set_option 都有哪些选项" | 該当する references/XX-*.md をロードし、それに基づいて回答 |
| コードレビュー | "帮我审一下我这段聚宽代码" / 既存コードの貼り付け | メンタル(または実際の) strategy_lint.py を実行し、幻覚APIや不足しているセーフガードを指摘 |
プログレッシブディスクロージャー:14のAPIカテゴリ
すべてのリファレンスを一度にロードしないでください(合計294KBでコンテキストを消費します)。ユーザーリクエストをパターンマッチングし、関連するカテゴリファイルのみをロードします:
| カテゴリ | リファレンスファイル | トリガーキーワード |
|---|---|---|
| 戦略設定 | references/01-strategy-setup.md | initialize, set_benchmark, set_option, set_order_cost, set_slippage, run_daily, run_weekly, run_monthly |
| データ取得 | references/02-data-getters.md | get_price, attribute_history, history, get_current_data, get_fundamentals, get_money_flow, get_concept, get_industry |
| jqlib因子ライブラリ | references/03-jqlib.md | alpha101, alpha191, technical_analysis, jqfactor |
| データ処理 | references/04-data-processing.md | get_factor_values, calc_factor_history, neutralize, winsorize, standardlize |
| ポートフォリオ最適化 | references/05-portfolio-optimization.md | optimizer, max_sharpe, min_variance, target_return, mean_variance |
| 取引関数 | references/06-trading.md | order, order_value, order_target, order_target_value, cancel_order, get_open_orders |
| オブジェクト | references/07-objects.md | Order, Position, Portfolio, OrderCost, OrderStyle, MarketOrderStyle, LimitOrderStyle |
| その他の関数 | references/08-misc-functions.md | record, log, write_file, send_message |
| マルチポートフォリオ | references/09-multi-portfolio.md | set_subportfolios, SubPortfolioConfig, transfer_cash |
| Tickレベル | references/10-tick-strategy.md | tick, get_ticks, every_tick |
| 信用取引 | references/11-margin-trading.md | margincash_open, margincash_close, marginsec_open, marginsec_close, set_margin_rate |
| 先物 | references/12-futures.md | get_dominant_future, futures, set_future_commission |
| 帰属分析 | references/13-attribution-analysis.md | brinson, factor analysis, attribution |
| エンジン機構 | references/14-strategy-engine.md | 撮合, 复权, 滑点, 税费, 风险指标, alpha, beta, sharpe, max drawdown |
ユーザーがキーワードリストにない関数名を言及した場合は、scripts/api_search.py <keyword> を使用して全リファレンスから検索します。
テンプレート
templates/ ディレクトリにある5つの本番用テンプレート:
| テンプレート | 使用タイミング |
|---|---|
01-basic-single-stock.py | 初めてのユーザー、単一銘柄、シンプルな移動平均クロスオーバー。JoinQuantの"Hello World"。 |
02-multi-factor.py | 多因子銘柄選択(PER / 時価総額 / モメンタム)、月次リバランス。最も一般的な「本番」戦略構造。 |
03-etf-rotation.py | モメンタムランキングによるETFローテーション。個人投資家に人気。 |
04-momentum-stock.py | 銘柄プールに対するクロスセクショナルモメンタム、週次リバランス。 |
05-mean-reversion.py | ボリンジャー / RSIによる平均回帰。ボラティリティを考慮。 |
コードを生成する際は、ゼロから書かずにテンプレートをベースに修正してください。理由:
- テンプレートにはボイラープレート(set_benchmark、set_option、set_order_cost、set_slippage)が含まれている
- テンプレートは正しいタイミング(run_daily / run_weekly に適切なtime引数)を持っている
- テンプレートは未来関数の落とし穴を回避している(日付ベースではなくカウントベースのスライシング)
リントツール
生成したコードをユーザーに返す前に、メンタル(または実際に)strategy_lint.py を実行します:
python scripts/strategy_lint.py <user_strategy.py>
重要なチェック項目:
- ❌ 幻覚API呼び出し(例:
jqdata.get_stock_data()は存在しない) - ❌ 未来関数:非カウントの
get_priceまたはattribute_historyでハードコードされた未来日付を使用 - ❌
set_option('use_real_price', True)の欠落(正確なバックテストに必須) - ❌
set_order_cost(...)とset_slippage(...)の欠落 - ❌
before_trading_start/after_trading_end内での注文(禁止、拒否される) - ❌ 非推奨APIの使用(
update_universeなど) - ⚠️ 棒間での状態保持にはモジュールグローバル変数ではなく
g.グローバル変数を推奨 - ⚠️ 相関の高い資産にはクラスター認識によるサイジングを推奨
生成時に絶対に守るべきこと
戦略をアドバイスする際、以下の点は決して見落とさないでください:
- 必ず
use_real_price=Trueを設定する。従来のプリ調整済み価格には未来関数バイアスがあります。これは譲歩できません。 set_order_costとset_slippageは必須。これらがないとバックテストが非現実的になり、ユーザーを誤解させます。run_dailyの時間引数は重要。'open'は09:30に実行、'every_bar'は毎バー(分足または日足)に実行。間違った選択は誤った実行タイミングを引き起こします。g.だけが安全なグローバル状態。モジュールレベルのグローバル変数は、一部のJoinQuant環境で実行間でリークする可能性があります。- 資本管理には
order_value>order。株数を手動で計算すると、株式分割時にエラーが発生しやすくなります。 - リバランスには
order_target_valueを使用し、"現在値 - 目標値" を自分で計算しないでください。 - JoinQuant内で
pip installしないでください。プラットフォームはサンドボックス化されており、プリインストールされたライブラリのみが動作します。
ワークフロー
典型的なエンドツーエンドの戦略セッション:
1. ユーザーが自然言語でアイデアを説明
2. AI: 一致するテンプレートを選択(例:03-etf-rotation.py)
3. AI: 2〜3の明確化質問を行う:
- 対象銘柄プールの範囲(指数構成銘柄 / カスタムリスト)
- リバランス頻度(日 / 週 / 月)
- リスク管理(ストップロス / ポジション上限 / セクターニュートラル)
4. AI: テンプレートを修正して戦略コードを生成
5. AI: メンタル(または実際の)リントを実行 — 問題を修正
6. ユーザー: JoinQuantオンラインエディタに貼り付け、コンパイル実行
7. エラーが発生した場合: 該当する references/XX-*.md を再ロードし、修正
8. ユーザー: バックテスト曲線を確認、反復
高リスク(本番取引)戦略の場合、さらに以下を実施:
- スリッページ、手数料、リスク指標については
references/14-strategy-engine.mdを参照 - レバレッジが関係する場合は
references/11-margin-trading.mdを参照 - モデルリスク(オーバーフィッティング、レジームチェンジ、取引コストの現実性)について明示的に議論
ファイル
| ファイル | 役割 |
|---|---|
README.md | プロジェクト紹介 |
WORKFLOW.md | 戦略開発のエンドツーエンド(✅ 完了) |
INSTALL_CN.md | 中国語インストールガイド(✅ 完了) |
api文档/api.txt | オリジナル294KBのAPIドキュメント(Rawバックアップ) |
references/01-14-*.md | 14のプログレッシブディスクロージャーカテゴリファイル(✅ 全て完了) |
templates/01-05-*.py | 5つの本番用テンプレート(✅ 完了) |
scripts/strategy_lint.py | リントツール — ブラックリスト/ホワイトリストハイブリッド(✅ 運用可能) |
scripts/strategy_scaffold.py | 説明文からスキャフォールドを生成(✅ 運用可能) |
scripts/api_search.py | キーワードでAPIを検索(✅ 運用可能) |
examples/case-mean-reversion/ | エンドツーエンドケース: RSI平均回帰(✅) |
examples/case-etf-rotation/ | エンドツーエンドケース: ETF月次ローテーション(✅) |
examples/bad-strategy-for-lint-test.py | リント回帰テスト用のネガティブテストサンプル(✅) |
factors/ | (v2) Barraスタイル因子ライブラリ、7カテゴリ |
factor_lab/ | (v2) 単一因子IC / グルーピング / 減衰分析 |
research_importer/ | (v2) 証券会社レポートPDF → JoinQuantコード |
jqskill_mcp/ | (v2) 全スキル機能を公開するMCPサーバー |
tests/ | pytest(v2後50以上のテストがパス) |
このスキルのバージョンは 0.5.0(2026-04-19現在)。14のリファレンス + 5つのテンプレート + 3つのスクリプト + 13のテスト + WORKFLOW + 2つのサンプルが全て完了しています。