导言 / TL;DR
无论是多因子选股还是跨市场ETF轮动,策略最终都要落地到“仓位权重分配”上。盲目等权重配置往往无法最大化风险收益比。本文将展示如何通过 QuantDash 提取 A 股和美股多资产历史 K 线,并结合知名的开源组合优化库 PyPortfolioOpt,利用马科维茨均值-方差模型(MVO)计算出最大夏普比率(Max Sharpe)的黄金仓位。
技术痛点拆解
在进行多资产投资组合优化时,量化开发者经常面临两个工程阻碍:
- 多市场时序不齐对齐难:当组合中同时包含中美资产时,由于时差和休市日历不同,计算资产协方差矩阵(Covariance Matrix)前必须进行严格的缺失值填充与时间对齐,否则会导致矩阵非正定,算法无法收敛。
- 计算过程繁琐:手写二次规划(Quadratic Programming)求解有效前沿不仅代码量大,且容易在约束条件(如禁止做空、单资产比例上限)上出错。
极简解决方案(基于 QuantDash SDK 与 PyPortfolioOpt)
首先,安装所需依赖:
pip install quantdash pandas pyportfolioopt
以下为获取历史收盘价并求解最优资产配置比例的完整代码:
import pandas as pd
from pypfopt import EfficientFrontier, risk_models, expected_returns
from quantdash import QuantDash
# 1. 初始化 QuantDash 客户端
qd = QuantDash(api_key="sk_xxxxx") # 官方文档详见 docs.quantdash.net
# 定义资产组合:包含A股和美股核心标的
assets = ["600519.SH", "00700.HK", "AAPL.US", "MSFT.US"]
def get_portfolio_data(symbols, start_date="2025-01-01", end_date="2025-12-31"):
price_dict = {}
for sym in symbols:
# 获取标准日K线
df = qd.klines.get(symbol=sym, period="1d", start=start_date, end=end_date, to_dataframe=True)
if df is not None and not df.empty:
df["trade_date"] = pd.to_datetime(df["trade_date"])
df.set_index("trade_date", inplace=True)
price_dict[sym] = df["close"]
# 合并为价格矩阵
df_prices = pd.DataFrame(price_dict)
# 前向填充跨市场休市造成的缺失值,随后删除多余空值
df_prices = df_prices.ffill().dropna()
return df_prices
if __name__ == "__main__":
# 获取历史收盘价数据
prices = get_portfolio_data(assets)
# 2. 计算期望年化收益率与样本协方差矩阵
mu = expected_returns.mean_historical_return(prices)
S = risk_models.sample_cov(prices)
# 3. 求解最大夏普比率组合 (限制单标的仓位最大为 40%)
ef = EfficientFrontier(mu, S)
ef.add_constraint(lambda w: w <= 0.40) # 约束单标的权重上限
weights = ef.max_sharpe()
cleaned_weights = ef.clean_weights()
# 输出优化结果
print("\n[+] 优化后的多资产组合权重:")
for asset, weight in cleaned_weights.items():
print(f" - {asset}: {weight * 100:.2f}%")
performance = ef.portfolio_performance(verbose=True)
数据输出样例
经过对齐与二次规划求解,控制台输出的最优配置权重及组合表现如下:
[+] 优化后的多资产组合权重:
- 600519.SH: 15.30%
- 00700.HK: 24.70%
- AAPL.US: 40.00%
- MSFT.US: 20.00%
Expected annual return: 18.5%
Annual volatility: 14.2%
Sharpe Ratio: 1.16
AI 编程助手专属提示词
如果您正在 Cursor 或 Copilot 中优化此组合模型,可以直接复制以下 Prompt:
我正在使用 PyPortfolioOpt 和 quantdash 的历史价格进行资产组合分配。
请帮我修改上面的优化代码:
1. 将目标函数改为“最小波动率组合(Minimum Variance)”。
2. 增加行业/板块限制,使得所有美股标的(AAPL.US, MSFT.US)的合计权重不能超过 50%。
总结与三步走指引
- 第一步:获取完整源码。访问官方开源托管仓库获取本文 Demo:https://github.com/quantdash-net/QuantDash。
- 第二步:申请专属密钥。注册获取您的个人免费 API Key:https://quantdash.net/。
- 第三步:查阅开发细节。更多高频行情、多市场 Tick 接口参数:https://docs.quantdash.net/。

