docs/community/info/database.md
VeighNa Trader目前支持以下八种数据库:
SQLite是一个轻量的嵌入式数据库,无需安装和配置数据服务程序,是VeighNa的默认数据库。适合入门新手用户,其特点如下:
SQLite在VeighNa Trader中配置时,需填写以下字段信息:
| 字段名 | 值 | 是否必填 |
|---|---|---|
| database.name | sqlite | 可选(不填默认使用sqlite) |
| database.database | 数据库文件(相对于trader目录) | 必填 |
SQLite配置示例如下所示:
| 字段名 | 值 |
|---|---|
| database.name | sqlite |
| database.database | database.db |
MySQL是目前主流的开源关系型数据库,其特点如下:
MySQL在VeighNa Trader中配置时,需要填写以下字段信息:
| 字段名 | 值 | 是否必填 |
|---|---|---|
| database.name | "mysql" | 必填 |
| database.host | 地址 | 必填 |
| database.port | 端口 | 必填 |
| database.database | 数据库名 | 必填 |
| database.user | 用户名 | 可选 |
| database.password | 密码 | 可选 |
MySQL配置示例如下所示:
| 字段名 | 值 |
|---|---|
| database.name | mysql |
| database.host | localhost |
| database.port | 3306 |
| database.database | vnpy |
| database.user | root |
| database.password |
PostgreSQL是特性更为丰富的开源关系型数据库,只推荐熟手使用。相比于MySQL,其特点如下:
PostgreSQL在VeighNa Trader中配置时,需要填写以下字段信息:
| 字段名 | 值 | 是否必填 |
|---|---|---|
| database.name | "postgresql" | 必填 |
| database.host | 地址 | 必填 |
| database.port | 端口 | 必填 |
| database.database | 数据库名 | 必填 |
| database.user | 用户名 | 必填 |
| database.password | 密码 | 必填 |
PostgreSQL配置示例如下所示:
| 字段名 | 值 |
|---|---|
| database.name | postgresql |
| database.host | localhost |
| database.port | 5432 |
| database.database | vnpy |
| database.user | postgres |
| database.password | 123456 |
请注意,VeighNa不会主动为关系型数据库创建数据库,所以请确保所填写的database.database字段对应的数据库已经创建好了。若未创建数据库,请手动连接数据库并运行该命令:
create database <填写的database.database>;
MongoDB是一个基于分布式文件储存(bson格式)的非关系型数据库,其特点如下:
MongoDB在VeighNa Trader中配置时,需要填写以下字段信息:
| 字段名 | 值 | 是否必填 |
|---|---|---|
| database.name | "mongodb" | 必填 |
| database.host | 地址 | 必填 |
| database.port | 端口 | 必填 |
| database.database | 数据库名 | 必填 |
| database.user | 用户名 | 可选 |
| database.password | 密码 | 可选 |
| database.authentication_source | 创建用户所用的数据库 | 可选 |
MongoDB的带认证配置示例如下所示:
| 字段名 | 值 |
|---|---|
| database.name | mongodb |
| database.host | localhost |
| database.port | 27017 |
| database.database | vnpy |
| database.user | root |
| database.password | |
| database.authentication_source | vnpy |
InfluxDB是专门针对时间序列数据存储设计的非关系型数据库,其特点如下:
在安装时需要选择2.0版本的InfluxDB。
请注意,运行influxd.exe的cmd需要保持运行,如果关闭则会导致InfluxDB退出,或者也可以使用一些辅助工具将其注册为后台运行的Windows服务。
InfluxDB在VeighNa Trader中配置时,需要填写以下字段信息:
| 字段名 | 值 | 是否必填 |
|---|---|---|
| database.name | "influxdb" | 必填 |
| database.host | 地址 | 必填 |
| database.port | 端口 | 必填 |
| database.database | 数据库名 | 必填 |
| database.user | 用户名 | 必填 |
| database.password | 密码 | 必填 |
InfluxDB配置示例如下所示:
| 字段名 | 值 |
|---|---|
| database.name | influxdb |
| database.host | localhost |
| database.port | 8086 |
| database.database | vnpy |
| database.user | root |
| database.password | 12345678 |
DolphinDB是浙江智臾科技有限公司研发的一款高性能分布式时序数据库,特别适用于对速度要求极高的低延时或实时性任务,其特点如下:
尽管DolphinDB是商业软件,但是也提供了免费的社区版,在安装时需要选择2.0 Beta版本。
请注意:
需要填写以下字段:
| 字段名 | 值 | 是否必填 |
|---|---|---|
| database.name | "dolphindb" | 必填 |
| database.host | 地址 | 必填 |
| database.port | 端口 | 必填 |
| database.database | 数据库名 | 必填 |
| database.user | 用户名 | 必填 |
| database.password | 密码 | 必填 |
DolphinDB配置示例如下所示:
| 字段名 | 值 |
|---|---|
| database.name | dolphindb |
| database.host | localhost |
| database.port | 8848 |
| database.database | vnpy |
| database.user | admin |
| database.password | 123456 |
Arctic是由英国量化对冲基金Man AHL基于MongoDB开发的高性能金融时序数据库,其特点如下:
请注意,因为Arctic目前不支持Python3.10,所以VeighNa Studio 3.0.0没有提供Arctic支持。
| 字段名 | 值 | 是否必填 |
|---|---|---|
| database.name | "arctic" | 必填 |
| database.host | 地址 | 必填 |
| database.port | 端口 | 必填 |
Arctic配置示例如下所示:
| 字段名 | 值 |
|---|---|
| database.name | arctic |
| database.host | localhost |
| database.database | vnpy |
LevelDB是由Google推出的高性能Key/Value数据库,其特点如下:
请注意,因为LevelDB目前不支持Python3.10,所以VeighNa Studio 3.0.0没有提供LevelDB支持。
| 字段名 | 值 | 是否必填 |
|---|---|---|
| database.name | "leveldb" | 必填 |
| database.database | 数据库名 | 必填 |
| database.port | 端口 | 必填 |
LevelDB配置示例如下所示:
| 字段名 | 值 |
|---|---|
| database.name | leveldb |
| database.database | vnpy_data |
本文档以MySQL为例,介绍数据库的配置过程。
首先在MySQL官网下载Windows版本安装包【MySQL Installer for Windows】,如下图所示:
下载完成后得到msi格式的安装包,双击打开后选择【Full】模式安装MySQL,一路点击【Next】按钮即可完成安装。
安装过程中将会自动从网站下载相关组件,先点击【Execute】按钮来补全,再点击【Next】按钮。
安装过程中将会要求输入3次密码,这里为了方便演示,我们将密码设置为1001,请在自己安装的过程中使用更加复杂安全的密码。
安装完毕后会自动打开MySQL的图形管理工具MySQL WorkBench,点击菜单栏【Database】->【Connect to Database】,如下图所示:
在弹出的对话框中,直接选择默认数据库Local Instance MySQL,然后点击【OK】按钮连接MySQL数据库服务器。
在自动打开的数据库管理界面中,点击下图中菜单栏红色方框的按钮,来创建新的数据库。在【Name】中输入“vnpy”,然后点击下方的【Apply】按钮确认。
在之后弹出的数据库脚本执行确认对话框中,同样点击【Apply】即可,这样就完成了在MySQL WorkBench的所有操作。
随后启动VeighNa Trader,点击菜单栏的【配置】,设置数据库相关字段:
database.name: mysql
database.database: vnpy
database.host: localhost
database.port: 3306
database.user: root
database.password: 1001
填写完毕后如下图所示:
保存完成配置修改后,重启VeighNa Trader来启用新的数据库配置。重启后,在打开VeighNa Trader的过程中若无报错提示,则说明MySQL数据库配置成功。
脚本使用前,请先按照上文配置好使用的数据库, 使用时调用相应的函数接口。
from datetime import datetime
from typing import List
from vnpy.trader.constant import Exchange, Interval
from vnpy.trader.database import get_database
from vnpy.trader.object import BarData, TickData
# 获取数据库实例
database = get_database()
# 合约代码,888为米筐的连续合约,仅用于示范,具体合约代码请根据需求自行更改
symbol = "cu888"
# 交易所,目标合约的交易所
exchange = Exchange.SHFE
# 历史数据开始时间,精确到日
start = datetime(2019, 1, 1)
# 历史数据结束时间,精确到日
end = datetime(2021, 1, 20)
# 数据的时间粒度,这里示例采用日级别
interval = Interval.DAILY
如数据库指定时间段没有数据,返回空列表
# 读取数据库中k线数据
bar1 = database.load_bar_data(
symbol=symbol,
exchange=exchange,
interval=interval,
start=start,
end=end
)
# 读取数据库中tick数据
tick1 = database.load_tick_data(
symbol=symbol,
exchange=exchange,
start=start,
end=end
)
请注意,示例中的bar_data和tick_data均未在示例中展现获取和转换方法。如需以脚本方式写入,请自行参考源码或其他途径,转换成示例中的数据结构。
# 需要存入的k线数据,请自行获取并转换成所需的形式
bar_data: List[BarData] = None
database.save_bar_data(bar_data)
# 需要存入的k线数据,请自行获取并转换成所需的形式
tick_data: List[TickData] = None
# 将tick数据存入数据库
database.save_tick_data(tick_data)
无法恢复,请谨慎操作
# 删除数据库中k线数据
database.delete_bar_data(
symbol=symbol,
exchange=exchange,
interval=interval
)
# 删除数据库中tick数据
database.delete_tick_data(
symbol=symbol,
exchange=exchange
)