行业资讯

加入亿拓客·流量大师 撬动财富之门!!!

量化学习 · 替你踩坑|第一次复现研报,我先卡在了数据上

wang 2026-10-03 行业资讯
量化学习 · 替你踩坑|第一次复现研报,我先卡在了数据上

国庆节在家,我准备开始复现一篇 ETF 研报。

数据已经下载好了,工具也装好了。我原本以为,接下来就可以照着研报写代码、跑回测,看看能不能复现出结果。

满心欢喜地打开研报,才发现:策略还没开始写,就先卡在了数据上。

这篇文章,记录两个这次遇到的坑:一个关于数据,一个关于 DuckDB。也有一个到现在还没想明白的问题。

数据下载好了,不代表已经准备好了

我给自己选的量化学习路线,是先复现金工研报,把方法弄明白,再加入自己的思考,慢慢形成自己的策略。

但真正动手,我才发现自己把“准备数据”这一步想简单了。

第一个问题是,研报需要的数据,比我准备的基础行情多。手里有一批数据,和手里有这篇研报需要的数据,是两回事。

第二个问题更直接:已经拿到手的数据,我自己也不熟悉。

有哪些字段,每只 ETF 的历史覆盖到什么时候,中间有没有缺失……这些问题,我还没认真检查过。

于是,我先把原始数据导入 DuckDB,用 SQL 看看基本情况,再用 Python 算各只 ETF 不同时间段的收益和最大回撤。

从全部历史,到近一年、近两年,再到近五年,一点点查,一点点算。

这个过程,也是在慢慢认识自己手里的数据。

比如,有的 ETF,数据到 2019 年就没有了。

是退市了?还是我下载的时候漏了后面的数据?

还有的 ETF,从 2022 年才开始有记录。

是那年才上市?还是前面的数据没有拿到?

数据的起止时间给了我线索,却没有直接给出答案。

这些情况都需要进一步核对,不能看到数据断了,就认定是退市;也不能看到第一条记录的日期,就认定那是上市时间。

原本以为已经完成的“数据准备”,这时候才算真正开始。

整理数据时,又碰到了一个连接问题

为了方便查询,我把 CSV 里的数据导入了 DuckDB。

然后又遇到了一个小问题:

Python 这边连着数据库,我想同时用 DBeaver 打开看看,结果连不上。

刚开始,我还以为是连接配置出了问题。后来才弄明白,这和 DuckDB 直接访问数据库文件的方式有关。

Python 和 DBeaver 是两个独立的程序。像我这样直接连接同一个 DuckDB 文件,如果一个程序以读写模式打开,另一个就不能再这样直接连接进去。

我当时只是想在两边查看数据,解决办法是:

把 Python 和 DBeaver 的连接都设成只读。

这样,两边就可以同时查看了。

如果接下来需要写入数据,就先关闭两边的只读连接,再让需要写入的那个程序,以读写模式重新打开。

这里也纠正一个容易说错的地方:这不是“DuckDB 只能有一个线程读写”。我遇到的是两个独立程序访问同一个文件时的限制。

这个坑不算大,但第一次碰到时,确实花了一点时间才绕出来。

不过,我还没想明白:这一步到底值不值得?

连接问题解决后,我又开始想:

到底有没有必要把 CSV 导入 DuckDB?

直接用 Python 读取 CSV,是不是已经够用了?

换成 DuckDB,能给我的查询和分析带来多少方便?又会增加多少导入、连接和维护上的折腾?

这些问题,我现在还没有比较清楚。

所以,这篇文章也不能算是一篇 DuckDB 推荐。我目前只是把它用起来,记录实际遇到的问题。

等后面查询得更多、计算得更多,再回头看看:对我这套学习流程来说,哪些地方确实方便了,哪些地方只是多走了一道工序。

如果你也准备复现研报,可以关注这两点

第一,先对照研报,看看需要的数据有没有,再耐心熟悉手里已有的数据。

第二,如果也用 Python 和 DBeaver 直接连接同一个 DuckDB 文件,先分清当前是要查看,还是要写入。

同时查看时,两边都设成只读;需要写入时,先关闭连接,再由需要写入的程序以读写模式打开。

这是我这次摸索后,能分享出来的两个具体经验。

至于 CSV 和 DuckDB 怎么选,我继续试,也继续记录。

这次最大的感受就是:

数据下载好了,离真正能用,还有一段距离。

国庆节在家,接着摸索。

你平时做数据分析,是直接用 Python 读取 CSV,还是会先导入数据库?你在哪一步觉得“确实有必要换个工具了”?欢迎留言聊聊。

猜你喜欢

发表评论

发表评论: