duckdb 它是一个开源快速地侵入式 cq o r a p 数据库,专门简化开发者作分析的方式,由荷兰团队开发, 使用 c 加加编辑,首次发布于二零一九年。一句话,它就像 sqlite, 但面向猎视数据,大家都知道, sqlite 是 世界上部署最广泛的数据库, 因为它以单一二进制文件运行,无需专用的数据库管理服务器进程几乎可以嵌入到任何地方, 比如全球数十亿部智能手机中。 docdb 延续相同理念,只是它不是暗行存, 而是暗列存。这为什么重要?暗行存对大多数应用的事务性工作负债很合适。比如电商网站 需要同时读写整条记录,但面对分析场景和互联网中常见的大量时间序列数据,就不那么理想了,因为你需要在许多记录里只读一列的数据。当存储优化为列时,聚合会更快,比如算平均值, 过滤和连接也更快。 duckbb 通过猎市向量化查询执行引擎,在一个操作中把大量值作为向量并行处理,对大规模数据集表现卓越。它已经在 mate、 酷狗、 lmbb 等大公司中使用, 上手很简单,安装后从中端运行 docdb 命令,然后像使用其他 sql 数据库一样开始插入数据,如果要读取某一列,用 select 命令就行。更棒的是,现有的 csv 或 park 文件数据 可以直接在 sql 语句中访问。此外,结果还能导出为不同格式,比如 j, s, o n 甚至 html 表格,这些都很酷。但 docdb 的 真正强大在于它处理时间序列数据时的聚合能力。想象一下,我们有一个巨大的股票价格数据集,要计算过去一天的平均值、最大值和最小值 可以在 select 语句里用内置聚合函数轻松实现,再用 group by 把数据分到特定时间范围。而在底层,它之所以快,是因为它不像 sq lite 那 样逐行处理数据, 而是以向量化的批量方式处理,并且默认支持多线城,是分析型工作负债的绝佳选择。三分钟带你了解 duck db。 想看更多这样的短视频,记得点赞和关注,感谢观看,我们下次再见!
粉丝3098获赞1.6万

这个是目前最好用的 ps 一 模拟器, dacstation, 这些呢则是一些 ps 一 上的经典游戏 rom, 今天就教大家用一个最简单的方式,就像这样打开一个 rom, 然后把游戏直接拖进咱们的模拟器进行启动, 怎么样?这个开局画面经不经典? 读盘成功,这个画面一出来,你有没有觉得欢喜,甚至这会啊还要卡那么一下,一比一的还原当年的感觉 好了,启动成功,一样的画面,一样的音乐,一样的感觉,就这么简单,这样简单的一个模拟器,你爱不爱?今天老师就教大家使用这个 ps 一 上最好用的模拟器 dockstation, 这个模拟器的功能非常的强悍。首先啊,咱们先看这个模拟器的界面啊,启动文件就是咱们启动一些,然后游戏的 rom, 然后启动 bios, 这个画面非常的经典,大家可以看一下,就是咱们在原来玩 ps 一 的时候进行记忆卡管理,那个界面就是不放光盘,然后直接启动机器,就是这个效果,可以进行记忆卡的,然后管理。 ok, 咱们现在关机, 这个模拟器呢提供了关机重启以及暂停这些功能,还可以随时进行更换光盘,同时它还支持金手指功能,包括整个画面的录制。最重要的是这个模拟器还支持计时的存储功能, 方便你在游戏中进行随时的存储。然后具体的设置咱们待会要给大家介绍,还可以支持目前市面上所有的手柄。 具体的设置方面,大家可以看这个位置点击设置,呃,他默认的进入是 bios 的 设置,在这里呢,由于我给大家已经打包好了,所以说 bios 的 设置大家不用动, 然后紧下来是游戏机设置这一块,大家也是按照这个默认的选择就可以了,紧下来模拟模拟这个位置,同样大家保持他的默认设置就没什么问题。接下来咱们重点说的是记忆卡,记忆卡这里我建议大家把两个记忆卡统一的选成是呃分享所有游戏这个选项, 就 shell between all games 选择这个选项,这个选项是什么意思呢?就是说呃,所有游戏都共用这一个记忆卡,不然这个模拟器呢,是你玩一个游戏,它就会生成一个记忆卡的文件,不方便大家进行记忆卡的管理,同时像一些需要换盘的游戏呢,也可能让你找不到存档, 两个记忆卡全部保持成这个设置就可以了。接下来我们看图像这个选项,图像选项在渲染器这块,我建议大家选择这个三 g 十二或者是三 g 十一,这个都是比较好用的,如果说你的硬件配置够的话,直接可以选择这个选项, 然后设备器就选择自己的显卡。紧下来,然后一些分辨率的选择,这个模拟器呢,最高的分辨率支持到四 k, 再往上的画面会有点糊, 所以说为了保持咱们的最好的画质,我建议大家使用这个幺零八零 p 或者是七二零 p 这两个选项都可以。 彩耀这个位置,咱们选择到最平滑的一个状态就可以了。然后纹理这个模拟的是咱们显像管的,就是说扫描线这个大伙根据自己的爱好进行选择就可以, 其他的咱们保持默认就可以了, 后处理这些啊,咱们都不用太弄了,包括然后他的音效这些咱们都不用管,直接把它关闭就可以了。 如果出现无法使用这个模拟器的情况,应该是你的主机缺乏一个插件,这个呢, vc 插件我已经放在了压缩包中,如果说一旦发生了无法启动这种情况,就直接可以运行这个插件,之后这个模拟器就可以正常的使用了, 够贴心了吧。至于怎么用这个模拟器实现最好的模拟效果和游戏体验,我会在后面的作品中给大家讲,还希望大家能够点赞收藏加关注。 模拟器我已经打包好分享到了粉丝群,我也会在粉丝群每天随作品和大家一起分享游戏,有什么不明白的也可以在那问我,关注老师带你走进精彩的游戏世界!

