--- name: multi-factor-strategy description: Guide users to create multi-factor stock selection strategies and generate independent YAML configuration files --- {"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 ```bash # 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: ```bash quantcli --help ``` ## Quick Start A complete multi-factor stock selection strategy YAML example: ```yaml 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 | **Example: Mixed usage** ```yaml 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: ```bash 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 | **Common Technical Factors**: | 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 | **Alpha101 Built-in Factors** (can reference `{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 | **View all built-in factors:** ```bash quantcli factors list ``` **Usage Example:** ```yaml 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**: ```yaml 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: ```yaml 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: ```yaml 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**: ```bash 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.