问题背景
在计算月度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-31
和2023-04-28
的持仓数据,编写收益计算函数:
输入数据示例
# 持仓记录
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}
}