各位,我们每天都在和数据打交道,但有没有觉得有些时候这些数据就像脱缰的野马,难以驾驭?特别是对于量化研究来说,在线数据员带来的这些痛点,相信大家深有体会。 这些问题本质上都指向一个核心矛盾,我们的量化研究需要的是一个稳定可控、随时可用的数据环境,但现实是,券商提供的在线数据源,比如 qmt, 它本质上是不稳定的, 服务器维护、网络波动、限流策略都可能让我们的工作被迫中断。所以,最直接有效的解决方案是什么?很简单,把数据搬到我们自己的地盘上,建立一个本地化的数据仓库。 那么问题来了,这么多数据库,我们为什么最终选择了 duckdb 呢?在选型过程中,我们考察了多种方案,包括大家熟悉的 sql lite、 my sql post、 gre sql 以及像 hdf 五 parkit 这样的列式存储格式。 最终, duck db 凭借其独特的优势脱颖而出,它就像量化研究领域的瑞士军刀,小巧、强大、好用,而且完全免费。开源 duck db 的 第一个杀手锏就是它的极简部署, 你不需要安装任何复杂的服务器进程,只需要一个 duck db 点拍文件,或者一个单独的可执行文件, 一行代码 connect 就 能创建一个完整的数据库,实力这比 circle lite 更进一步。 circle lite 虽然也轻量,但 duckdb 在 性能上是一个数量级的提升,尤其是在处理大规模金融数据时,速度惊人。 第二个核心优势是劣势,存储金融数据,尤其是 o、 h、 l、 c、 v 开盘价、最高价、收盘价、成交量,天生就是劣势存储的绝佳场景。 你想只看某只股票的收盘价, duckdb 只读取对应的列,而不是整行数据。你想计算全市场的平均涨幅, 聚合查询快如闪电。更重要的是,列式存储天然压缩率高。同样的数据量, duckdb 占用的空间可能只有传统形式存储的一半甚至更少。 第三个优势, duckdb 完美支持标准 solo。 如果你有 s q 的 基础,上手 duckdb 就 非常容易。你可以用非常简洁的 s q 语句完成复杂的查询任务。 比如想查平安银行最近三十天的收盘价,一条 select 语句搞定。想找出哪些股票在某个时间段数据缺失,用 graph by 和 haveen 语句就能轻松实现。这种强大的表达能力和熟悉的语法大大降低了学习成本。 最后一个也是对我们量化开发者来说。熟悉的语法大大降低了学习成本。最后一个也是对我们量化开发者来说的无缝集成。 pandas 是 我们日常工作中最常用的工具之一。 duckdb 不 仅可以直接执行 sql 查询,并将结果以 data frame 的 形式返回给我们,还能把 pandas 的 data frame 注册成虚拟表,然后用 sql 对 其进行操作。 这意味着我们可以自由切换,在 sql 的 世界和 pandas 的 世界之间发挥各自的优势,极大提升了开发效率。 这张表清晰地对比了 duckdb 与其他几种常见方案的优劣。可以看到, sq lite 虽然清亮,但性能跟不上。 my circle 或 postgr circle 功能强大,但在本地单机开发场景下显得过于笨重,需要额外安装和配置 hdf 五或 pq, 速度快,但查询起来不如私扣方便。而 csv 文件就更不用说了,性能瓶颈太明显。 综合来看, duckdb 在 零依赖、高性能支持、 circle 和 pandas 集成这几个关键点上,为本地量化研究提供了最佳平衡点, 所以结论很明确,对于大多数本地量化研究场景, duckdb 是 目前看来最理想的选择, 它解决了我们之前遇到的那些痛点,同时又保持了足够的灵活性和扩展性,确定了技术选型。接下来就是如何构建整个架构。 我们的目标是打造一个从数据源头 qmt 或讯头 api 到本地数据库,再到上层应用回测研究分析的完整闭环。 这个架构主要分为三个层次,最上面是我们的量化应用层,中间是数据访问层,负责与底层数据库交互。最下面是核心的本地 duckdb 数据库, 当然还需要一个数据同步层,负责定时增量递,把在线数据抓取到本地。这张图展示了整体的数据流向,最顶层是我们的各种量化应用,比如跑回测、做策略研究,进行数据分析, 它们通过数据访问层来读取数据。数据访问层可以提供 sq 接口或者 api 接口, 最终的数据来源就是我们精心构建的本地 duckdb 数据库。这里我们主要设计了三个核心表, stock daily 存储日线数据、 stock em 存储分中线数据、 dividends 存储分红数据, 这样应用层就可以方便地从这些表中获取所需的历史数据了。这张图聚焦于数据是如何从在线员同步到本地的,关键在于数据同步层的设计, 它需要具备几个核心能力,首先必须是增量更新,每次只下载最新的本地没有的数据,避免重复下载和浪费待宽。 其次,通常我们会设置定时任务,比如每天收盘后自动运行一次同步程序,补充当天的数据。 最后,考虑到网络不稳定,断点续传功能必不可少,确保一次同步失败不会导致所有数据丢失。 数据最终来源于 qmt 或者讯头的 xt data api。 现在我们来看看具体的表结构设计, 这是最核心的 stock day 类表自断设计上,我们包含了股票代码、日期、周期以及最基本的 o、 h、 l、 cv 数据。 特别注意复权处理,我们不仅记录了原始价格,还预计算并存储了五种常见的复权价格,前复权、后复权等比前复权等比后复权。 这样做的好处是,无论用户需要哪种复权方式,都可以在查询时直接获取,无需现场计算,极大提升性能。此外,还添加了创建和更新时间戳以及必要的锁引,保证查询效率。 这里有几个设计要点值得强调,首先是复合主键,由股票代码、日期、周期和复权类型组成,确保了每一条记录的唯一性,防止重复插入。 其次是五维赋权,这是为了满足不同分析需求,我们在存储阶段就计算好了,查询时直接取用,实现零延迟切换 时间戳字段,有助于我们追踪数据的更新状态。整个表结构设计的非常灵活,未来如果想加入基本面数据或者预计算的技术指标,也很容易扩展。 理论讲完了,我们来看看实际操作。要把数据从 qmt 拿到 duckdb, 首先要克服 qmt api 的 一些限制。 比如很多人可能会想当然地使用 starttime 和 endtime 参数来指定下载区间,但实际上 qmt 的 get market data x 函数并不支持这两个参数。 正确的做法是使用 count 参数告诉 api 你 要获取最近多少条数据,比如 count 等于两千五百,大约能覆盖十年的日线数据。 这是数据下载模块的一个完整代码。实力函数 download stock to duck db 接收股票代码和要下载的条数。首先,它调用 x data 导 get market data x 获取原始数据, 拿到数据后进行格式转换,映射到我们定义的 stock daily 表结构。这里要注意,五维赋权字段暂时先用原始价格填充,后续可以通过更新逻辑完善。 最后通过 duckdb 的 连接,先注册一个临时表,然后执行 delete 和 i n i s 操作,将新数据合并到本地数据库中。整个过程清晰明了。 全量下载一次还好,但如果每天都全量下载,那网络和时间成本就太高了, 所以增量更新是必不可少的。核心思想很简单,先查本地库,看看哪些股票的数据是最新的,哪些已经落后了。对于那些落后的股票,我们计算一下需要补多少天的数据,然后去 qmt 下载。 下载回来之后,最关键一步是过滤掉本地已经存在的数据,只保留真正缺失的部分,最后再批量写入数据库,这是增量更新的代码实现。 首先,我们用一个只读连接查询 stock daily 表,找出所有最新日期不是今天的所有股票。 对于每一只这样的股票,我们根据它落后了多少天,计算需要从 qmt 下载多少条数据。这里加了三十天的缓冲,以防周末或节假日导致数据不连续。 下载回来并转换格式后,最关键的操作是 df process date 大 于 latest date。 这一步过滤掉了本地已有的数据,只保留了真正需要补充的新数据。 最后把这些新数据收集起来,一次性写入数据库。这个增量更新策略有几个关键优化点。 第一,批量收集。我们先把所有需要更新的股票数据都下载下来,存放在内存中的列表里。最后再一次性写入数据库,减少了与数据库的交互次数,效率更高。 第二,智能过滤,通过比较日期,精确地筛选出需要插入的新数据,避免了重复和涌跃。 第三,缓冲策略,加三十天的缓冲是为了应对周末券商服务器维护或者节假日不开市的情况,确保我们不会漏掉数据。 第四,连接管理,查询时使用只读连接,写入时最后才打开一个写连接,这样可以有效管理资源。这里要特别提一下 windows 系统下的一个坑, 如果你尝试在多个进程中同时写入同一个 duckdb 文件,很可能会遇到文件所冲突的问题,导致程序崩溃。为了避免这个问题,我们引入了一个简单的连接池机制。对于读操作,我们可以并发地打开多个只读连接。 但对于写操作,我们采用单立模式,确保任何时候只有一个写连接在工作,这样就能彻底避免文件所冲突。 这个连接池类封装了,这个逻辑使用起来非常方便,这就是连接池的使用方式。当你需要查询数据时,调用 po 导 get read connection, 它可以并发地处理多个读请求。 当你需要写入数据时,调用铺导 get write connection, 这个方法会自动排队,确保写操作是串行进行的,从而安全地解决了 windows 下的文件锁问题。 这样我们的数据同步和更新过程就更加健壮和可靠了。总结一下,今天我们探讨了为什么以及如何为量化研究搭建本地数据库,重点介绍了为什么选择 duckdb 以及具体的架构设计和技术实现。 希望这个方案能帮助大家摆脱在线数据源的束缚,让量化研究更加高效、灵活和可控。 当然,这只是开始,未来还有很多可以探索和优化的空间。

