Guide users to create multi-factor stock selection strategies and generate independent YAML configuration files
Install
Documentation
{"homepage":"https://gitcode.com/datavoid/quantcli","user-invocable":true}
Multi-Factor Strategy Assistant
Guide you to create multi-factor stock selection strategies and generate independent YAML configuration files.
Install quantcli
Install from PyPI (recommended)
pip install quantcli
Or install from source
git clone https://gitcode.com/datavoid/quantcli.git
cd quantcli
pip install -e .
Verify installation:
quantcli --help
Quick Start
A complete multi-factor stock selection strategy YAML example:
name: Value-Growth Hybrid Strategy
version: 1.0.0
description: ROE + Momentum factor stock selection
screening:
fundamental_conditions: # Stage 1: Financial condition screening
- "roe > 0.10" # ROE > 10%
- "pe_ttm < 30" # P/E < 30
- "pe_ttm > 0" # Exclude losses
daily_conditions: # Stage 2: Price condition screening
- "close > ma10" # Above 10-day MA
limit: 100 # Keep at most 100 stocks
Factor configuration (supports two methods, factors at top level)
factors:
# Method 1: Inline factor definition
- name: ma10_deviation
expr: "(close - ma(close, 10)) / ma(close, 10)"
direction: negative
description: "10-day MA deviation"
# Method 2: External reference (reference factor files in factors/ directory, include .yaml suffix)
- factors/alpha_001.yaml
- factors/alpha_008.yaml
ranking:
weights: # Weight fusion
ma10_deviation: 0.20 # Inline factor
factors/alpha_001.yaml: 0.40 # External reference factor
factors/alpha_008.yaml: 0.40
normalize: zscore # Normalization method
output:
limit: 30 # Output top 30 stocks
columns: [symbol, name, score, roe, pe_ttm, close, ma10_deviation]
Factor Configuration Methods
Factor configuration supports two methods (can be mixed):| Method | Type | Example | Description |
|--------|------|---------|-------------|
| Inline | dict | {name: xxx, expr: "..."} | Define expression directly in YAML |
| External | str | factors/alpha_001.yaml | Load factor file from factors/ directory |
factors:
# Inline: Custom factor
- name: custom_momentum
expr: "close / delay(close, 20) - 1"
direction: positive
# External: Alpha101 factor library (include .yaml suffix)
- factors/alpha_001.yaml
- factors/alpha_005.yaml
- factors/alpha_009.yaml
ranking:
weights:
custom_momentum: 0.3
factors/alpha_001.yaml: 0.3
factors/alpha_005.yaml: 0.2
factors/alpha_009.yaml: 0.2
Run strategy:
quantcli filter run -f your_strategy.yaml
Invocation
/multi-factor-strategy
Available Expression Functions
Data Processing Functions
| Function | Usage | Description |
|----------|-------|-------------|
| delay | delay(x, n) | Lag n periods |
| ma | ma(x, n) | Simple moving average |
| ema | ema(x, n) | Exponential moving average |
| rolling_sum | rolling_sum(x, n) | Rolling sum |
| rolling_std | rolling_std(x, n) | Rolling standard deviation |
Technical Indicator Functions
| Function | Usage | Description |
|----------|-------|-------------|
| rsi | rsi(x, n=14) | Relative strength index |
| correlation | correlation(x, y, n) | Correlation coefficient |
| cross_up | cross_up(a, b) | Golden cross (a crosses above b) |
| cross_down | cross_down(a, b) | Death cross (a crosses below b) |
Ranking & Normalization Functions
| Function | Usage | Description |
|----------|-------|-------------|
| rank | rank(x) | Cross-sectional ranking (0-1) |
| zscore | zscore(x) | Standardization |
| sign | sign(x) | Sign function |
| clamp | clamp(x, min, max) | Clipping function |
Conditional Functions
| Function | Usage | Description |
|----------|-------|-------------|
| where | where(cond, t, f) | Conditional selection |
| if | if(cond, t, f) | Conditional selection (alias) |
Base Fields
| Field | Description |
|-------|-------------|
| open, high, low, close | OHLC prices |
| volume | Trading volume |
| pe, pb | P/E ratio, P/B ratio |
| roe | Return on equity |
| netprofitmargin | Net profit margin |
Guided Workflow
Step 1: Strategy Goal定位
I will first understand your strategy needs:
- -Strategy Type: Value, Growth, Momentum, Volatility, Hybrid
- -Selection Count: Concentrated(10-30), Medium(50-100), Diversified(200+)
- -Holding Period: Intraday, Short-term(week), Medium-term(month), Long-term(quarter)
Step 2: Factor Selection
Based on your strategy goals, recommend suitable factor combinations:
Common Fundamental Factors:| Factor | Expression | Direction | Description |
|--------|------------|-----------|-------------|
| roe | roe | positive | Return on equity |
| pe | pe | negative | Lower P/E is better |
| pb | pb | negative | Price-to-book ratio |
| netprofitmargin | netprofitmargin | positive | Net profit margin |
| revenue_growth | revenue_yoy | positive | Revenue growth rate |
| Factor | Expression | Direction | Description |
|--------|------------|-----------|-------------|
| momentum | (close/delay(close,20))-1 | positive | N-day momentum |
| ma_deviation | (close-ma(close,10))/ma(close,10) | negative | MA deviation |
| ma_slope | (ma(close,10)-delay(ma(close,10),5))/delay(ma(close,10),5) | positive | MA slope |
| volume_ratio | volume/ma(volume,5) | negative | Volume ratio |
{baseDir}/alpha101/alpha_XXX):
QuantCLI includes 40 WorldQuant Alpha101 factors that can be directly referenced:
| Factor | Category | Description |
|--------|----------|-------------|
| alpha101/alpha_001 | Reversal | 20-day new high then decline |
| alpha101/alpha_002 | Reversal | Down volume bottom |
| alpha101/alpha_003 | Volatility | Low volatility stability |
| alpha101/alpha_004 | Capital Flow | Net capital inflow |
| alpha101/alpha_005 | Trend | Uptrend |
| alpha101/alpha_008 | Capital Flow | Capital inflow |
| alpha101/alpha_009 | Momentum | Long-term momentum |
| alpha101/alpha_010 | Reversal | MA deviation reversal |
| alpha101/alpha_011 ~ alpha_020 | Extended | Volatility, momentum, price-volume factors |
| alpha101/alpha_021 ~ alpha_030 | Extended | Price-volume, trend, strength factors |
| alpha101/alpha_031 ~ alpha_040 | Extended | Position, volatility, capital factors |
quantcli factors list
Usage Example:
factors:
- alpha101/alpha_001 # Reversal factor
- alpha101/alpha_008 # Capital inflow
- alpha101/alpha_029 # 5-day momentum
ranking:
weights:
alpha101/alpha_001: 0.4
alpha101/alpha_008: 0.3
alpha101/alpha_029: 0.3
Screening Conditions Example:
screening:
conditions:
- "roe > 0.10" # ROE > 10%
- "netprofitmargin > 0.05" # Net profit margin > 5%
Step 3: Weight Configuration
Allocate weights based on factor importance, 0 means only for screening, not scoring:
ranking:
weights:
# Fundamental factors
roe: 0.30
pe: 0.20
# Technical factors
ma_deviation: 0.30
momentum: 0.20
normalize: zscore
Step 4: Generate Strategy File
I will generate a complete strategy YAML file for you:
name: Your Strategy Name
version: 1.0.0
description: Strategy description
Stage 1: Fundamental screening
screening:
conditions:
- "roe > 0.10"
- "pe < 30"
limit: 200
Stage 2: Technical ranking
ranking:
weights:
roe: 0.30
pe: 0.20
ma_deviation: 0.30
momentum: 0.20
normalize: zscore
output:
columns: [symbol, score, rank, roe, pe, momentum]
limit: 30
Step 5: Run & Evaluate
Run strategy:quantcli filter run -f your_strategy.yaml --top 30
Evaluation points:
1. Selected stock count: Check if screening conditions are reasonable
2. Factor distribution: Distribution of factor scores
3. Industry diversification: Avoid over-concentration
FAQ
Q: How to allocate factor weights?A: Core factors 0.3-0.4, auxiliary factors 0.1-0.2, ensure weights sum close to 1
Q: Screening conditions too strict resulting in empty results?A: Gradually relax conditions, first see how many stocks meet each condition
Q: What expression syntax is supported?A: Supports 40+ built-in functions: ma(), ema(), delay(), rolling_sum(), rsi(), rank(), zscore(), etc.
Launch an agent with multi-factor-strategy on Termo.