Guide users to create multi-factor stock selection strategies and generate independent YAML configuration files
Scanned 9/7/2026
Install to Claude Code
npx -y skills add Demerzels-lab/elsamultiskillagent --skill multi-factor-strategy --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Multi Factor Strategy?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/demerzels-lab-multi-factor-strategy)More formats (shields.io, HTML) on the badges page.
---
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.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!