各位,我们每天都在和数据打交道,但有没有觉得有些时候这些数据就像脱缰的野马,难以驾驭?特别是对于量化研究来说,在线数据员带来的这些痛点,相信大家深有体会。 这些问题本质上都指向一个核心矛盾,我们的量化研究需要的是一个稳定可控、随时可用的数据环境,但现实是,券商提供的在线数据源,比如 qmt, 它本质上是不稳定的, 服务器维护、网络波动、限流策略都可能让我们的工作被迫中断。所以,最直接有效的解决方案是什么?很简单,把数据搬到我们自己的地盘上,建立一个本地化的数据仓库。 那么问题来了,这么多数据库,我们为什么最终选择了 duckdb 呢?在选型过程中,我们考察了多种方案,包括大家熟悉的 sql lite、 my sql post、 gre sql 以及像 hdf 五 parkit 这样的列式存储格式。 最终, duck db 凭借其独特的优势脱颖而出,它就像量化研究领域的瑞士军刀,小巧、强大、好用,而且完全免费。开源 duck db 的 第一个杀手锏就是它的极简部署, 你不需要安装任何复杂的服务器进程,只需要一个 duck db 点拍文件,或者一个单独的可执行文件, 一行代码 connect 就 能创建一个完整的数据库,实力这比 circle lite 更进一步。 circle lite 虽然也轻量,但 duckdb 在 性能上是一个数量级的提升,尤其是在处理大规模金融数据时,速度惊人。 第二个核心优势是劣势,存储金融数据,尤其是 o、 h、 l、 c、 v 开盘价、最高价、收盘价、成交量,天生就是劣势存储的绝佳场景。 你想只看某只股票的收盘价, duckdb 只读取对应的列,而不是整行数据。你想计算全市场的平均涨幅, 聚合查询快如闪电。更重要的是,列式存储天然压缩率高。同样的数据量, duckdb 占用的空间可能只有传统形式存储的一半甚至更少。 第三个优势, duckdb 完美支持标准 solo。 如果你有 s q 的 基础,上手 duckdb 就 非常容易。你可以用非常简洁的 s q 语句完成复杂的查询任务。 比如想查平安银行最近三十天的收盘价,一条 select 语句搞定。想找出哪些股票在某个时间段数据缺失,用 graph by 和 haveen 语句就能轻松实现。这种强大的表达能力和熟悉的语法大大降低了学习成本。 最后一个也是对我们量化开发者来说。熟悉的语法大大降低了学习成本。最后一个也是对我们量化开发者来说的无缝集成。 pandas 是 我们日常工作中最常用的工具之一。 duckdb 不 仅可以直接执行 sql 查询,并将结果以 data frame 的 形式返回给我们,还能把 pandas 的 data frame 注册成虚拟表,然后用 sql 对 其进行操作。 这意味着我们可以自由切换,在 sql 的 世界和 pandas 的 世界之间发挥各自的优势,极大提升了开发效率。 这张表清晰地对比了 duckdb 与其他几种常见方案的优劣。可以看到, sq lite 虽然清亮,但性能跟不上。 my circle 或 postgr circle 功能强大,但在本地单机开发场景下显得过于笨重,需要额外安装和配置 hdf 五或 pq, 速度快,但查询起来不如私扣方便。而 csv 文件就更不用说了,性能瓶颈太明显。 综合来看, duckdb 在 零依赖、高性能支持、 circle 和 pandas 集成这几个关键点上,为本地量化研究提供了最佳平衡点, 所以结论很明确,对于大多数本地量化研究场景, duckdb 是 目前看来最理想的选择, 它解决了我们之前遇到的那些痛点,同时又保持了足够的灵活性和扩展性,确定了技术选型。接下来就是如何构建整个架构。 我们的目标是打造一个从数据源头 qmt 或讯头 api 到本地数据库,再到上层应用回测研究分析的完整闭环。 这个架构主要分为三个层次,最上面是我们的量化应用层,中间是数据访问层,负责与底层数据库交互。最下面是核心的本地 duckdb 数据库, 当然还需要一个数据同步层,负责定时增量递,把在线数据抓取到本地。这张图展示了整体的数据流向,最顶层是我们的各种量化应用,比如跑回测、做策略研究,进行数据分析, 它们通过数据访问层来读取数据。数据访问层可以提供 sq 接口或者 api 接口, 最终的数据来源就是我们精心构建的本地 duckdb 数据库。这里我们主要设计了三个核心表, stock daily 存储日线数据、 stock em 存储分中线数据、 dividends 存储分红数据, 这样应用层就可以方便地从这些表中获取所需的历史数据了。这张图聚焦于数据是如何从在线员同步到本地的,关键在于数据同步层的设计, 它需要具备几个核心能力,首先必须是增量更新,每次只下载最新的本地没有的数据,避免重复下载和浪费待宽。 其次,通常我们会设置定时任务,比如每天收盘后自动运行一次同步程序,补充当天的数据。 最后,考虑到网络不稳定,断点续传功能必不可少,确保一次同步失败不会导致所有数据丢失。 数据最终来源于 qmt 或者讯头的 xt data api。 现在我们来看看具体的表结构设计, 这是最核心的 stock day 类表自断设计上,我们包含了股票代码、日期、周期以及最基本的 o、 h、 l、 cv 数据。 特别注意复权处理,我们不仅记录了原始价格,还预计算并存储了五种常见的复权价格,前复权、后复权等比前复权等比后复权。 这样做的好处是,无论用户需要哪种复权方式,都可以在查询时直接获取,无需现场计算,极大提升性能。此外,还添加了创建和更新时间戳以及必要的锁引,保证查询效率。 这里有几个设计要点值得强调,首先是复合主键,由股票代码、日期、周期和复权类型组成,确保了每一条记录的唯一性,防止重复插入。 其次是五维赋权,这是为了满足不同分析需求,我们在存储阶段就计算好了,查询时直接取用,实现零延迟切换 时间戳字段,有助于我们追踪数据的更新状态。整个表结构设计的非常灵活,未来如果想加入基本面数据或者预计算的技术指标,也很容易扩展。 理论讲完了,我们来看看实际操作。要把数据从 qmt 拿到 duckdb, 首先要克服 qmt api 的 一些限制。 比如很多人可能会想当然地使用 starttime 和 endtime 参数来指定下载区间,但实际上 qmt 的 get market data x 函数并不支持这两个参数。 正确的做法是使用 count 参数告诉 api 你 要获取最近多少条数据,比如 count 等于两千五百,大约能覆盖十年的日线数据。 这是数据下载模块的一个完整代码。实力函数 download stock to duck db 接收股票代码和要下载的条数。首先,它调用 x data 导 get market data x 获取原始数据, 拿到数据后进行格式转换,映射到我们定义的 stock daily 表结构。这里要注意,五维赋权字段暂时先用原始价格填充,后续可以通过更新逻辑完善。 最后通过 duckdb 的 连接,先注册一个临时表,然后执行 delete 和 i n i s 操作,将新数据合并到本地数据库中。整个过程清晰明了。 全量下载一次还好,但如果每天都全量下载,那网络和时间成本就太高了, 所以增量更新是必不可少的。核心思想很简单,先查本地库,看看哪些股票的数据是最新的,哪些已经落后了。对于那些落后的股票,我们计算一下需要补多少天的数据,然后去 qmt 下载。 下载回来之后,最关键一步是过滤掉本地已经存在的数据,只保留真正缺失的部分,最后再批量写入数据库,这是增量更新的代码实现。 首先,我们用一个只读连接查询 stock daily 表,找出所有最新日期不是今天的所有股票。 对于每一只这样的股票,我们根据它落后了多少天,计算需要从 qmt 下载多少条数据。这里加了三十天的缓冲,以防周末或节假日导致数据不连续。 下载回来并转换格式后,最关键的操作是 df process date 大 于 latest date。 这一步过滤掉了本地已有的数据,只保留了真正需要补充的新数据。 最后把这些新数据收集起来,一次性写入数据库。这个增量更新策略有几个关键优化点。 第一,批量收集。我们先把所有需要更新的股票数据都下载下来,存放在内存中的列表里。最后再一次性写入数据库,减少了与数据库的交互次数,效率更高。 第二,智能过滤,通过比较日期,精确地筛选出需要插入的新数据,避免了重复和涌跃。 第三,缓冲策略,加三十天的缓冲是为了应对周末券商服务器维护或者节假日不开市的情况,确保我们不会漏掉数据。 第四,连接管理,查询时使用只读连接,写入时最后才打开一个写连接,这样可以有效管理资源。这里要特别提一下 windows 系统下的一个坑, 如果你尝试在多个进程中同时写入同一个 duckdb 文件,很可能会遇到文件所冲突的问题,导致程序崩溃。为了避免这个问题,我们引入了一个简单的连接池机制。对于读操作,我们可以并发地打开多个只读连接。 但对于写操作,我们采用单立模式,确保任何时候只有一个写连接在工作,这样就能彻底避免文件所冲突。 这个连接池类封装了,这个逻辑使用起来非常方便,这就是连接池的使用方式。当你需要查询数据时,调用 po 导 get read connection, 它可以并发地处理多个读请求。 当你需要写入数据时,调用铺导 get write connection, 这个方法会自动排队,确保写操作是串行进行的,从而安全地解决了 windows 下的文件锁问题。 这样我们的数据同步和更新过程就更加健壮和可靠了。总结一下,今天我们探讨了为什么以及如何为量化研究搭建本地数据库,重点介绍了为什么选择 duckdb 以及具体的架构设计和技术实现。 希望这个方案能帮助大家摆脱在线数据员的束缚,让量化研究更加高效、灵活和可控。 当然,这只是开始,未来还有很多可以探索和优化的空间。

