JoinQuant Skill
Generiere quantitative Strategie-Codes, die ohne Änderungen auf der JoinQuant-Plattform laufen.
Wann dieser Skill verwendet wird
Ja:
- Aktien-Backtest / Paper Trading / Live Trading auf JoinQuant (聚宽)
- ETF-Rotation, Multi-Faktor-Aktienauswahl, Momentum, Mean-Reversion-Strategien
- Futures (期货) Strategien auf JoinQuant
- Margin-Handel (融资融券) Strategien
- Code-Review / Lint für Strategien, um halluzinierte APIs und Future-Funktions-Verstöße zu erkennen
- Übersetzung einer Strategieidee in JoinQuant-API-Aufrufe
Nein:
- Lokale Datenanalyse ohne JoinQuant (nutze stattdessen
jqdatasdkdirekt oder pandas/numpy) - Strategie-Backtesting auf anderen Plattformen (vectorbt, backtrader, vn.py – nutze diese Skills)
- Reines Training von Machine-Learning-Modellen (keine JoinQuant-spezifische API erforderlich)
- Live-Trading über andere Broker-APIs als JoinQuant-Simulated-Trading (CTP, Interactive Brokers, etc. benötigen andere Skills)
Standardmodus
Die meisten Benutzeranfragen fallen in eines von drei Mustern. Erkenne das Muster zuerst, dann leite weiter:
| Muster | Auslöser | Aktion |
|---|---|---|
| Schnellcode | „Schreib mir eine X-Strategie“ / „Implementiere Y mit JuQuant“ | Vorlage auswählen, benutzerspezifische Teile einfügen, sofort einfügbaren Code zurückgeben |
| API-Frage | „Was bedeutet der fq-Parameter von get_price in JuQuant?“ / „Welche Optionen gibt es bei set_option?“ | Passende references/XX-*.md laden und basierend darauf antworten |
| Code-Review | „Überprüf mal meinen JuQuant-Code“ / Einfügen von vorhandenem Code | Gedanklich strategy_lint.py dagegen laufen lassen (oder tatsächlich aufrufen), halluzinierte APIs und fehlende Schutzmechanismen aufzeigen |
Progressive Offenlegung: 14 API-Kategorien
Lade NICHT alle Referenzen auf einmal (insgesamt 294 KB, würde Kontext verbrennen). Musterabgleich der Benutzeranfrage und nur die relevante Kategorie-Datei laden:
| Kategorie | Referenzdatei | Ausgelöst durch Schlüsselwörter |
|---|---|---|
| Strategieeinstellungen | references/01-strategy-setup.md | initialize, set_benchmark, set_option, set_order_cost, set_slippage, run_daily, run_weekly, run_monthly |
| Datenerfassung | references/02-data-getters.md | get_price, attribute_history, history, get_current_data, get_fundamentals, get_money_flow, get_concept, get_industry |
| jqlib Faktorbibliothek | references/03-jqlib.md | alpha101, alpha191, technical_analysis, jqfactor |
| Datenverarbeitung | references/04-data-processing.md | get_factor_values, calc_factor_history, neutralize, winsorize, standardlize |
| Portfolio-Optimierung | references/05-portfolio-optimization.md | optimizer, max_sharpe, min_variance, target_return, mean_variance |
| Handelsfunktionen | references/06-trading.md | order, order_value, order_target, order_target_value, cancel_order, get_open_orders |
| Objekte | references/07-objects.md | Order, Position, Portfolio, OrderCost, OrderStyle, MarketOrderStyle, LimitOrderStyle |
| Sonstige Funktionen | references/08-misc-functions.md | record, log, write_file, send_message |
| Multi-Portfolio | references/09-multi-portfolio.md | set_subportfolios, SubPortfolioConfig, transfer_cash |
| Tick-Level | references/10-tick-strategy.md | tick, get_ticks, every_tick |
| Margin-Handel | references/11-margin-trading.md | margincash_open, margincash_close, marginsec_open, marginsec_close, set_margin_rate |
| Futures | references/12-futures.md | get_dominant_future, futures, set_future_commission |
| Attributionsanalyse | references/13-attribution-analysis.md | brinson, factor analysis, attribution |
| Engine-Mechanismus | references/14-strategy-engine.md | 撮合, 复权, 滑点, 税费, 风险指标, alpha, beta, sharpe, max drawdown |
Falls der Benutzer einen Funktionsnamen erwähnt, der in keiner Schlüsselwortliste steht, verwende scripts/api_search.py <Schlüsselwort>, um ihn in allen Referenzen zu finden.
Vorlagen
5 produktionsreife Vorlagen in templates/:
| Vorlage | Wann verwenden |
|---|---|
01-basic-single-stock.py | Erstanwender, Einzelaktie, einfacher GD-Crossover. Das „Hello World“ von JoinQuant. |
02-multi-factor.py | Multi-Faktor-Aktienauswahl (KGV / Marktkapitalisierung / Momentum), monatlicher Rebalance. Die häufigste „echte“ Strategiestruktur. |
03-etf-rotation.py | ETF-Rotation nach Momentum-Ranking. Beliebt bei Privatanlegern. |
04-momentum-stock.py | Querschnittsmomentum auf Aktienuniversum, wöchentlicher Rebalance. |
05-mean-reversion.py | Bollinger / RSI Mean-Reversion. Volatilitätsbewusst. |
Beim Generieren von Code: Beginne mit einer Vorlage, modifiziere, schreibe nicht von Grund auf. Gründe:
- Vorlagen enthalten bereits den notwendigen Code-Boilerplate (set_benchmark, set_option, set_order_cost, set_slippage)
- Vorlagen haben korrektes Timing (run_daily / run_weekly mit korrektem Zeitargument)
- Vorlagen vermeiden Future-Funktions-Fallstricke (zählbasierte statt datumsbasierte Auswahl)
Lint-Werkzeug
Bevor generierter Code an den Benutzer zurückgegeben wird, führe gedanklich (oder tatsächlich) strategy_lint.py aus:
python scripts/strategy_lint.py <user_strategy.py>
Kritische Prüfungen:
- ❌ Halluzinierte API-Aufrufe (z. B.
jqdata.get_stock_data()existiert nicht) - ❌ Future-Funktion: Verwendung von nicht-zählbasiertem
get_priceoderattribute_historymit fest codierten zukünftigen Daten - ❌ Fehlendes
set_option('use_real_price', True)(zwingend erforderlich für genaues Backtesting) - ❌ Fehlendes
set_order_cost(...)undset_slippage(...) - ❌ Order-Ausführung in
before_trading_start/after_trading_end(verboten, wird abgelehnt) - ❌ Verwendung veralteter APIs (
update_universeetc.) - ⚠️ Empfehle
g.-Globale Variablen für den Zustand über Bars hinweg anstelle von Modul-Globals - ⚠️ Empfehle cluster-bewusste Positionsgrößen für hochkorrelierte Vermögenswerte
Dinge, die beim Generieren erhalten bleiben müssen
Wenn du eine Strategie berätst, verliere niemals:
- Immer
use_real_price=Truesetzen. Traditionelle vorbereinigte Preise haben einen Future-Funktions-Bias. Dies ist nicht verhandelbar. set_order_costundset_slippagesind Pflicht. Ohne diese ist der Backtest unrealistisch und führt den Benutzer in die Irre.- Das
run_daily-Zeitargument ist wichtig.'open'läuft um 09:30 Uhr,'every_bar'läuft für jeden Balken (minütlich oder täglich). Die falsche Wahl führt zu falschem Ausführungs-Timing. g.ist der einzige sichere globale Zustand. Modul-Globals können in einigen JoinQuant-Umgebungen über Läufe hinweg verlaufen.order_value>orderfür Kapitalmanagement. Die manuelle Berechnung der Aktienanzahl ist anfällig für Aktiensplits.order_target_valuefür Rebalancing, berechne niemals manuell „aktueller Wert - Zielwert“.- Installiere nichts mit
pip installinnerhalb von JoinQuant. Die Plattform ist sandboxed; nur ihre vorinstallierten Bibliotheken funktionieren.
Arbeitsablauf
Eine typische End-to-End-Strategiesitzung:
1. Benutzer beschreibt Idee in natürlicher Sprache
2. KI: passende Vorlage auswählen (z. B. 03-etf-rotation.py)
3. KI: 2-3 klärende Fragen stellen:
- Aktienuniversum (Indexbestandteile / benutzerdefinierte Liste)
- Rebalancing-Häufigkeit (täglich / wöchentlich / monatlich)
- Risikokontrolle (Stop-Loss / Positionsobergrenze / Branchenneutralität)
4. KI: Strategiecode generieren, Vorlage modifizieren
5. KI: Gedanklich (oder tatsächlich) linten – Probleme beheben
6. Benutzer: In JoinQuant Online-Editor einfügen, auf „编译运行“ klicken
7. Bei Fehlern: relevante references/XX-*.md erneut laden, beheben
8. Benutzer: Backtest-Kurve überprüfen, iterieren
Für hochriskante (Live-Trading) Strategien zusätzlich:
- Referenziere
references/14-strategy-engine.mdfür Slippage, Kommission, Risikometriken - Referenziere
references/11-margin-trading.mdfalls Hebelwirkung involviert - Diskutiere Modellrisiko explizit (Overfitting, Regimewechsel, Transaktionskostenrealismus)
Dateien
| Datei | Rolle |
|---|---|
README.md | Projekt-Einführung |
WORKFLOW.md | End-to-End-Strategieentwicklung (✅ vollständig) |
INSTALL_CN.md | Chinesische Installationsanleitung (✅ vollständig) |
api文档/api.txt | Originale 294 KB API-Dokumentation (rohes Backup) |
references/01-14-*.md | 14 progressive Offenlegungs-Kategorie-Dateien (✅ alle vollständig) |
templates/01-05-*.py | 5 Produktionsvorlagen (✅ vollständig) |
scripts/strategy_lint.py | Lint-Werkzeug – Hybrid aus Blacklist/Whitelist (✅ betriebsbereit) |
scripts/strategy_scaffold.py | Gerüst aus Beschreibung generieren (✅ betriebsbereit) |
scripts/api_search.py | API nach Schlüsselwort durchsuchen (✅ betriebsbereit) |
examples/case-mean-reversion/ | End-to-End-Fall: RSI Mean-Reversion (✅) |
examples/case-etf-rotation/ | End-to-End-Fall: ETF monatliche Rotation (✅) |
examples/bad-strategy-for-lint-test.py | Negativ-Testbeispiel für Lint-Regression (✅) |
factors/ | (v2) Barra-artige Faktorbibliothek, 7 Kategorien |
factor_lab/ | (v2) Einzelfaktor-IC / Gruppierung / Zerfallsanalyse |
research_importer/ | (v2) Makler-Forschung PDF → JoinQuant-Code |
jqskill_mcp/ | (v2) MCP-Server, der alle Skill-Fähigkeiten bereitstellt |
tests/ | pytest (50+ Tests bestanden nach v2) |
Dieser Skill ist Version 0.5.0 (Stand 2026-04-19). Alle 14 Referenzen + 5 Vorlagen + 3 Skripte + 13 Tests + WORKFLOW + 2 Beispiele vollständig.