PLUS会员

陈雨作业重新修改的,0804

由bqtzejx8创建,最终由bqtzejx8 被浏览 3 用户

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函数已正确定义并返回所需的数据结构")

\

标签

数据分析投资组合
{link}