量化交易听起来高大上,但实际操作起来是不是总感觉被各种痛点卡住?数据源授权费像座大山,压得人喘不过气? 因子计算呢,又是动量又是波动率,每个都得自己从零开始写代码,效率低到让人抓狂, 更别提批量分析了,几百只股票跑一遍等,结果等到花都谢了,策略迭代更是遥遥无期。免费的数据接口,要么三天两头抽风,要么限制一堆,用起来真是步步惊心。 好消息是,今天给大家带来的 ez factor 就是 为了解决这些痛点而生的,它是一个完全开源免费的量化因子库,核心在于它的高性能,基于 duck db 技术,让批量分析速度嗖嗖地提升,据说能快上十倍以上。 更重要的是,它内置了五十多种主流因子,从技术面到基本面应有尽有, 而且上手非常简单,几行代码就能搞定。复杂的因子分析绝对是咱们量化路上的得力助手。咱们来具体看看 easy fact 的 核心优势。第一,也是最重要的,完全免费, 基于 duckdb 本地数据库,这意味着你不用再为授权费发愁了。第二,高性能,还记得刚才说的速度提升吗? 这可不是吹牛,批量分析一百只股票,几秒钟就能出结果,效率直接起飞。第三,因子丰富,目前已经有三十九种以上,覆盖了大家常用的各类因子。 第四,开箱即用 api 设计得非常简洁直观,就算你是新手,十分钟也能跑通一个简单的例子。 最后,学习成本低,配套的市力代码和文档非常完善,让你快速掌握使用技巧。 具体支持哪些因子呢? easy factor 覆盖了五十多种类型,咱们挑几个重点说说。技术面这边,动量、反转、波动率这些经典因子都有,还区分了不同周期,比如二十日、六十日动量,方便你做不同频率的分析。 常用的技术指标,像 rsi、 max、 c、 kdj、 布林带位置也都包含在内。 量价关系方面,量比、换手率、震幅这些也都有。基本面这边,虽然目前还在框架搭建阶段,但估值类的市盈率、市净率、市值以及质量类的净资产收益、毛利率、资产负债率这些核心指标已经准备就绪,未来可期。 说了这么多优点,怎么用起来呢?其实非常简单,首先确保你的环境里装了 pandas、 nump 和 duck db 这三个依赖包。 然后看这个三分钟上手的例子。第一步,出使华 easy factor, 只需要告诉他你的 duck db 数据库路径就行了。 第二步,想算单个因子,比如平安银行的二十日动量,一行代码 get factor 就 搞定。 第三步,也是最强大的一步,批量分析,给它一个股票列表,指定时间范围。 analyze batch 一 执行,所有股票的因子值哗啦一下就出来了,效率杠杠的。 最后还能直接看综合评分,方便你快速筛选。光说理论不过瘾,咱们来看个实战案例,用 easy factor 构建一个简单的动量选股策略。 假设我们要从市场上找出近期表现强势的股票。第一步,先拿到一批股票代码,这里我们取前一百只。第二步,用 annalise batch 快 速计算这批股票的动量、 rsi 和波动率。 第三步,设定筛选条件,比如二十日动量要大于百分之十,说明近期涨势不错。 r s i 在 三十到七十之间,避免选到超买或超卖的极端行情,波动率控制在百分之三十以下,降低风险。把这些条件组合起来,一筛选符合条件的强势股就出来了,你看整个过程是不是很流畅。 为什么 easy factor 能这么快?关键就在于它的本地化计算模式。传统的量化工具很多依赖远程 api 获取数据和计算,不仅受网络宽带限制,速度慢,而且 api 通常有调用次数限制,用多了就歇菜。 而 easy factor 把数据存储在本地 duckdb 数据库中,所有计算都在本地完成,没有网络延迟,也没有调用限制。 对比一下表格里的数据,同样是分析一百只股票,传统方法可能要等三十秒, easy factor 只需三秒左右,这速度提升可不是一点半点,足足有十倍以上, 而且使用难度也大大降低,不用再折腾什么 api token 配置了。 easy factor 提供了一些核心的 api 函数,方便大家快速实现各种功能。 比如 get market data eks, 可以 获取指定股票的日线数据。 get factor 用于计算单个因子的值, 最推荐的是 analyze batch, 这个函数非常强大,可以一次性对多个股票计算多种类型的因子,比如动量、波动率、技术指标,甚至还能直接得到综合评分。 如果你需要根据多因子模型进行选股,可以使用 get comprehensive score 来获取股票的综合得分和评级,然后根据评级筛选出优质标的。 这些 api 的 设计都非常直观,一看就懂,项目的结构也很清晰,核心的模块都在 easy xt 目录下, factor library dotdb client dot pie 负责和 dotdb 数据库打交道。 学习资源放在学习实力目录里,里面有好几个视力文件,强烈推荐大家先看看 easy factor duck db 视力到 pe, 这是一个完整的功能演示,包含了大部分常用操作,还有一个可运行版的视力,适合新手快速跑起来。 对于想深入研究的,还有一个完整的实战案例,展示了从数据准备到因子分析,再到选股的完整流程, 总之,结构清晰,易于理解和扩展。为了帮助大家更好地学习和使用, easy factor 项目提供了丰富的学习资源。 首先是视力文件,前面提到了几个关键的,这里再强调一下那个完整功能演示的视力 p e y, 强烈建议仔细研读,里面包含了所有核心功能的使用方法和一些最佳实践。 还有那个可运行版的视力,非常适合新手拿来就能跑,几分钟就能看到效果。那个完整的实战案例则更适合有一定基础的朋友,可以跟着一步步复现,体验完整的量化研究流程。 此外,项目根目录下还有一个详细的 redmi 搭文档,文档里面记录了项目的详细信息,安装步骤、使用说明等等,遇到问题可以先查阅文档。 easy factor 到底能用在哪些地方呢?适用场景非常广泛,最典型的就是全市场扫描,你想快速看看市场上哪些股票符合你的某个因子特征, easy factor 的 批量分析能力让你轻松应对构建因子选股策略。无论是动量、价值还是质量因子, easy factor 都能帮你快速计算和筛选策略,回测更是不在话下。有了历史数据和因子值回测就顺理成章了。 对于做量化研究的同学,可以用它来验证因子的有效期,或者探索新的因子组合, 甚至在组合优化方面也能发挥重要作用。当然,目前版本主要针对日线数据做了优化,如果你需要更高频的数据,比如分中集或 tick 集,也可以通过扩展数据表结构和因子计算逻辑来实现。 使用过程中可能会遇到一些常见问题,这里提前给大家解答一下。第一个问题, doc d b 数据库怎么准备? 很简单,项目里通常会提供数据导入脚本,你可以把你常用的行情软件,比如通达信 qmt 导出的数据按照指定的表结构,比如 stock daily 表导入到 duckdb 里就行。 第二个问题,日期格式必须是 y y y y 年 mm 月、滴滴日这种标准格式,比如二零二四年一月一日,否则会报错。第三个问题,我想加自己的因子怎么办? ez factor 支持自定义扩展,你可以继承 ez factor 类,然后添加你自己的计算方法,非常灵活。 如果还有其他问题,欢迎查阅文档或者在社区交流。咱们再来快速总结一下 easy factor 的 核心优势, 记住这五点,第一,免费,彻底告别授权费烦恼。第二,快批量分析速度提升十倍以上,效率就是金钱。第三,权,五十多种因子覆盖主流需求。第四,减 开箱即用,十分钟上手不是梦。第五亿,配套资源丰富、学习曲线平缓。这五个优势结合起来,让 easy factor 成为了量化交易领域一个非常有竞争力的工具。那么 easy factor 主要适合哪些人群呢? 首先肯定是 python 量化学习者,想入门量化交易,又不想被繁琐的环境配置和高昂的成本劝退, easy factor 绝对是个好选择。 对于那些已经入行的量化交易个人投资者来说,它能显著降低你的开发和运行成本,让你能更专注于策略本身。如果你是对因子研究特别感兴趣,喜欢探索市场规律, easy factor 提供的丰富因子和灵活的扩展性也能满足你的需求。 最后,对于专业的算法交易开发者, easy factor 的 高性能和易用性也能帮助你更快地完成策略开发和测试,加速产品落地。心动不如行动,想体验 easy factor 的 强大功能吗? 非常简单,访问 github 上的项目地址, h t t p s 冒号斜杠斜杠 q t 杠 king 二九九斜杠 ez xt 克隆或者下载项目,按照 readme 里的说明安装必要的依赖包,然后就可以按照我们之前演示的那样导入 ez fact 模块初识化,然后开始你的量化之旅了。 核心代码就这几行,非常直观。今天的分享就到这里,不知道大家听完之后有什么想法? 平时在量化交易中,你们都喜欢用哪些因子?有没有什么特别想让 easy fact 增加的功能,或者在使用过程中遇到了什么困难?非常欢迎大家在评论区留言交流,你们的反馈对我们非常重要,谢谢大家!

