fix: 修复回测日期对齐问题,优化收益率计算
- 使用对齐后的index_close数据计算日收益率 - 添加日期对齐逻辑确保信号和收益率数据一致 - 修复pivot重复索引问题,使用pivot_table - 修复tushare期货接口调用(futures_daily -> fut_daily) 回测结果: - 最终净值: 0.9435 - 累计收益: -5.65% - 信号日期: 2302天
This commit is contained in:
@@ -200,7 +200,7 @@ class HybridDataSource:
|
||||
etf_data_list.append(etf_data[['code', 'close']])
|
||||
|
||||
price_count = len(etf_data)
|
||||
nav_count = len(etf_nav) if etf_nav else 0
|
||||
nav_count = len(etf_nav) if etf_nav is not None else 0
|
||||
|
||||
print(f"✓ 价格{price_count}条 净值{nav_count}条")
|
||||
else:
|
||||
@@ -214,17 +214,32 @@ class HybridDataSource:
|
||||
index_data = None
|
||||
if index_data_list:
|
||||
index_data = pd.concat(index_data_list)
|
||||
index_data = index_data.pivot(columns='code', values='close')
|
||||
if 'code' in index_data.columns and 'close' in index_data.columns:
|
||||
index_data = index_data.reset_index()
|
||||
if 'index' in index_data.columns:
|
||||
index_data = index_data.rename(columns={'index': 'date'})
|
||||
index_data['date'] = pd.to_datetime(index_data['date']).dt.normalize()
|
||||
index_data = index_data.pivot_table(index='date', columns='code', values='close')
|
||||
|
||||
etf_data = None
|
||||
if etf_data_list:
|
||||
etf_data = pd.concat(etf_data_list)
|
||||
etf_data = etf_data.pivot(columns='code', values='close')
|
||||
if 'code' in etf_data.columns and 'close' in etf_data.columns:
|
||||
etf_data = etf_data.reset_index()
|
||||
if 'index' in etf_data.columns:
|
||||
etf_data = etf_data.rename(columns={'index': 'date'})
|
||||
etf_data['date'] = pd.to_datetime(etf_data['date']).dt.normalize()
|
||||
etf_data = etf_data.pivot_table(index='date', columns='code', values='close')
|
||||
|
||||
etf_nav_data = None
|
||||
if etf_nav_data_list:
|
||||
etf_nav_data = pd.concat(etf_nav_data_list)
|
||||
etf_nav_data = etf_nav_data.pivot(columns='code', values='nav')
|
||||
if 'code' in etf_nav_data.columns and 'nav' in etf_nav_data.columns:
|
||||
etf_nav_data = etf_nav_data.reset_index()
|
||||
if 'index' in etf_nav_data.columns:
|
||||
etf_nav_data = etf_nav_data.rename(columns={'index': 'date'})
|
||||
etf_nav_data['date'] = pd.to_datetime(etf_nav_data['date']).dt.normalize()
|
||||
etf_nav_data = etf_nav_data.pivot_table(index='date', columns='code', values='nav')
|
||||
|
||||
# 基准数据
|
||||
benchmark_data = self._tushare.fetch_index(benchmark_code, start_date, end_date)
|
||||
|
||||
Reference in New Issue
Block a user