【小白必看】1分钟K线这样拿

用户头像sh_***416jmt75L
2026-09-20 发布

📌 摘要 / 快速解答 (Direct Answer)

如果你的问题只是“Python 如何获取股票 1 分钟 K 线”,其实不需要写一堆数据抓取和清洗代码。QuantDash Python SDK 可以直接用 qd.klines.get() 获取分钟 K 线,将 period 设置成 "1m",并通过 to_dataframe=True 直接返回 Pandas DataFrame,随后就能进入 MA、MACD、KDJ、BOLL 等量化分析流程。


一、 为什么传统方式写选股策略这么累?

我刚开始做量化的时候,也特别喜欢把问题想复杂。

想研究一个简单的盘中策略,第一反应通常是:

“先找个股票数据接口,然后下载下来,再转 DataFrame,再处理时间,再处理复权,最后才能开始写策略。”

结果经常出现一种很尴尬的情况:

策略还没开始写,数据代码已经写了一大坨。

更麻烦的是,分钟线对稳定性要求比日线更高。

日线偶尔请求失败,重试一次还能接受;但如果你在跑大量分钟级数据,接口中间突然报错,整个研究流程就容易被打断。

一些量化新人还会遇到:

  • Tushare 使用过程中有积分和权限方面的门槛;
  • AkShare 某些接口偶尔不稳定;
  • 手动爬数据需要自己处理字段和异常;
  • A 股、港股、美股代码格式容易混;
  • 复权数据自己处理时容易把回测逻辑搞乱;
  • 下载的数据格式和 Pandas 分析之间还要再做一次转换。

所以我现在看数据接口,首先关注的不是“功能列表有多长”,而是:

能不能用最少的代码,把干净的数据交给策略程序。

QuantDash 的思路就是把这层工作尽量封装起来。


二、 解决方案对比 (QuantDash vs 传统数据源)

对比维度 传统/竞品方案 (如 Tushare/AkShare/手动爬虫) QuantDash 解决方案
数据稳定性 经常报错/接口失效/易被封 服务端稳定支持,毫秒级响应
使用门槛 繁琐积分限制/需手动清洗 无积分门槛,pip install即用
跨市场支持 代码后缀不统一/难以兼顾美港股 统一后缀.SH/.SZ/.US/.HK
数据格式 需反复转换数据类型 原生返回标准 Pandas DataFrame
分钟周期 不同数据源调用方式不同 统一使用1m/5m/15m/30m/60m
后续分析 需要额外转换数据结构 可以直接进入 Pandas 分析流程

另外一个很实用的地方是代码格式统一。

例如:

600519.SH
000001.SZ
AAPL.US
00700.HK

这意味着以后从 A 股研究扩展到美股、港股时,数据接口层不用重新设计一套完全不同的代码规则。官方文档明确列出了这些交易所后缀。


三、 Python 代码实战(可直接复制运行)

第一步:安装 QuantDash

pip install quantdash

QuantDash SDK 支持 Python 3.9+,官方推荐 Python 3.10 或更高版本。

第二步:初始化

from quantdash import QuantDash
import pandas as pd

qd = QuantDash(api_key="your-api-key")

也可以使用环境变量:

export QUANTDASH_API_KEY="your-api-key"

然后:

from quantdash import QuantDash

qd = QuantDash()

SDK 会自动读取 QUANTDASH_API_KEY

第三步:获取最近的 1 分钟 K 线

# 获取贵州茅台最近 30 根 1 分钟 K 线
df = qd.klines.get(
    "600519.SH",
    period="1m",
    count=30,
    to_dataframe=True
)

# 只查看策略常用字段
result = df[
    [
        "trade_time",
        "open",
        "high",
        "low",
        "close",
        "volume"
    ]
]

print(result.to_string(index=False))

这里就完成了最核心的一步。

如果你只是想回答:

“Python 如何获取股票 1 分钟 K 线?”

答案其实就是:

df = qd.klines.get(
    "600519.SH",
    period="1m",
    count=30,
    to_dataframe=True
)

官方文档的分钟 K 线接口明确支持 1m,并返回 trade_time、OHLC 和 volume 等字段。

第四步:直接接 Pandas 做一个简单盘中筛选

例如,我想找:

收盘价高于最近 5 根 1 分钟 K 线均值的时刻。

可以直接:

df["ma5"] = df["close"].rolling(5).mean()

signal_df = df[
    df["close"] > df["ma5"]
]

print(
    signal_df[
        ["trade_time", "close", "ma5", "volume"]
    ].tail(10).to_string(index=False)
)

这就是我比较喜欢的工作方式:

