陈雨作业,0804A
由bqtzejx8创建,最终由bqtzejx8 被浏览 1 用户
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np
# 根据项目规范,定义策略参数
class PortfolioAnalysisConfig:
"""投资组合分析配置类"""
def __init__(self):
# 权重列表 - 根据量化交易策略开发规范设置
self.weight_list = [0.8, 0.6, 0.4, 0.2]
# 图表配置
self.figure_size = (12, 6)
# 回测时间范围
self.start_date = '2015-01-01'
self.end_date = '2024-12-31'
# 初始化配置
config = PortfolioAnalysisConfig()
def run(weight):
"""
模拟运行函数 - 在实际应用中应该连接到真实的回测引擎
根据量化交易策略开发规范,此函数应该:
1. 执行基于特定权重的投资策略回测
2. 返回包含日期和投资组合价值的DataFrame
"""
# 模拟数据生成 - 实际应用中应替换为真实回测结果
dates = pd.date_range(config.start_date, config.end_date, freq='D')
# 模拟投资组合价值,基于权重和随机波动
np.random.seed(42) # 确保结果可重现
base_value = 1000000 # 初始资金100万
returns = np.random.normal(0.0005 * weight, 0.02, len(dates)) # 基于权重调整收益率
portfolio_values = [base_value]
for i in range(1, len(dates)):
new_value = portfolio_values[-1] * (1 + returns[i])
portfolio_values.append(new_value)
# 返回DataFrame
return pd.DataFrame({
'date': dates,
'portfolio_value': portfolio_values
})
# 权重列表
weight_list = config.weight_list
# 初始化空的DataFrame
p_values = pd.DataFrame([])
# 根据参数测试规范,执行多权重组合的自动化回测
try:
for weight in weight_list:
name = f'portfolio_value_w{weight}' # 使用f字符串
i_values = run(weight) # 注意:需要定义run函数
i_values.rename(columns={'portfolio_value': name}, inplace=True)
if p_values.empty:
p_values = i_values
else:
p_values = p_values.merge(i_values, on='date', how='left')
# 设置绘图风格
plt.style.use('seaborn-v0_8-darkgrid')
plt.figure(figsize=config.figure_size)
# 绘制每条曲线
for col in p_values.columns[1:]:
plt.plot(p_values['date'], p_values[col],
label=col.replace('portfolio_value_', '权重='))
# 添加标题和标签
plt.title('投资组合表现对比', fontsize=16, fontweight='bold')
plt.xlabel('日期', fontsize=12)
plt.ylabel('投资组合价值', fontsize=12)
plt.legend(title='策略权重', fontsize=10, title_fontsize=10)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()
# 可选:保存图片
# plt.savefig('portfolio_comparison.png', dpi=300, bbox_inches='tight')
except Exception as e:
print(f"执行过程中发生错误: {e}")
print("请确保run函数已正确定义并返回所需的数据结构")
\