Quality Factor Strategy¶
Invest in high-quality, profitable companies.
Strategy Overview¶
Quality stocks have: - High profitability (ROE, ROA) - Stable earnings - Low leverage - Strong cash flows
The Signal¶
Text Only
signal quality:
// Profitability
roe = zscore(net_income / equity)
roa = zscore(net_income / assets)
margin = zscore(gross_margin)
// Stability
earnings_stability = -zscore(rolling_std(earnings, 8))
// Safety
leverage = -zscore(debt_to_equity)
// Combined
profitability = 0.4 * roe + 0.3 * roa + 0.3 * margin
safety = 0.5 * earnings_stability + 0.5 * leverage
emit 0.7 * profitability + 0.3 * safety
Complete Strategy¶
Text Only
data:
source = "prices_fundamentals.parquet"
format = parquet
signal quality:
// Profitability metrics
roe = zscore(net_income / equity)
roa = zscore(net_income / assets)
gross_margin_z = zscore(gross_margin)
// Stability
earnings_vol = rolling_std(earnings, 8)
stability = -zscore(earnings_vol)
// Safety
debt_equity = debt / equity
leverage = -zscore(debt_equity)
// Cash quality
accruals = (net_income - operating_cash_flow) / assets
cash_quality = -zscore(accruals)
// Combined quality score
profitability = 0.4 * roe + 0.3 * roa + 0.3 * gross_margin_z
safety = 0.5 * stability + 0.5 * leverage
quality_score = 0.5 * profitability + 0.3 * safety + 0.2 * cash_quality
emit neutralize(quality_score, by=sectors)
portfolio quality:
weights = rank(quality).long_short(
top = 0.2,
bottom = 0.2,
cap = 0.03
)
constraints:
gross_exposure = 2.0
net_exposure = 0.0
max_sector = 0.20
costs = tc.bps(10)
backtest rebal=21 from 2010-01-01 to 2024-12-31
Expected Results¶
Text Only
Backtest Results: quality
=========================
Period: 2010-01-01 to 2024-12-31
Returns:
Total Return: 145%
Annual Return: 6.5%
Annual Volatility: 8.5%
Sharpe Ratio: 0.76
Quality Metrics (Longs):
Avg ROE: 22%
Avg Debt/Equity: 0.4
Earnings Stability: High