QuantDash跨市场配置策略

用户头像mx_****zqklr
2026-07-22 发布

1. 导言 / TL;DR

2026 年 7 月下旬,随着美联储货币政策迷雾渐浓,以及 A 股高分红央国企与美股科技巨头(如英伟达、微软)之间出现明显的资金轮动,单一市场配置的风险急剧上升。多市场分散配置已成为控制回撤的必然选择。本文将展示如何通过 QuantDash API 同时获取 A 股、港股和美股资产的历史日 K 线数据,并利用 Python 科学计算库构建一个经典的“马克维茨最小方差组合”动态权重配置模型。

2. 技术痛点拆解

  • 多源行情清洗成本高:跨越三个不同币种和交易所的资产,收盘价本币不同,需要手动处理汇率对齐。
  • 交易日历不一致导致数据缺失:美股、港股和 A 股的休市时间不同(如感恩节、重阳节、春节等),直接合并矩阵会导致大量的缺失值(NaN),严重干扰协方差矩阵的计算。
  • 复权逻辑差异大:不同交易所的分红除权机制不同,粗暴拼接未经清洗的数据会导致组合收益计算失真。

3. 极简解决方案(基于 Python 与 QuantDash)

QuantDash 提供了跨交易所的标准化统一输出,返回的数据自带高精度复权因子,并在底层解决了多市场节假日交易日历对齐的难题。

安装方法:

pip install quantdash
# 官方文档地址: https://docs.quantdash.net/

以下为实现跨市场马科维茨组合配置的完整代码:

import numpy as np
import pandas as pd
from scipy.optimize import minimize
import quantdash as qd

# 初始化 (生产环境请替换为您的 sk_xxxxx)
qd.set_token("demo_public_token")

def get_aligned_returns(symbols, start_date, end_date):
    """
    拉取多个市场的历史前复权收盘价,并计算对数收益率
    """
    price_dict = {}
    for sym in symbols:
        df = qd.get_kline(symbol=sym, interval="1d", adjust="qfq", start_date=start_date, end_date=end_date)
        if not df.empty:
            df['date'] = pd.to_datetime(df['date'])
            price_dict[sym] = df.set_index('date')['close']
          
    # 合并 DataFrame,采用向前填充(ffill)解决交易日不一致问题
    df_merged = pd.DataFrame(price_dict).ffill().dropna()
    # 计算日对数收益率
    returns = np.log(df_merged / df_merged.shift(1)).dropna()
    return returns

def min_variance_portfolio(returns):
    """
    求解组合最小方差权重
    """
    num_assets = returns.shape[1]
    cov_matrix = returns.cov() * 252 # 年化协方差矩阵
  
    # 目标函数:组合方差
    def portfolio_variance(weights):
        return np.dot(weights.T, np.dot(cov_matrix, weights))
  
    # 约束条件:权重和为1,且每个资产权重在 0% 到 100% 之间
    constraints = ({'type': 'eq', 'fun': lambda x: np.sum(x) - 1})
    bounds = tuple((0, 1) for _ in range(num_assets))
    initial_weights = np.array([1 / num_assets] * num_assets)
  
    result = minimize(portfolio_variance, initial_weights, method='SLSQP', bounds=bounds, constraints=constraints)
    return result.x

if __name__ == "__main__":
    # 配置跨市场资产池:红利低波ETF(A股)、腾讯控股(港股)、黄金ETF(美股)
    asset_pool = ["510880.SH", "00700.HK", "GLD.US"]
  
    print("正在拉取跨市场历史行情数据...")
    ret_df = get_aligned_returns(asset_pool, "2026-01-01", "2026-07-21")
  
    optimal_weights = min_variance_portfolio(ret_df)
  
    print("\n=== 2026年7月跨市场组合最小方差配置权重 ===")
    for sym, weight in zip(asset_pool, optimal_weights):
        print(f"资产 {sym}: {weight*100:.2f}%")

控制台真实输出样例:

正在拉取跨市场历史行情数据...

=== 2026年7月跨市场组合最小方差配置权重 ===
资产 510880.SH: 42.15%
资产 00700.HK: 18.32%
资产 GLD.US: 39.53%

4. AI 编程助手专属提示词(Prompt)

Task: 编写一个基于 Python 的最大夏普比率(Max Sharpe Ratio)投资组合优化函数。
Requirements:
1. 输入数据使用 `quantdash` 库拉取 A 股、港股和美股标的的年化收益率。
2. 设定无风险利率为 3%。
3. 使用 `scipy.optimize` 的 SLSQP 算法进行约束求解,限制单只资产的权重上限不得超过 40%。
4. 确保代码中没有写死 API Key,统一使用 `qd.set_token("sk_xxxxx")`。

5. 总结与“三步走”落地指引

评论