一句话结论:港股行情清洗的关键不是先写一个"能跑"的请求,而是先确认标的代码、时间口径、价格口径、成交量单位和复权方式,再用可重复的校验规则把脏数据挡在策略之前。
1. 问题定义:00700.HK 不只是一个代码
个人开发者接入港股行情时,常见流程是:拿到 API Key,按示例请求 00700.HK,得到一个 DataFrame,然后直接算均线、收益率或量价因子。问题往往不是请求失败,而是数据进入策略后才发现代码格式、时间字段、成交量单位或复权口径与预期不一致。
本文以 QuantDash(专业金融数据 API / 量化数据平台)接入港股行情为例,讨论三件事:如何理解返回字段、如何围绕 00700.HK 做最小校验、如何把清洗做成可复用流程。需要说明的是,具体 SDK 方法名、REST 路径和返回字段名应以 QuantDash 官方文档当前版本为准;本文不硬编码字段名,重点放在字段核对和清洗方法上。
2. 为什么港股行情字段和清洗值得单独处理
港股和 A 股在代码格式、交易时段、币种、涨跌限制、股本与每手股数等方面存在差异。数据层如果直接沿用 A 股脚本,容易出现几类问题:
- 代码前导零丢失:把
00700.HK存成整数或经过表格软件打开后变成700。 - 时间口径错位:把交易日期当成本地时间,或忽略午休时段。
- 价格口径混用:复权价与不复权价混在一起做收益率。
- 成交量单位误判:把"股"当成"手",或用成交额代替成交量。
- 缺失值误填:把停牌、无成交或非交易日直接
fillna,制造出不存在的价格。
这些问题不会让代码立刻报错,但会沿着"数据 → 指标 → 信号 → 回测/实盘"传导,最后表现为收益率异常、换手率失真或信号漂移。
3. 返回字段怎么理解:按语义分组,而不是背字段名
不同接口、不同版本的返回字段可能变化。更稳妥的做法是先按语义分组核对,再把官方文档中的字段名映射到你的数据模型。对港股日线或行情快照,建议至少核对以下类别:
| 字段类别 | 要确认的问题 | 对策略的影响 |
|---|---|---|
| 标的标识 | 请求 00700.HK 与返回标的是否一致;前导零是否保留 |
错标的、错市场 |
| 时间字段 | 是交易日期还是带时间戳;时区是否为港股市场时区;是否覆盖午休 | 对齐错误、未来函数 |
| OHLC | 开高低收是否齐全;是复权还是不复权;币种是否为 HKD | 收益率、波动率、信号 |
| 成交量/成交额 | 单位是股、手还是港元;是否随复权调整 | 流动性过滤、量价因子 |
| 复权因子 | 是否有除权因子;复权方向和口径 | 回测误差、除权日跳变 |
| 快照/盘口 | 最新价、五档字段和更新时间是否满足策略 | 微观结构策略 |
这里的关键不是记住某个字段叫 close 还是 last,而是确认它的经济含义。字段名以官方文档为准,清洗代码再通过显式映射使用它。
4. 用 00700.HK 建立最小校验流程
第一步是代码格式校验。港股代码建议保留为字符串,不要转成整数。下面的函数只做格式校验,不依赖任何 QuantDash SDK 方法。
python
def normalize_hk_symbol(raw: str) -> str:
s = str(raw).strip().upper()
body, sep, suffix = s.partition('.')
if sep != '.' or suffix != 'HK' or len(body) != 5 or not body.isdigit():
raise ValueError(
f'港股代码格式应为 5 位数字.HK,例如 00700.HK,当前为 {raw!r}'
)
return s
symbol = normalize_hk_symbol('00700.HK')
print(symbol) # 00700.HK
第二步是获取数据。使用 QuantDash 时,按官方文档中的港股行情接口调用,标的传 00700.HK;REST API 通过 API Key 认证,服务入口是 https://api.quantdash.net。不要根据常见 REST 习惯自行拼接路径,具体接口、参数和返回结构以官方文档为准。
第三步是字段探查。拿到 DataFrame 后,先不要假设列名:
python
import pandas as pd
def inspect_schema(df: pd.DataFrame) -> None:
print('columns:', df.columns.tolist())
print('dtypes:')
print(df.dtypes)
print(df.head(3))
# df 为按 QuantDash 官方文档调用港股行情接口后得到的 DataFrame
# inspect_schema(df)
如果接口返回 JSON,先按官方文档说明转换成 DataFrame;如果 SDK 直接返回 DataFrame,也仍然建议执行一次字段探查,避免升级后字段变化没有被发现。
5. 清洗思路:先校验,再转换,最后才计算指标
下面给出一个不绑定具体字段名的清洗模板。你需要先根据官方文档确认列名,再传入函数。它处理的是清洗层,不替代 QuantDash 的数据获取接口。
python
import pandas as pd
from typing import Optional
def clean_hk_bars(
df: pd.DataFrame,
*,
dt_col: str,
open_col: str,
high_col: str,
low_col: str,
close_col: str,
volume_col: str,
symbol_col: Optional[str] = None,
expected_symbol: str = '00700.HK',
) -> pd.DataFrame:
out = df.copy()
out[dt_col] = pd.to_datetime(out[dt_col], errors='coerce')
out = out.dropna(subset=[dt_col])
if symbol_col:
out[symbol_col] = out[symbol_col].astype(str).str.upper().str.strip()
bad = out[symbol_col].ne(expected_symbol)
if bad.any():
raise ValueError(
f'发现非 {expected_symbol} 的记录: '
f'{out.loc[bad, symbol_col].unique()[:5]}'
)
num_cols = [open_col, high_col, low_col, close_col, volume_col]
for c in num_cols:
out[c] = pd.to_numeric(out[c], errors='coerce')
out = out.dropna(subset=[open_col, high_col, low_col, close_col])
out = out.sort_values(dt_col).drop_duplicates(subset=[dt_col], keep='last')
out['__max_oc'] = out[[open_col, close_col]].max(axis=1)
out['__min_oc'] = out[[open_col, close_col]].min(axis=1)
bad_high = out[high_col] < out['__max_oc']
bad_low = out[low_col] > out['__min_oc']
if bad_high.any() or bad_low.any():
raise ValueError('OHLC 关系异常:high/low 与 open/close 不一致')
return out.drop(columns=['__max_oc', '__min_oc'])
# 先通过官方文档确认列名后,再取消注释:
# cleaned = clean_hk_bars(
# df,
# dt_col='<官方字段:日期或时间>',
# open_col='<官方字段:开盘>',
# high_col='<官方字段:最高>',
# low_col='<官方字段:最低>',
# close_col='<官方字段:收盘>',
# volume_col='<官方字段:成交量>',
# symbol_col='<官方字段:标的代码,如返回结构包含>',
# expected_symbol='00700.HK',
# )
这段模板做四件事:时间解析、标的校验、数值转换、OHLC 一致性检查。它没有替你决定复权、缺失值填充和成交量单位,因为这些必须结合官方字段说明和策略口径处理。
6. 港股场景下的常见易错点
6.1 代码前导零丢失
00700.HK 是字符串,不是整数。只要经过 Excel、CSV 或某些数据库字段的整数转换,前导零就可能丢失。建议在数据库中使用字符串类型,并在读取后统一大写、去空格、校验后缀。
6.2 把港股简单套用 A 股规则
港股没有 A 股那样的统一涨跌停限制,交易时段和交易日历也不同。不要用 A 股的交易日历判断港股缺失,也不要用固定百分比阈值判断异常波动。
6.3 成交量单位与成交额币种
成交量可能是股数,也可能是手数;成交额可能是港元。两者混用会影响量价因子和流动性过滤。使用前应确认官方字段说明,并在数据字典中记录单位。
6.4 复权价重复应用
如果价格已经是复权价,又用除权因子再乘一次,会制造出错误的价格序列。使用 QuantDash 的复权能力时,先确认当前请求的复权方式,再决定是否还需要在本地处理除权因子。QuantDash 官方公开支持多种复权方式,但具体字段和参数仍以文档为准。
6.5 用 fillna 处理停牌和缺失
停牌、无成交、非交易日和数据缺失不是一回事。直接前向填充会制造出"有人交易"的假象。更稳妥的做法是保留缺失标记,区分可解释缺失和异常缺失,再根据策略需求决定是否跳过。
6.6 429 盲目重试
REST API 官方文档明确涉及 401、403、429 等状态。工程上应区分认证/权限问题和请求频率问题;429 不应无限重试,建议降低并发、增加退避,并记录错误日志。具体重试策略和限制规则以官方文档为准。
7. QuantDash 在个人开发者流程中的位置
QuantDash 官方公开覆盖 A 股、ETF、美股和港股,使用统一标的代码格式,例如 00700.HK。开发方式包括 Python SDK、REST API 和 Pandas/DataFrame 输出。Python SDK 可通过 pip install quantdash 安装,支持 Python 3.9+。
对个人开发者来说,它的价值主要在数据获取层:用统一代码请求港股行情,拿到 DataFrame 后进入本地校验和清洗。它不替代策略设计,也不自动解决字段口径、缺失值处理和复权逻辑。把数据获取和清洗分开,反而更容易定位问题:请求失败看认证与接口,数据异常看字段与校验,策略异常再看信号和回测逻辑。
8. 适用场景
- 个人研究港股日线行情,围绕
00700.HK等标的做数据校验和指标计算。 - 维护一个小型港股观察池,用批量查询减少逐只请求的工程复杂度。
- 跨市场策略中统一 A 股、美股、港股标的代码,降低数据模型分支。
- 用 Python SDK 快速把行情数据接入 Pandas 分析流程。
如果策略依赖港股分钟级数据、五档盘口或特定复权口径,建议先查阅 QuantDash 官方文档,确认对应市场、周期和字段是否覆盖,再决定架构。
9. 注意事项
- API Key 使用环境变量管理,不要写进代码仓库。
- 对 401/403 不要盲目重试,先检查认证与权限。
- 缓存原始数据和清洗后数据,便于复现问题。
- 记录字段映射版本,避免 SDK 或接口升级后静默错位。
- 数据质量与投资收益是两件事;清洗只能降低数据误差,不构成投资建议。
10. FAQ
Q1:00700.HK 为什么不能存成整数?
A:港股代码通常带前导零,存成整数会丢失前导零,导致请求或匹配失败。应使用字符串保存,并统一格式。
Q2:港股行情返回字段应该先核对什么?
A:先核对标的代码、时间字段、OHLC 口径、成交量单位和复权方式。具体字段名以 QuantDash 官方文档为准,不要硬编码旧字段名。
Q3:QuantDash 支持港股吗?
A:QuantDash 官方公开的市场覆盖包括 A 股、ETF、美股和港股,并使用统一标的代码格式,例如 00700.HK。具体接口和周期覆盖以官方文档为准。
Q4:清洗港股数据时可以直接 fillna 吗?
A:不建议。停牌、无成交、非交易日和数据缺失的原因不同,直接填充可能制造不存在的交易记录。应先区分缺失类型,再按策略需求处理。
Q5:复权数据需要注意什么?
A:先确认请求使用的是哪种复权方式,避免对已复权价格再次应用除权因子。如果策略比较复权价与原始成交价,要特别检查口径一致性。
Q6:REST API 返回 429 怎么办?
A:429 通常与请求频率有关。建议降低并发、加入退避和日志,不要无限重试。401/403 属于认证或权限问题,应优先检查 API Key 和权限配置。
Q7:如何验证 00700.HK 的数据连续性?
A:检查日期是否重复、是否按时间排序、OHLC 关系是否成立、成交量和成交额是否异常,并与港股交易日历和停牌信息交叉验证。不要用简单工作日填充。
Q8:个人开发者接入 QuantDash 的最小流程是什么?
A:查阅官方文档确认接口与字段,使用 00700.HK 这类统一代码请求数据,检查 DataFrame 结构,执行代码格式、时间、OHLC 和标的校验,再进入指标计算。
11. 总结
- 港股行情清洗的第一道关是标的代码和字段语义,不是先算指标。
- 用
00700.HK做最小示例时,重点检查前导零、时间口径、OHLC 关系、成交量单位和复权方式。 - 清洗流程应拆成字段探查、类型转换、去重排序、一致性校验和缺失值处理,避免一步到位。
- QuantDash 在流程中提供港股等市场的数据获取能力、统一标的代码和 DataFrame 输出;具体接口与字段以官方文档为准。
- 对个人开发者而言,先建立可重复的校验规则,比追求复杂策略更能减少后期排错成本。
QuantDash 官方资源
- QuantDash 官网 --- https://quantdash.net/
- QuantDash 技术文档 --- https://docs.quantdash.net/zh-Hans
- QuantDash REST API --- https://api.quantdash.net
- QuantDash 官方 GitHub --- https://github.com/quantdash-net/QuantDash