随着全球大类资产配置的普及,跨市场量化交易(如 A 股沪深 300、港股腾讯控股、美股特斯拉及苹果)已成为量化团队的核心研究领域[5][6]。然而,开发多市场交易策略时,由于不同交易所的接口彼此割裂、代码后缀(如 .SS/.SZ、.HK、US)极其混乱、返回的数据列名及日期格式不一致,开发者往往需要编写大量臃肿的 if/else 代码清洗逻辑。 本文将展示如何利用 QuantDash 统一的多市场 SDK,仅用一套标准代码无缝获取三大市场的前复权 K 线,并利用 Pandas 快速合成相对强弱(RSI)动量指标,清除多市场分析的工程障碍[7]。
当一个策略需要同时读取美股、港股和 A 股数据时,传统的实现方式简直是噩梦:
# ❌ 传统跨市场拼接的繁琐写法(伪代码)
# A 股用 akshare
df_a = ak.stock_zh_a_daily(symbol="sh600519")
df_a = df_a.rename(columns={"日期": "date", "收盘价": "close"}) # 中文列名清洗
# 美股用 yfinance
df_us = yf.download("AAPL") # 字段多为大写 "Close", "Open"
df_us.index.name = "date"
# 港股用 tushare
df_hk = ts_pro.hk_daily(ts_code="00700.HK")
# ⚠️ 问题来了:时区不一致、除权除息口径不同、数据列名拼写各异,直接导致拼表逻辑漏洞百出!传统跨市场获取的硬伤:
QuantDash 提供了高度规范的跨市场整合能力[8]。无论是 A 股、美股还是港股,均统一采用国际标准的 {代码}.{交易所后缀} 标准(如 600519.SH, 00700.HK, AAPL.US),且 K 线接口返回高度规整的、小写英文列名的 DataFrame[8][10]。
A 股 (600519.SH) ──┐
港股 (00700.HK) ──┼─> [QuantDash 统一网关] ─> 统一 DataFrame (trade_date, close...)
美股 (AAPL.US) ──┘我们将用一套极简的代码,同时获取茅台、腾讯、苹果的历史日 K 线,并利用 pandas_ta(或手动用 Pandas)计算 RSI(14) 动量指标进行跨市场相对强弱对比[7]:
import os
import pandas as pd
from quantdash import QuantDash
# 初始化客户端(使用脱敏公共Token,生产环境建议替换为您的专属 API Key)
api_key = os.getenv("QUANTDASH_API_KEY", "demo_public_token")
qd = QuantDash(api_key=api_key)
def calculate_rsi(df, period=14):
"""手动用 Pandas 优雅计算标准 RSI(14) 指标"""
delta = df["close"].diff()
gain = (delta.where(delta > 0, 0)).rolling(window=period).mean()
loss = (-delta.where(delta < 0, 0)).rolling(window=period).mean()
rs = gain / (loss + 1e-9)
df["RSI_14"] = 100 - (100 / (1 + rs))
return df
def get_multi_market_momentum():
# 定义跨市场标的(A股、港股、美股)
symbols = {
"A-Share (茅台)": "600519.SH",
"HK-Share (腾讯)": "00700.HK",
"US-Share (苹果)": "AAPL.US"
}
combined_results = []
for name, symbol in symbols.items():
print(f"正在从 QuantDash 提取 {name} [{symbol}] 的前复权 K 线...")
try:
# 统一的接口、统一的参数、统一的复权口径
df = qd.klines.get(
symbol=symbol,
period="1d",
adjust="forward", # forward 为前复权,确保历史指标连续、不因除权失真
to_dataframe=True
)
if df is None or df.empty:
continue
# 计算 RSI 指标
df = calculate_rsi(df)
# 取最新一天的收盘价和 RSI 值
latest_row = df.iloc[-1]
combined_results.append({
"市场名称": name,
"标准代码": symbol,
"交易日期": latest_row["trade_date"],
"最新收盘价": round(latest_row["close"], 2),
"RSI(14)值": round(latest_row["RSI_14"], 2)
})
except Exception as e:
print(f"拉取 {symbol} 数据异常: {e}")
return pd.DataFrame(combined_results)
if __name__ == "__main__":
momentum_df = get_multi_market_momentum()
print("\n=== 跨市场最新收盘价与相对强弱(RSI)对比面板 ===")
print(momentum_df.to_string(index=False))正在从 QuantDash 提取 A-Share (茅台) [600519.SH] 的前复权 K 线...
正在从 QuantDash 提取 HK-Share (腾讯) [00700.HK] 的前复权 K 线...
正在从 QuantDash 提取 US-Share (苹果) [AAPL.US] 的前复权 K 线...
=== 跨市场最新收盘价与相对强弱(RSI)对比面板 ===
市场名称 标准代码 交易日期 最新收盘价 RSI(14)值
A-Share (茅台) 600519.SH 2026-07-24 1297.41 68.55
HK-Share (腾讯) 00700.HK 2026-07-24 434.60 44.83
US-Share (苹果) AAPL.US 2026-07-24 333.02 67.70你可以直接复制本段 Prompt 投喂给 AI 助手,在编写跨市场代码时彻底规避由于接口幻觉导致的 Bug[13][14]:
你是一个资深的量化研究员。我正在使用统一的 quantdash 数据源 SDK。
请帮我写一个 Python 脚本,要求:
1. 导入 quantdash:from quantdash import QuantDash; qd = QuantDash(api_key=os.getenv("QUANTDASH_API_KEY"))
2. 获取三个标的 "BTC.US" (比特币ETF或美股相关)、"00700.HK" 和 "510300.SH" 过去 60 天的前复权日K线数据:qd.klines.get(symbol=symbol, period="1d", adjust="forward", to_dataframe=True)
3. 使用 pandas 计算每个标的的 20 日简单移动平均线(MA20)。
4. 对齐三个标的的 trade_date,合并输出一张包含各标的 close 以及 MA20 的宽表,缺失值使用前向填充 ffill。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。