在量化交易系统中,在哪里以及如何记录余额呢,这篇文章将会分享一个使用 MongoDB 官方云服务的思路。
MongoDB 是一款面向文档的数据库软件,和关系型数据库相比,优势在于条目的数据结构很灵活。要存储余额的话,可以每隔 N 分钟新建一条存储,数据内容是各个账户的余额数字。
MongoDB 都有官方提供的云服务,并且有免费的基础版。
官方云服务对我们个人用户来说非常方便,它免去了购买服务器搭建维护服务的工作,并且开通使用时不需要绑定信用卡,无需担心扣费问题。
MongoDB 的云服务免费版,容量大小限制为 512 MB,对我们记录余额来说也完全够用。
进入 https://www.mongodb.com ,点击右上角免费试用完成账户注册。
MongoDB Atlas 就是 MongoDB 的云服务,注册完成后登录进入 MongoDB Atlas。
依次创建项目和创建免费的数据库。为和 Grafana 的相匹配,区域我选择亚马逊 AWS 的亚洲新加坡。数据库添加用户(别忘了记下账号密码),添加允许访问的 IP 段(暂时填 0.0.0.0/0,后续有需要再进行限制)。
因为我已经开通,过程我也不再详细记录了,网上搜索“MongoDB 免费”可以找到相关教程。
上图是一段币圈的示例代码,用于获取所有子账户的余额并入库。股票和期货的原理相同,不同之处在于获取余额调用的 Api 不同。
代码首先连接了数据库,并指定了需要存入数据的库名 account 和表名 balances。
然后初始化了 CCXT,并用它的「私有 Api」获取所有子账户的余额。
所有子账户的余额经过处理,组成了新的数组,数组的每一项代表一个账户的余额,用 json 格式来表示。json 中 account 代表账户名,balance 数字表示余额。
最后,调用 pymongo 的 insert_one 函数将这个余额数组联同当前时间,插入到数据表中。
格式如下图所示,time 代表当前时间,balances 代表所有子账户余额的数组。
每执行一次上面的 Python 脚本,就会插入一条当时的余额信息,这就需要机器来定时自动执行。
我将这个脚本放在了 Linux 系统下执行,所以选择了 crontab 来执行定时任务。
定时脚本如上图所示,每小时的第 2、22、42 分钟的时候,执行一次上面的余额入库 Python 脚本。
这样每小时有 3 条数据,每天有 72 条数据,每年有 26280 条数据,数据量完全在 MongoDB 免费版的承载范围内。
打开 MongoDB Atlas 管理后台,进入我插入数据的数据库和表。
可以看到余额数据存在,并且是 Python 脚本所创建的数据结构。
对于已经存储的余额数据,可以继续编写程序展示和分析。
我的另一篇文章《搭建免费的量化交易看板》,展示了如何用 Grafana 读取上述存储的余额数据,并用图表展示出来,有兴趣的朋友可以阅读。
MongoDB 是一种 NoSQL 数据库,它可以存储的数据,其结构可以不必像关系型数据库一样事先定义。这方便我们在一条数据中,存储一个数组,用来表示所有账户的余额信息。很多关系型数据库也有存储 json 的功能,但不如 MongoDB 这种原生 NoSQL 数据库使用方便。
MongoDB 提供了免费版本的官方云服务,这让我们个人量化交易者免去了搭建维护数据库的工作,并且免费版的 MongoDB 在我们的数据量不大的情况下够用。
数据库不仅可以存储余额数据,也可以存储其他诸如订单和仓位数据,这对事后分析量化策略都有帮助。
股票账户余额
8 月前
微信交易通知
所有脚本列表
11 月前
板块置顶 微信交易通知
数字货币移动平均线交叉
10 月前
微信交易通知
期货移动平均线交叉
10 月前
微信交易通知
股票移动平均线交叉
11 月前
微信交易通知
商品期货委托单
10 月前
微信交易通知
商品期货成交
10 月前
微信交易通知
商品期货持仓
10 月前
微信交易通知
商品期货余额
10 月前
微信交易通知
币安子账户余额
10 月前
微信交易通知
币安账户余额
10 月前
微信交易通知
币安合约仓位
10 月前
微信交易通知
搭建免费的量化交易可视化系统
1 年前
教程
脚本部署指南
11 月前
板块置顶 微信交易通知
如何安装 Miniforge Python 发行版
1 年前
教程