DolphinDB 用户入门指南之金融篇(1)
1. DolphinDB 在金融场景下的应用
金融行业因其业务的多样性和复杂性,每日产生包括交易记录、市场数据、客户信息等在内的海量数据。随着交易员对策略和数据分析需求的不断增长,数据的存储和分析对交易系统提出了极高的要求,尤其是在需要极低延时和极速响应的高频数据计算和分析方面。然而,传统数据库和硬件升级方案在成本、拓展性、性能和可靠性方面已难以满足这些日益增长的需求。幸运的是,近年来大容量内存、高速网络以及分布式集群架构等技术的发展,为金融行业提供了新的数据存储和分析解决方案。这些技术不仅降低了成本,还提高了系统的拓展性、性能和可靠性,从而更好地适应金融行业对大数据管理的需求。
在此背景下,DolphinDB,一款高性能时序数据库兼实时计算平台应运而生。DolphinDB 集成了分布式存储、分布式计算、时序分析、高性能计算、流式处理等多项技术于一体,可以很好地支持复杂的时序分析与实时流处理场景,为之提供高性能、低延时、海量存储的一体化解决方案。
目前 DolphinDB 在金融领域已签约银行、券商、公募、私募、资管、理财等领域的头部机构,在行情中心、数据中心、因子开发、投研、交易监控等场景提供了众多成熟的解决方案,如:
- 数据存储:实时数仓、实时行情存储、中高频因子存储
- 数据处理:K 线合成、订单簿合成(任意频率、衍生指标、自定义指标)
- 因子挖掘:因子存储、流批一体因子计算(提供了内置的千余指标函数以及 TA-lib,Alpha101 等因子库)
- 策略回测:行情回放、模拟订单撮合、投资组合优化、Alphalens 回测框架
- 风控和绩效归因:Barra 多因子模型、Campisi 和 Brinson 绩效归因模型
- 实时计算:实时高频因子计算、实时计算涨幅、实时计算资金流、实时选取外汇行情最优价源
- 机器学习:XGBoost 插件、Shark GPLearn(GPU 加速因子挖掘)、AI DataLoader (便捷的 PyTorch 模型训练数据导入工具)
2. 教程阅读说明
本教程旨在为从事金融行业的新用户进行入门学习上的指引,并为其后续工程上的使用和进阶学习打下基础。通过本入门教程的学习,可以基本掌握如何利用 DolphinDB 进行建库建表、数据导入与清洗、脚本编程、SQL 基础的库表操作、流计算框架构建、并发任务调度等工程中基础且必不可少的操作。
本章为阅读教程前的指导章节,包含本教程的阅读指引、本教程涉及的数据下载以及快速上手的指导。
2.1 安装部署指导
阅读本教程前请确保 DolphinDB 已经下载(下载页面:产品 - DolphinDB )并部署完成(部署教程:部署 )。
注:
Linux 版本比 Windows 版本更稳定、更容易定位问题,且兼容更多插件。对于环境为 Windows 系统的个人用户,推荐用户通过 WSL 进行部署。
对于仅需要测试 DolphinDB 功能的用例,下载 Windows 版本能够满足需求。然而,若计划将DolphinDB 用于生产环境,建议选择 Linux 平台进行部署。
2.2 教程环境和数据源说明
实验环境说明
本教程的实验环境如下:
- server 版本: 3.00.1.2 2024.07.30 LINUX x86_64
- 部署方式:单节点 single mode
社区版单节点部署示例(Linux)
注:
社区版: DolphinDB 对所有用户免费下载的一个版本,与付费版本的区别在于,社区版资源受到约束:最多 2 节点(数据节点/计算节点),每节点可用 2CPU 核、8GB 内存。
单节点:指在物理机或虚拟机上运行单个 DolphinDB server 实例(进程)。这种部署方式通常用于开发、测试和学习目的,因为它简化了环境配置,降低了资源需求。
在本页面选择下载的版本:

图 2-1 软件下载页面
下载后,解压 zip 包,并进入 server 目录:
unzip DolphinDB_Linux64_V3.00.1.2.zip -d <YOUR_PATH>
cd <YOUR_PATH>/server
图 2-2 解压后的路径示意图
server 目录中,dolphindb 为 server 可执行文件,请确保该文件有执行权限。
chmod +x dolphindbdolphindb.cfg 为数据库配置文件,用户可以通过添加或修改配置项,对数据库的日志、内存、性能、网络等方面进行配置。启动前,请配置 localSite 中端口号为空闲端口(默认是 8848)。

