/ / /
第55讲:案例·传统价值因子 (Case Study: Traditional Value Factor)
🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

第55讲:案例·传统价值因子 (Case Study: Traditional Value Factor)

💡

查看全集:💎Quantopia量化分析56讲

策略概述

130/30策略通过130%多头仓位 + 30%空头仓位实现市场中性,既能保留传统多头策略的优点,又能通过做空机制捕捉下跌机会。本教程将基于Andrew Lo和Pankaj Patel提出的四大价值因子构建选股策略。


核心价值因子解析

股息率(Dividend Yield)

import yfinance as yf
stock = yf.Ticker("AAPL")
div_yield = stock.info.get('trailingAnnualDividendYield', 0)

市净率(Price-to-Book Ratio)

pb_ratio = -stock.info.get('priceToBook', 0)  # 取负实现价值反转

市销率(Price-to-Sales Ratio)

ps_ratio = -stock.info.get('priceToSalesTrailing12Months', 0)

市现率(Price-to-Cash Flow)

pcf_ratio = -stock.info.get('operatingCashflow', 0)  # 需根据实际数据调整

数据获取与处理

使用yfinance获取多只股票数据:

import pandas as pd

tickers = ['AAPL', 'MSFT', 'GOOGL']
factor_data = []

for ticker in tickers:
    stock = yf.Ticker(ticker)
    info = stock.info
    factor_data.append({
        'Ticker': ticker,
        'Dividend Yield': info.get('trailingAnnualDividendYield', 0),
        'PB Ratio': -info.get('priceToBook', 0),
        'PS Ratio': -info.get('priceToSalesTrailing12Months', 0),
        'PCF Ratio': -info.get('operatingCashflow', 0)
    })

df = pd.DataFrame(factor_data).set_index('Ticker')

数据标准化处理

标准化步骤

  1. 计算基准指数指标:选取市值最大的500只股票作为"虚拟标普500"
  1. Z-Score标准化
Z=XμσZ = \frac{X - \mu}{\sigma}

其中:

该公式将数据转换为均值为0、标准差为1的标准正态分布

  1. 极值处理:将超出[-10,10]的值截断
def standardize(series):
    mu = series.mean()
    sigma = series.std()
    z_scores = (series - mu) / sigma
    return z_scores.clip(-10, 10)

# 对各因子分别标准化
df_standardized = df.apply(standardize)

综合评分与选股

计算综合得分

df['Composite Score'] = df_standardized.mean(axis=1)

构建投资组合

long_candidates = df.nlargest(30, 'Composite Score').index.tolist()
short_candidates = df.nsmallest(6, 'Composite Score').index.tolist()

策略回测要点

权重分配示例

组合类型股票数量单股权重总仓位
多头265%130%
空头65%30%

再平衡机制


小练习

  1. 使用yfinance获取3只金融股的市净率,比较它们的价值吸引力
  1. 尝试对某行业的PS Ratio进行标准化处理,找出最具吸引力的股票
  1. 思考:如果加入动量因子,应该如何调整现有评分体系?
# 练习1示例代码
financial_stocks = ['JPM', 'BAC', 'C']
for ticker in financial_stocks:
    stock = yf.Ticker(ticker)
    print(f"{ticker} P/B Ratio: {stock.info.get('priceToBook')}")

关键点总结

  1. 价值投资的核心是识别市场价格与内在价值的偏离
  1. 多因子组合能有效分散单一因子的失效风险
  1. 标准化处理确保不同量纲因子可比
  1. 130/30结构在控制风险的同时提升收益弹性
注意:实际应用中需考虑交易成本、滑点等现实约束。建议在Paper Trading环境中充分测试策略后再实盘操作。