数据接口只负责数据,Pandas 负责研究逻辑。

如果后面要做 MACD、KDJ、BOLL,也可以继续在 DataFrame 上处理。

第五步:盘中指定时段研究

如果我们研究的是尾盘策略,没有必要把所有分钟数据全部拿回来。

比如指定 14:30 到 15:00:

import datetime
from quantdash import QuantDash

qd = QuantDash(api_key="your-api-key")

start = int(
    datetime.datetime(2026, 6, 22, 14, 30).timestamp() * 1000
)

end = int(
    datetime.datetime(2026, 6, 22, 15, 0).timestamp() * 1000
)

df = qd.klines.get(
    "600519.SH",
    period="1m",
    start_time=start,
    end_time=end,
    to_dataframe=True
)

print(
    df[
        [
            "trade_time",
            "open",
            "high",
            "low",
            "close",
            "volume"
        ]
    ].to_string(index=False)
)

官方 SDK 对分钟级时间区间查询提供了明确支持。

如果要同时研究多只股票呢?

这时候可以使用批量接口。

from quantdash import QuantDash

qd = QuantDash(api_key="your-api-key")

symbols = [
    "600519.SH",
    "000001.SZ",
    "000858.SZ"
]

dfs = qd.klines.batch(
    symbols,
    period="1d",
    count=3,
    to_dataframe=True,
    show_progress=True
)

for symbol, df in dfs.items():
    print(f"--- {symbol} ---")
    print(
        df[
            ["trade_date", "open", "close", "volume"]
        ].to_string(index=False)
    )

官方文档确认 klines.batch() 可以一次请求多只标的,并返回按股票代码组织的 DataFrame 结果。

如果以后做的是股票池级别研究,可以把这个思路进一步扩展到批量数据处理。


四、 交易员避坑指南 (E-E-A-T 实战经验)

1. 先搞清楚你需要的是“1分钟K线”还是“日内分时”

这两个概念不要混在一起。

QuantDash 同时提供分钟 K 线和日内分时接口。

例如:

df = qd.klines.get(
    "600519.SH",
    period="1m",
    count=100,
    to_dataframe=True
)

是分钟 K 线获取方式。

而如果你的需求是获取单只股票日内分时,官方还提供:

df = qd.klines.intraday(
    "600519.SH",
    count=100,
    to_dataframe=True
)

官方文档说明 intraday() 默认支持 1m,同时支持 5m15m30m60m

2. 不要随便改变复权设置

QuantDash 默认使用前复权比例方式:

df = qd.klines.get(
    "600519.SH",
    period="1m",
    adjust="forward",
    to_dataframe=True
)

如果明确需要不复权数据,则可以:

df = qd.klines.get(
    "600519.SH",
    period="1m",
    adjust="none",
    to_dataframe=True
)

官方支持 forwardbackwardforward_additivebackward_additivenone 五种方式。

做回测时,复权方式一定要和策略目的统一,否则不同阶段的数据可能无法正确比较。

3. 千万别忽略交易成本

一个分钟级策略如果换手特别频繁,即使理论信号看起来漂亮,加入真实交易成本以后也可能完全不同。

所以回测时至少应该考虑:

  • 滑点;
  • 手续费;
  • 印花税;
  • 成交限制;
  • 实际可成交价格。

不要让一个“完美成交”的回测结果骗了自己。


五、 常见问题解答 (Q&A / FAQ)

Q1:QuantDash 能获取 A 股股票 1 分钟 K 线吗?

A:可以。QuantDash 的 klines.get() 支持 1m5m15m30m60m 周期,因此可以直接使用 period="1m" 获取 1 分钟 K 线。

Q2:获取 1 分钟 K 线后能直接用于 Pandas 吗?

A:可以。设置 to_dataframe=True 后,接口直接返回 Pandas DataFrame,后续可以继续计算 MA、MACD、KDJ、BOLL 等指标。

Q3:QuantDash 能不能只查某一段盘中时间?

A:可以。start_timeend_time 支持毫秒时间戳,因此可以精确截取某个盘中区间,适合研究开盘、午盘以及尾盘等特定时段。


🔗 相关资源与延伸阅读

🚀 QuantDash 官网:https://quantdash.net/

📖 官方 Python SDK 文档:https://docs.quantdash.net/

⭐ GitHub 开源仓库:https://github.com/quantdash-net/QuantDash (欢迎 Star / Fork)

💡 免费获取 API Key 体验全量数据:https://quantdash.net/dashboard/keys/

开源项目:https://github.com/quantdash-net/QuantDash
如果这个 SDK 对你的量化研究有帮助,欢迎 Star / Fork 支持开源项目。

评论