cuFOLIO 用于从股价数据构建、优化、回测、再平衡和分析股票投资组合,核心是 Mean-CVaR 优化与 NVIDIA GPU 加速。适用任务包括:按股票代码分配权重并控制下行 CVaR 风险、绘制或查看有效前沿、生成按风险厌恶程度排列的权重表、将优化组合与基准回测、按计划或漂移触发再平衡,并可在 S&P 500、S&P 100、道指 30 或用户自备价格数据上运行。
主要能力与用法:先加载 data/stock_data/sp500.csv(缺失时须经用户确认再运行 download_data("data/stock_data", datasets=["sp500"]) 下载公开市场数据);用 utils.calculate_returns(...) 计算 LOG 收益率;用 cvar_utils.generate_cvar_data(...) 配合 KDE 与 KDESettings(device="GPU") 生成情景;用 CvarParameters 定义 w_min、w_max、c_min、c_max、risk_aversion、confidence;用 cvar_optimizer.CVaR(returns_dict, cvar_params) 建模,并仅使用 cuOpt GPU 求解(SOLVER_SETTINGS = {"solver": cp.CUOPT, "verbose": False, "solver_method": "PDLP"})。求解前须确认 hasattr(cp, "CUOPT") 且 cp.CUOPT 在 cp.installed_solvers() 中;不得回退到 CLARABEL、SCS、ECOS 等 CPU 求解器。有效前沿调用 cvar_utils.create_efficient_frontier(..., ra_num=25);回测使用 backtest.portfolio_backtester(...).backtest_against_benchmarks(...),未给基准时默认等权;再平衡使用 rebalance.rebalance_portfolio(dataset_directory=<CSV路径>, ...),返回 (results_dataframe, re_optimize_dates, cumulative_portfolio_value)。
限制:需要 NVIDIA GPU 及 cuOpt、cuML;CPU 求解器被明确禁止,仅 CPU 环境无法产生有效求解结果,应报告缺失 GPU/cuOpt 运行时。默认价格数据为历史快照,可能不含当前成分股;首次下载依赖网络;用户 CSV 需为日期索引或首列为日期、其余列为数字股价,过滤后至少 60 行。约束冲突(如权重上限过低)或少于要求标的应说明并请求放宽。定价、费用等信息暂未提供。