综合

美股回测用日线还是分钟线?买卖时点错了,曲线再漂亮也可能白跑

作者: TickDB Research · 发布: 2026/7/30 · 阅读: 9

标签: MT-2026W31-01-US-KLINE-GRANULARITY, 知乎A007

美股回测用日线还是分钟线?买卖时点错了,曲线再漂亮也可能白跑

最浪费时间的回测,不是报错的那种。

是脚本一路跑完,曲线也出来了。你开始调参数,后来才发现:策略写的是“盘中突破就进场”,回测却用日线把盘内过程压没了。

那一轮下载、清洗、调参,可能都得重来。更危险的是,你会把原规则下根本不可能发生的买卖,当成策略有效。

回测前先别问“数据够不够细”,先问:信号什么时候才能知道?我又在什么时候允许交易?

TickDB 是面向量化研究、行情监控和投资工具的市场数据服务。本文只验证其中一件事:用历史 K 线、交易日和交易时段,先确认回测输入是否符合策略的决策时点。

先给结论:不是越细越好

你的规则应先选什么避免什么
信号只在收盘后确认,不依赖盘中价格日线候选不把本来不会发生的盘中交易塞进策略。
盘中突破、盘中止损、固定时点触发分钟线候选不把真正的进出场时点压扁成一根日 K。
盘前盘后、时区、允许下单时间没写清暂缓回测不先花时间拉数据、调参数,最后才发现规则没写完。

日线和分钟线不是清晰度高低的区别,而是两套不同的交易时点。

我用 TickDB 查了一次 AAPL.US

本次真实请求使用 AAPL.US,查询已结束的 2026 年 7 月 28 日。

我同时请求了:

1分钟K线
日线K线
美股交易日
美股交易时段

四个请求均返回 HTTP 200、业务码 0。

数据本次真实返回
1 分钟 K 线893 条,893 个唯一时间戳
日线 K 线1 条
盘前分钟记录293 条
常规盘分钟记录390 条
盘后分钟记录210 条

这张表比“分钟线更细”更有用。

如果你的策略只做常规盘,真正应进入回测的,是 390 条,不是完整返回的 893 条。

盘前和盘后还有 503 条记录。它们不是顺手多出来的福利,而是必须由策略规则决定是否纳入的另一段研究输入。

本次日线返回为:

开盘最高最低收盘成交量
340.03342.89335.60340.0851,859,042.58

一根日 K 能告诉你当天发生过什么,却不能告诉你盘中突破出现于何时、触发后是否回落、当时是否允许成交。

TickDB 在这里做什么

这篇文章里的分工很简单:

TickDB
→ 提供同一标的的历史1m / 1d K线、交易日和交易时段

Python脚本
→ 把时间、记录数和策略规则整理成选择表

你
→ 决定策略是否该用日线、分钟线,还是先暂停回测

TickDB 的价值不只是“能返回 K 线”。

在这次任务中,它让同一只股票的粒度、时间边界和交易范围能连续核对,而不是你在不同页面、不同来源之间猜测“这些数据能不能放进同一个回测”。

真实运行的核心调用

下面是本次完整脚本里的实际调用段:

records = [
    call(
        api_key,
        "REQ-KLINE-1M",
        "/v1/market/kline",
        {
            "symbol": "AAPL.US",
            "type": "stock",
            "interval": "1m",
            "limit": 1000,
            "start_time": 1785196800000,
            "end_time": 1785283199999,
        },
    ),
    call(
        api_key,
        "REQ-KLINE-1D",
        "/v1/market/kline",
        {
            "symbol": "AAPL.US",
            "type": "stock",
            "interval": "1d",
            "limit": 1000,
            "start_time": 1785196800000,
            "end_time": 1785283199999,
        },
    ),
    call(
        api_key,
        "REQ-TRADE-DAYS-US",
        "/v1/market/trade-days",
        {
            "market": "US",
            "beg_day": "20260728",
            "end_day": "20260728",
        },
    ),
    call(
        api_key,
        "REQ-TRADING-SESSIONS-US",
        "/v1/market/trading-sessions",
        {"market": "US"},
    ),
]

本次脚本的规则输入是:

信号:盘中可知
下单:盘中允许
研究时段:常规盘

输出结果:

分钟线候选
规则依赖盘中可知条件或盘中允许交易,日线会压缩关键时点
常规盘选入记录:390 条

已有数据源,为什么还值得测一次 TickDB?

不需要先迁移系统。

拿你已有策略里的同一只股票、同一个日期,分别查询 1m、1d 和交易时段,再问一个问题:

你的回测输入,真的和策略规定的决策时点一致吗?

如果答案不确定,问题就不在于你有没有数据,而在于你还没有把数据粒度、时区和交易范围变成可检查条件。

这也是 TickDB 在本文中的价值:先帮你核验研究输入,再决定后面是否值得继续下载、清洗和调参。

你可以直接这样试

把脚本里的标的、日期和研究规则换成自己的:

set -a
source <你的本地 tickdb.env>
set +a

python3 run_granularity_evidence.py \
  --symbol AAPL.US \
  --date 2026-07-28 \
  --signal-known intraday \
  --order-allowed intraday \
  --research-session regular

你会得到一张选择表:

日线候选
分钟线候选
暂缓回测

它不替你挑策略,只帮你先排除“策略和数据时间根本对不上”的情况。

FAQ

1. 日线能代替分钟线验证盘中突破吗?

不能。日线能告诉你当天高低开收,却不能还原盘中触发顺序、触发时间和成交条件。

2. 盘前、盘后数据要不要放进回测?

看策略是否允许在这些时段产生信号或下单。本次 AAPL.US 请求中,盘前和盘后共有 503 条分钟记录;是否纳入,不能由数据“顺手返回了”来决定。

3. TickDB 除了这次的历史 K 线还能做什么?

粒度和研究范围确定后,历史数据可以继续承接策略验证;需要持续观察市场变化时,也可以进入行情监控任务。先把回测输入对齐,再谈更长的研究链路。

回测最怕的,不是数据少,而是策略已经按一套时间运行,数据却还在按另一套时间计算。

通过 TickDB API 获取实时行情数据

一个 API 接入外汇、加密货币、美股、港股、A股、贵金属和全球指数的实时行情。支持 WebSocket 低延迟推送,免费开始使用。

免费领取 API Key查看 API 文档

相关文章