图 2-3 配置项示意图
参数配置示例:
- 例1:修改数据存储路径,需要在配置文件中添加 volumes 配置项(以配置多个磁盘为例):
注:
如果以单机集群方式进行部署,在 cluster.cfg 配置文件中配置 volumes 时,需要确保不同节点的存储路径不会重叠,一个简单的方式是使用宏变量 <ALIAS>,例如volumes=/hdd/hdd1/volumes/<ALIAS>, /hdd/hdd2/volumes/<ALIAS>;或者可以通过“dnode1.volumes=/hdd/hdd1/volumes/dnode1” 的方式进行配置,其中 dnode1 是节点别名,在 cluster.nodes 文件中配置。
- 例2:需要开启流数据持久化功能,需要在配置文件中添加 persistenceDir 配置项:
配置完毕后,启动 server:
- 前台启动
./dolphindb- 后台启动
sh startSingle.shHINT:windows 版本后台启动脚本为对应的 vbs 文件。
若 server 无法启动,请检查 dolphindb.log 日志中是否有异常信息,并参考文档 节点启动异常 进排查。
启动成功后,用户可以在 web 端输入 <ip:port>,如 localhost:8848 打开 Web 管理器。

部分系统运维函数和库表创建对用户的权限有一定要求。初始条件下,默认用户为 guest,社区用户可以点击右上角的用户头像,选择 Log in 选项,然后通过 admin 账号进行登录:

图 2-5 登录页面
登录后,点击左侧的 Shell 模块即可执行简单的代码进行测试。
如果要构建项目,用户可以通过 VSCode 或者 GUI 客户端连接 server 执行脚本。以 VSCode 为例,下载 DolphinDB 拓展后,点击左侧的数据库图标,在 setting.json 中必须修改配置参数 “url” 为 “ws://<连接节点 ip>:<连接节点 port>”,其余参数均为可选配置:

图 2-6 VSCode 登录配置文件
配置完成后,可以在任意用户的工作目录下,创建任意一个以 “.dos” 为尾缀的文件,编写 DolphinDB 脚本。脚本执行有两种方式:(1)点击右上角的执行按钮执行;(2)按快捷键 ctrl+E 执行。

图 2-7 执行按钮示意图
数据说明
本教程提供的数据均为模拟数据,范围包含: Level2 的逐笔数据、Level2 快照数据。
本教程通过模块 MockData 模拟数据,用户下载附录的 MockData.dos 文件后,需将该文件置于 <homeDir>/modules/ 路径目录下,其中 <homeDir> 默认是 server 主目录(由配置项 homeDir 指定),用户也可以在线调用getHomeDir()函数获取该路径。