各位,想必大家在量化交易的道路上都踩过这些坑,每次跑个回测,数据加载就得等半天,心急如焚,数据来源五花八门,管理起来一团糟。 想试试不同的赋权方式,那就得一遍遍地下载数据,效率低到令人抓狂, 网络一抽风,整个工作流程都得卡壳。这些问题是不是每天都在困扰着我们?面对这些痛点,有没有什么灵丹妙药呢?答案是肯定的。今天给大家介绍一位新朋友, duck db, 你 可以把它想象成一个超级高效的本地数据仓库。它最大的特点就是快,基于劣势存储技术,查询速度能比传统方法快上十倍甚至一百倍。 而且它非常清亮,就是一个单文件数据库,不需要安装任何复杂的服务器服务,直接拿来用就行。更棒的是,它完全支持标准的 sql 语法,如果你熟悉 sql 或者 panda, 上手 duckdb 简直不要太容易。 对于咱们 python 开发者来说,这简直是天作之合,无缝集成,本地运行,彻底摆脱了对网络的依赖,稳定性和可能性都大大提升。 我们来看看具体怎么解决数据获取的痛点。以前我们可能需要调用像 xqq 这样的库,每次获取数据都要在线下载。比如这个例子,下载五十一万一千三百八十四 s h。 这只股票的日线数据,光下载就要等个两三秒。 如果要做回测或者想换只股票试试,这个过程就得重复一遍,更别提网络不好的时候动不动就失败,重试简直让人崩溃。而且这种方式完全无法离线使用,电脑没网就歇菜。 现在我们有了全新的解决方案,通过我们开发的统一数据接口,获取数据变得极其简单,只需要一行代码。看这里,同样是获取五十一万一千三百八十 s h 的 数据,只需要调用 getstock data 函数, 第一次调用时,它会自动从 q、 m、 t 等平台下载数据,并且智能地将数据保存到本地的 duckdb 中。 第二次再调用或者后续任何时候,它都会直接从高速的 duck db 读取数据,速度提升百倍。 这意味着什么?意味着你可以随时随地进行离线回测,再也不用担心网络问题了。而且这个接口还内置了五维互联切换功能,后面我们会详细讲 空口无屏数据说话。这张表清晰地展示了新旧方式在性能上的巨大差异。 看第一项,单只股票获取旧方式在线下载大概需要二秒,而新方式利用 duckdb 几乎瞬间完成,提升了整整一百倍。 再看第二项,导入五十只股票的数据,以前手动操作可能要花好几个小时,现在一键导入五分钟搞定,效率提升了几十倍。 最后是回测数据加载,以前每次都要在线等,现在本地缓存后,几乎是秒开,级别提升十到一百倍。 这些数字不是吹出来的,是实实在在的效率飞跃,能让你把更多时间花在策略本身,而不是被数据拖后腿。我们团队内部有个真实的案例,更能说明问题。我们当时在优化一个网格策略,这个策略对回测速度要求很高, 原来每次启动一次回测,光是等待数据加载就要三十秒。你想啊,如果我们想测试五十组参数,那就要等足足二十五分钟。 这期间策略本身根本没法迭代,用了我们的新方案后,第一次启动还是需要三十秒,但之后的每一次启动,包括那四十九次参数测试,都只需要零点三秒, 总时间从二十五分钟缩短到了不到一分钟,策略迭代效率直接提升了一百倍,这感觉就像从自行车换成了高铁,爽不爽?在量化交易里,付权是个绕不开的话题。 不同的付权方式,比如前付权、后付权等比付权等等,会影响你的分析结果和策略表现。 以前想换一种赋权方式,往往意味着要重新计算数据,非常麻烦。我们这次做了个大升级,实现了五维赋权数据的预存储。 也就是说,在你第一次导入数据的时候,我们就已经帮你把这五种常见的赋权方式都算好了,并且分别存放在不同的列里。 你需要哪种赋权方式?只需要在 get stock data 函数里加一个 adjust 参数,比如 adjust 等于 front 就是 前赋权, adjust 等于 back 就是 后赋权。 一行代码切换零延迟背后的技术原理也很简单,就是查询时直接读取对应的预计算列,不需要现场计算,所以快如闪电。如果你刚开始搭建环境,或者想扩展数据覆盖范围,一只只股票去下载显然是不现实的。 为此,我们提供了强大的批量导入工具 universal data importer, 你 可以直接指定你想导入的板块,比如沪深三百、中证五百、创业版等等,或者导入全 a 股,甚至可以导入你自己准备好的自定义股票列表或 cv 文件, 只需要几行代码,就能把一个板块的所有股票数据一次性导入到 duckdb 中。这大大简化了初识化数据仓库的过程,让你能更快地投入到策略开发中去。 数据质量是量化交易的生命线,数据缺失或者错误会导致回测结果失真。那么,怎么知道哪些数据缺失了呢?我们内置了一个智能数据检测器 smartdata detector, 它里面包含了从二零零零年到二零三零年的 a 股完整交易日历。当你用它检测某只股票某个时间段的数据时,它会自动对比实际数据和应该有的交易日,告诉你具体缺失了哪些天,以及缺失的日期范围。 更智能的是,它还能建议你只需要下载缺失的部分,而不是整个时间段重新下载,避免了重复劳动,非常贴心。除了检测缺失,我们还提供了一个全面的数据完整性检查工具 data integrity checker, 它会从五个维度来评估你的数据质量。首先,检查是否有缺失的交易日。其次,检查数据中是否存在异常值,比如空值、不合逻辑的零值或负值。 第三,检查价格关系是否合理,比如收盘价是否在开盘价和最高价之间。第四,检查是否有异常的涨跌幅,比如超过百分之二十的极端波动。 最后,还会检查成交量是否有异常。通过这些检查,你可以及时发现数据中的潜在问题,确保用于回测的数据是高质量的,从而提升回测结果的可能性。对于一些不太喜欢敲代码的朋友,我们也准备了示画图形界面。 这个界面设计得非常直观,就像 windows 资源管理器一样,采用树形结构展示你的数据。你可以方便地设置查询条件,比如选择股票代码、日期范围、赋权方式等等,所有操作都可以通过鼠标点击完成。 同时它也集成了前面提到的五维复、全切换、数据完整性检查等功能,还有统计信息展示,让你对数据一目了然。有了这个 g u i, 即使你不是编程高手,也能轻松管理你的量化数据。 说了这么多功能,怎么快速上手呢?其实非常简单,就三步走。第一步,安装 duckdb, 一 句 pop install duckdb 搞定。 第二步,出示化数据库,用我们提供的 universal data import 连接并创建数据库。第三步,导入你关心的板块数据,比如沪深三百,指定好起止日期 之后,在你的策略代码里,只需要调用我们统一的 getstock data 函数来获取数据,它会自动判断是去 docdb 拿还是去原始源拿,优先使用 docdb 以获得极速体验, 这样你就可以专注于策略逻辑的编辑了。为了让大家更好的利用这套工具,这里分享几个最佳实践。 第一,定期更新数据市场每天都在变化,所以最好设置一个定时任务,比如每天收盘后自动补充当天的数据。 第二,批量出使化。刚开始用的时候,可以先把沪深三百、中证五百这些常用板块一次性导入,省去后续逐个添加的麻烦。 第三,定期检查数据质量。建议每个月或者每个季度运行一次数据完整性检查,确保你的数据仓库始终处于健康状态。遵循这几点,你的数据管理工作会更加顺畅高效。 我知道大家可能会有一些疑问,这里提前解答几个最常见的。第一个问题, doc db 文件会不会很大? 完全不用担心,它用了劣势存储和压缩技术,一千只股票的日线数据也就几百 mb, 非常小巧。第二个问题,支持分钟数据吗?当然支持, 无论是一分钟线还是五分钟线, doc db 都能轻松应对,性能依然杠杠的。第三个问题,备份和迁移怎么办? 太简单了, doc db 就是 一个文件,直接复制粘贴就行了。第四个问题,我在多台电脑上怎么同步数据也很方便,把那个 ddb 文件放到坚果云、百度网盘之类的云盘里,几台电脑就能自动同步了。 基本上你想得到的问题我们都考虑到了。总结一下,通过引入 docdb 和我们配套的一系列工具,我们成功解决了量化交易数据管理中的诸多痛点, 速度提升了十到一百倍,彻底告别了数据加载瓶颈,支持离线回测,再也不怕断网。五维赋全灵,延迟切换灵活高效,批量导入一键搞定,初步化智能缓存,自动管理,省心省力。 最终的核心收益是什么?就是让你的策略迭代效率提升数十倍,把更多宝贵的时间和精力真正投入到策略的思考和优化中去。希望今天的分享能给大家带来启发,谢谢!

老规矩,那些千元档的蛋壳咱们不整了,才百元档还能平替好几千的鞋子了解一下?第一双 vs 二步路,这样演的赛车蓝配色能让你在人群中脱颖而出,而且纯皮革的鞋面日常脏了,打理起来也非常方便,相当于三千多的坑 tacky 档,就算踩百元档的 vs 二部,确实很难让人不心。 第二双 goes three 耐脏的卡其色鞋面,哪怕脏了也很难看得出泡面,中底的小升级也能让你摆脱上脚硬邦邦的不。 第三双大卡怪鞋身表面用了网眼部、皮革、绒面格三种材料混合而成,还有外露的缝线和拼接,小细节才六字头就拥有了大几千的结构元素,可以说是诚意满满。 ok, 跟着冷门的宝藏鞋子安利,我们下期继续!