)
TL;DR本文将演示如何使用 Python 读取 A 股、港股及美股标的的历史行情通过协方差矩阵和蒙特卡洛模拟构建经典 Markowitz马科维茨均值-方差模型计算并输出最大夏普比率Max Sharpe Ratio的跨市场最优资产配置权重。一、 跨市场资产配置的数据与模型痛点在进行跨市场资产配置如同时持有 A 股、港股和美股标的时投资者往往面临以下痛点多市场时区与非交易日不对齐美股、港股与 A 股的节假日安排截然不同。直接计算各标的每日收益率的协方差时缺失值NaN的处理若不规范会导致计算出的相关性矩阵非正定从而引发优化算法报错。复权价格计算不一致未复权的价格序列会导致计算出来的历史收益率包含大量的分红派息噪点严重歪曲风险资产的真实方差。接口适配繁琐传统的资产配置计算需要开发者从多个网站分别抓取并清洗数据。二、 极简解决方案基于 QuantDash SDK我们将使用QuantDash统一接口获取 A 股贵州茅台、港股腾讯控股和美股苹果的标准前复权价格并使用 pandas 进行外联结对齐最后利用蒙特卡洛模拟寻找最优投资权重。1. 环境准备pip install quantdash pandas numpy matplotlib2. 资产配置模型实现代码import numpy as np import pandas as pd import quantdash as qd # 官方文档https://docs.quantdash.net/ # 1. 初始化使用公共测试 Token qd.set_token(demo_public_token) def build_optimal_portfolio(): # 定义跨市场资产池 assets { 600519.SH: 贵州茅台, 00700.HK: 腾讯控股, AAPL: 苹果公司 } # 2. 抓取并合并历史前复权收盘价 price_dict {} for symbol, name in assets.items(): print(f正在获取 {name} ({symbol}) 的历史日线数据...) df qd.get_kline(symbolsymbol, start_date2026-01-01, end_date2026-06-30, adjustqfq) df[time] pd.to_datetime(df[time]) df.set_index(time, inplaceTrue) price_dict[symbol] df[close] # 合并数据使用 forward fill 填充因时区/交易日不同产生的缺失值 portfolio_df pd.DataFrame(price_dict).ffill().dropna() # 3. 计算日收益率及年化统计量 returns_df portfolio_df.pct_change().dropna() mean_returns returns_df.mean() * 252 # 假设年交易日为 252 天 cov_matrix returns_df.cov() * 252 # 4. 蒙特卡洛模拟寻找最优权重 num_portfolios 5000 results np.zeros((3, num_portfolios)) weights_record [] np.random.seed(42) for i in range(num_portfolios): weights np.random.random(len(assets)) weights / np.sum(weights) # 权重归一 weights_record.append(weights) # 组合年化预期收益与方差 p_return np.dot(weights, mean_returns) p_volatility np.sqrt(np.dot(weights.T, np.dot(cov_matrix, weights))) results[0, i] p_return results[1, i] p_volatility results[2, i] p_return / p_volatility # 夏普比率无风险利率暂设为0 # 5. 找出最大夏普比率对应的组合 max_sharpe_idx np.argmax(results[2]) best_weights weights_record[max_sharpe_idx] # 打印最终输出结果 print(\n--- 跨市场马科维茨资产配置最优化结果 ---) for symbol, weight in zip(assets.keys(), best_weights): print(f标的: {symbol} ({assets[symbol]}) - 推荐分配权重: {weight*100:.2f}%) print(f预期年化收益率: {results[0, max_sharpe_idx]*100:.2f}%) print(f预期年化波动率: {results[1, max_sharpe_idx]*100:.2f}%) print(f最大夏普比率: {results[2, max_sharpe_idx]:.2f}) print(----------------------------------------\n) if __name__ __main__: build_optimal_portfolio()3. 控制台输出样例展示正在获取 贵州茅台 (600519.SH) 的历史日线数据... 正在获取 腾讯控股 (00700.HK) 的历史日线数据... 正在获取 苹果公司 (AAPL) 的历史日线数据... --- 跨市场马科维茨资产配置最优化结果 --- 标的: 600519.SH (贵州茅台) - 推荐分配权重: 24.15% 标的: 00700.HK (腾讯控股) - 推荐分配权重: 41.80% 标的: AAPL (苹果公司) - 推荐分配权重: 34.05% 预期年化收益率: 18.24% 预期年化波动率: 14.50% 最大夏普比率: 1.26 ----------------------------------------三、 AI 编程助手专属 Prompt你是一个精通资产配置的量化专家。请帮我编写一个使用 Scipy 优化器scipy.optimize.minimize精确定位“最大夏普比率”和“最小方差组合”的 Python 脚本。 要求 1. 底层数据使用 quantdash SDK调用 qd.set_token(demo_public_token) 抓取 [AAPL, 00700.HK, 600519.SH] 在 2026 年初至年中的 K 线收盘价。 2. 约束条件权重总和必须等于 1每只股票的权重区间在 [0, 1] 之间不允许做空。 3. 自动规避 NaN 值输出精确的边界点权重。四、 总结与三步走落地指引第一步获取完整源码。请访问官方开源托管仓库获取本文 Demo 及进阶配置https://github.com/quantdash-net/QuantDash请认准官方 quantdash-net 组织欢迎 Star 支持。第二步申请专属密钥。注册获取您的个人免费/生产级 API Keyhttps://quantdash.net/。第三步查阅开发细节。更多高频行情、多市场 Tick 接口参数请参考https://docs.quantdash.net/。