图 2-8 模块安装示意图
模块安装后,在客户端中通过脚本 use MockData 导入该模块后,即可调用模块内部的函数产生模拟数据。
教程代码说明
- 在执行代码时,请确保代码中的变量 <YOUR_PATH> 已经替换成您自己的路径(建议使用绝对路径),如 “/home/usr/data”。请注意,如文档中无特殊说明,该路径必须是 DolphinDB server 所在物理机的路径而不是客户端的路径。
- 部分代码依赖上文创建的库表,测试脚本前请参考教程说明,预先建库建表。
2.3 如何快速上手
快速配置数据库
DolphinDB 数据库的内存、线程、网络、文件、流数据等等资源都可以通过离线的配置项文件或在线函数进行配置和修改。下面简述两种方式的具体操作:
(1)配置文件:下载 DolphinDB 后,打开安装包中的配置项文件,添加或者修改相关配置信息即可。配置文件路径如下:
表 2-1 不同部署场景下的配置项路径说明
| 部署 | 默认配置目录 | 相关配置项 |
|---|---|---|
| 单节点环境 | <安装目录>/server/dolphindb.cfg | config |
| 集群环境 | <安装目录>/server/clusterDemo/config/数据节点、计算节点:cluster.cfg控制节点:controller.cfg代理节点:agent.cfg节点网络信息配置:cluser.nodes | confignodesFileclusterConfig 注: |
注:更多参数说明请参考 参数配置。注意:增加或修改配置后,重新启动 DolphinDB 服务,即可生效;用户通过在线调用 getConfig 函数获取配置项的值。
(2)在线函数:可以通过 setDynamicConfig 函数在线动态修改部分配置项的值,但注意在线动态修改的配置重启后会失效,若需要永久化需在配置文件进行修改。
快速开始编写 DolphinScript
DolphinDB 编程对以下用户天然友好:
- 有 SQL 编程经验的用户:DolphinDB SQL 语法基本兼容 SQL-92 标准。兼容性可参考 SQL 标准化 。
t1 = table(2024.01.01 + (0 31 60 91 121) as date, 1.2 7.8 4.6 5.1 9.5 as value)
t2 = table(2024.02.01 + (0 15 90) as date, 1..3 as qty)
SELECT * FROM t1 LEFT JOIN t2 ON t1.date = t2.date- 有 Python 编程经验的用户:DolphinDB 和 Python 一样都是动态类型语言,即声明变量无需指定变量类型。此外,DolphinDB 在函数定义、函数调用、传参方式上都与传统编程语言类似。
def f(a, mutable b, c=1){
if(a < b){
b*=c
}else{
b*=-c
}
return b
}
f(6, 10)对有编程经验的用户而言,上手写脚本并不会成为学习瓶颈,真正有难度的是如何编写出高性能且简洁的脚本。尤其在金融数据分析领域,对计算响应延时往往要求很高,高性能是用户关注的核心点。
为了提高脚本性能,用户需要牢牢把握两个核心的思维方式:向量式和函数式,这两个思维是编写出高效简洁脚本的关键。
- 向量式编程,简单来说就是允许程序员以数学向量(即一组数值)作为操作的基本单位,而不是单个的标量数值。在向量式编程中,操作和函数可以直接应用于整个数组或矩阵,而不需要使用显式的循环结构。
该编程方式主要得益于 DolphinDB 在指令集上的优化,例如二元运算时,将 1 对 1的两两元素运算拓展到 n 对 n 的并发计算;或对单个向量计算时,在算法上通过增量计算优化函数的性能。使用经过向量化优化的函数计算,其性能远远高于传统遍历的方式。
例. 比较循环遍历和向量化计算两个向量和的性能开销。
n = 10000
a = rand(10.0, n)
b = rand(10.0, n)
c = array(DOUBLE, n)
timer for(i in 0:n){
c[i]=a[i]+b[i]
} // Time elapsed: 22.021 ms
timer c=a+b // Time elapsed: 0.069 msDolphinDB 绝大部分函数均支持向量计算,内部通过向量化的方式优化了函数的性能,因此要运用好向量化的思维,就要灵活的掌握各种函数的应用。
- 函数式编程,一种以函数为中心的编程范式。函数式编程强调纯函数,即输入决定输出,不依赖外部状态且无副作用。由于没有副作用,多个线程和进程可以并发执行,同时代码方便调试且能够在不同环境进行复用;由于函数链式组合编写代码,代码也会更简洁、可读性也会更高。
例. 使用函数式编程的方式实现:计算两个内存表存在不同之处的所有行号。
t1 = table(`A`B`C as id, 1000 2000 1000 as qty, 50.5 60.5 100.0 as price)
t2 = table(`A`B`C as id, 1000 2100 1000 as qty, 50.5 60.5 100.0 as price)
byRow(all, byColumn(eq, t1, t2)).not().at()
// 或使用高级函数模式符号替代
eq:V(t1, t2).all:H().not().at()利用好函数式编程,可以编写出更简洁的脚本。其编程的关键点在于高阶函数、链式调用、纯函数。
为了更好领悟上述的编程特点和编程思想,下文将通过一个完整连贯的案例,一步步带领大家搭建一个基础的 DolphinDB 项目。
2.4 阅读指引
针对不同从业方向人群,本教程推荐的阅读指引如下:
- 数据平台开发与运维人员:主要阅读第 3~5 章,这些章节介绍了建库建表、数据导入、数据清洗和预处理等方面的内容。
- 数据分析人员 :主要阅读第 5~7 章,这些章节介绍了 SQL 编程(聚合、时序等)、流计算框架(流订阅、引擎级联计算等)等方面的内容。
- 每个章节都提供了常见问题的解决引导和下一步阅读的指南,供用户参考。
对于初学者,入门 DolphinDB 时,可以优先在金融场景案例中搜索是否有和自己场景类似的案例,进行阅读实操。在学习的过程如遇问题,建议优先在用户手册和 ask 社区搜索相关问题,如无法解决可以通过社区、邮件等途径寻求技术支持。