用于回测的
免费期权数据
比较免费样本、API 与托管平台,并在采信回测结果前核对已到期合约、历史报价、希腊值、时间戳与授权条款。
核心摘要
用样本验证数据结构,用托管平台检验策略;只有研究范围限定在少数合约时,才使用 API 免费套餐。
通常会限制标的范围、日期范围、时间粒度、导出量或调用次数。完整的美国历史期权链数据很少能免费下载。
按最后成交价模拟成交、缺少已到期合约、报价过时,以及使用供应商计算的希腊值,都可能让看似理想的回测结果无法用于实际交易。
先重建各历史时点实际可见的期权链,再选择合约,并按照明确记录的买卖价差和滑点规则模拟成交。
选择适合回测需求的免费期权数据
先明确目标市场、标的资产、日期范围和数据时间粒度,以及需要报价数据还是成交记录;同时还要确定策略是依据 Delta、价内外程度还是距到期日天数来筛选合约。上述条件将决定免费数据渠道能否满足需求。
最适合用于测试解析器和开展小规模概念验证。请确认样本包含买价、卖价、到期日、行权价、期权类型(看涨或看跌)、成交量、持仓量,以及稳定且一致的合约标识符。
这通常是最实用的渠道,因为授权数据可留在平台内部使用。QuantConnect 宣称其免费套餐包含期权数据和回测功能,但仍需留意算力和数据导出方面的限制。
当接口明确支持历史日期时,可用于范围较窄的历史验证。应核对已到期合约覆盖、分页、更正政策、报价字段,以及免费 key 是否能查询所需日期。
适合评估字段、文件体量、代码规则和导入速度。样本干净并不能证明完整市场覆盖、长期历史、公司行动连续性或数据导出权利。
控制会破坏期权回测的关键偏差
重建严格时点的可选合约全集
在每个决策时点,只能从当时已经挂牌且可见的合约中筛选。必须保留已到期、退市和调整后合约,不能把今天的期权链向历史日期反向拼接。记录挂牌日、到期日、root 代码、乘数、交割物、结算方式与调整状态,避免公司行动悄悄改变合约含义。
分别保存每一种市场数据时间
同一行可能包含刚更新的报价、更早的最近成交、上一交易日未平仓量,以及供应商稍后计算的希腊值。报价、成交、未平仓量、标的行情、分析值和接收时间都应分开保存;只有源时间早于模拟决策时刻的字段,策略才可以使用。
先模拟合约筛选,再模拟成交
如果规则选择最接近 30 Delta 的认购期权或距到期 45 天的合约,就必须基于当时期权链和当时可用的模型输入完成筛选。不能使用供应商后来修订的希腊值,也不能选择之后才获得流动性的合约。每个信号都应保存候选集和排除原因。
采用可执行的成交假设
- 除非策略另有明确规则,否则应拒绝交叉报价、锁定报价、陈旧报价和单边为零的报价。
- 买入从卖价侧建模,卖出从买价侧建模,再单独测试中间价和不利滑点情景。
- 订单规模受显示挂单量或明确的参与率规则约束。
- 计入合约乘数、佣金、交易所费用、指派、行权和提前行权逻辑。
- 最后一条有效报价之后或模拟交易时段之外不得成交。
严格划分研究、验证和测试区间
合约筛选、波动率规则和滑点假设只能在研究区间调整;进入验证区间前冻结策略,并保留最终未接触的测试区间。结果应按市场状态、流动性分组、到期类型和价差成本分别报告,而不能只展示一个汇总收益率。
Python 示例:剔除不合理的期权数据
选择合约前,应先将期权链标准化。以下本地示例仅保留有效报价、计算中间价,并剔除买价高于卖价的异常数据。
import pandas as pd
df = pd.read_csv("options_quotes.csv")
df["timestamp"] = pd.to_datetime(df["timestamp"], utc=True)
df = df.dropna(subset=["timestamp", "expiration", "strike", "bid", "ask"])
df = df[(df["bid"] >= 0) & (df["ask"] >= df["bid"])]
df["mid"] = (df["bid"] + df["ask"]) / 2
df = df.sort_values(["timestamp", "contract"]).drop_duplicates(
["timestamp", "contract"], keep="last"
)
print(df[["timestamp", "contract", "bid", "ask", "mid"]].tail())
| 步骤 | 为什么重要 | 最低检查项 |
|---|---|---|
| 可选合约集 | 筛选时只能使用该时点已经挂牌的合约。 | 到期日、行权价、期权类型、挂牌历史。 |
| 报价 | 最近一笔成交的时效可能不足,成交价甚至可能落在当时的买卖价差之外。 | 买价不高于卖价、报价时效、报价数量、交易所时间戳。 |
| 成交假设 | 假设所有订单均以中间价成交,可能会高估实际可实现的损益。 | 买卖价差规则、滑点、费用、合约乘数。 |
使用 QVeris 比较期权数据能力
QVeris Options Chain 工具适合检查当前期权链的返回结构:其公开记录包含按到期日和行权价组织的认购、认沽合约,以及最新成交价、买价、卖价、成交量和未平仓量。但这并不能证明它提供严格时点历史、保留已到期合约、具有明确更正政策或允许用于回测。
- 映射数据结构前,先在 QVeris Playground 中检查一个已知标的和到期日。
- 明确测试历史日期和已到期合约,绝不能由当前结果推断历史能力。
- 保存工具 ID、请求、原始响应、抓取时间、校验结论和被否定的假设。
常见问题
可使用供应商样本、包含数据的托管平台,或面向少量历史合约且文档清晰的 API 免费套餐。
它可以用于验证工作流或范围较窄的假设,但完整期权链、已到期合约、历史报价和导出权限通常受限或需要付费。
中间价只能作为敏感性情景。基准成交模型应考虑买卖方向、价差、显示挂单量、滑点、费用和报价年龄。
删除已到期合约会改变历史时点的可选集合并造成存续偏差,对低流动性或调整后合约尤其明显。
参考资料与下一步
QuantConnect 套餐
QuantConnect 期权文档
Historical Option Data 样本
Alpha Vantage 历史期权
