🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

练习


一、因子计算与数据对齐

问题背景

在计算月度P/B比率时,直接使用最新财务报表数据会导致未来数据偏差。已知上市公司季报在当季结束后第30天公布(例如Q1数据在4月30日公布),需在回测中严格避免数据窥探。

任务要求

修改以下代码,使每月调仓时使用的账面价值为当时可获取的最新季报数据。假设当前调仓日期为2020-05-31,此时可用数据应为4月30日公布的Q1数据;当调仓日为2020-08-31时,应使用7月31日公布的Q2数据。

依赖代码

# 原始问题代码
pb_ratios = {}
for t in tickers:
    stock = yf.Ticker(t)
    # 获取全部历史资产负债表
    balance_sheets = stock.balance_sheet.T  # 转置为时间索引在行的格式
    # 示例数据时间索引:['2023-03-31','2022-12-31','2022-09-30',...]

# 价格数据索引示例
price_dates = pd.date_range('2020-01-01','2023-05-01',freq='D')

二、交易成本与收益计算

问题场景

策略每月产生调仓信号后,需计算扣除交易成本的实际收益。已知:

计算要求

给定两个连续调仓日2023-03-312023-04-28的持仓数据,编写收益计算函数:

  1. 计算旧头寸在持有期间的收益
  1. 计算平仓旧头寸产生的交易成本
  1. 计算新头寸建仓时的交易成本
  1. 综合计算净收益

输入数据示例

# 持仓记录
prev_holdings = {
    'long': ['MSFT','AAPL'],
    'short': ['TSLA','NVDA'],
    'capital': 1_000_000  # 期初本金
}

current_prices = {
    '2023-03-31': {'MSFT':250, 'AAPL':160, 'TSLA':200, 'NVDA':300},
    '2023-04-28': {'MSFT':270, 'AAPL':155, 'TSLA':210, 'NVDA':280}
}