小散量化炒股记|使用MySQL管理股票数据的操作模版来啦


f44adbfde9b8f09fcb1061a4d3d8d029.png

前言

00ac527b1c17b43569be02c06417d75c.png

数据是量化交易的源头,如何高效地管理大量数据是量化交易分析中非常关键的环节。数据库就是最佳的解决方案。

通过API接口获取到股票行情数据之后,我们可以存入到数据库之中,这样下次调用的时候只需要从本地数据库中获取即可。

目前流行的数据库有Oracle、MySQL、MongoDB、Redis、SQLite……关于数据库的选型通常取决于性能、数据完整性以及应用方面的需求。每个数据库都有它的特点和最适合的应用场合。

我的书籍《Python股票量化交易从入门到实践》上推荐的是轻型数据库SQLite,适用于无须多用户访问,数据容量小于2TB,无须海量数据处理的小型应用场景。

如果追求更全面的功能、更强大的性能,特别在并发处理上要求高效的话,MySQL无疑是所有大型数据库中最为流行的一个。

不少星球会员反馈,想学习关于MySQL作为股票量化数据库的操作方法。比如

“如何为每个股票在MySQL中创建表?”

“每天获取的股票数据怎么存入到MySQL数据库中?”

“如何从MySQL中取出我们想要的股票数据呢?”

……

接下来就为大家解锁新的技能!


e287c61a14ecb2a60b96298631b13de6.png

如何安装MySQL

c0213e4be12867f15d88792ebec017c0.png

小散量化炒股记|如何用MySQL搭建本地股票量化数据库


dc82c9cb2e869ad0e76f1fb935839d14.png

如何创建个股数据表

2c8d110d9627c3351cf5dba51b8486df.png

存储股票数据需要先为该股创建一个数据表。完整的创建表的语句如下所示:

ae86cd4e09f201c6eefd8b4a886e4af9.png

为大家解读下语句的含义,遵循的SQL语法格式为:

CREATE TABLE <表名> ([表定义选项]);

其中,[表定义选项]的格式为:<列名1> <类型1> [,…] <列名n> <类型n>

“CREATE TABLE”是创建表的关键字。这里的表名是 “minute_tb”,表定义的选项包括了ID、时间戳、股票代码、最高价、最低价、收盘价、开盘价、成交量、成交额、涨跌幅、描述。

“PRIMARY KEY”关键字是来指定数据表的主键的,我们既可以为表中的一个字段设置主键,也可以为表中多个字段设置联合主键。但是不论使用哪种方法,在一个表中主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。此处我们把“ID”字段设置为了数据表的主键约束,

我们把“ID”字段添加 AUTO_INCREMENT属性来实现主键自增长。当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。需要注意的是:

一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。

AUTO_INCREMENT约束的字段必须具备 NOT NULL 属性。

AUTO_INCREMENT 约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等)。

AUTO_INCREMENT 约束字段的最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT 就会失效。


f80f9759f224c8ce2e9f58b80d493f05.png

如何避免重复创建数据表

962a195ed0542fe50d3d21fb30be73b9.png

在更新股票数据时,如果数据库中不存在该股的数据表,那么我们需要为这个股票创建一个数据表,但是如果已经存在数据表的话,只需要更新数据就行。

我们可以使用SQL语句“show tables”获取当前数据库中所有表的名称,然后查看其中是否包含该股的数据表即可。

4e7882f24ea5f854091c2ce0e80c41e8.png




f3b64fc3cbc857d50de335d025b9e684.png

如何插入股票数据表

53b1f09f3b95198326bce08f8be3e68f.png

每天收盘后要把当天新增的股票数据插入到数据表中,可以使用“INSERT INTO”语句。

insert into有两种语法,分别如下:

一种语法无需指定要插入数据的列名,只需提供被插入的值即可,比如INSERT INTO table_name VALUES (value1,value2,value3,...);  

另外一种是需要指定插入数据的列名,并且插入的值需要和列名一一对应:

cursor.execute("INSERT INTO minute_tb (ID, Time, Code, High, Low ,Close, Open, Volume, Amount, PctChg, Description) \
            VALUES (1, '2019-1-1', 600123, 10.12, 10.12, 10.12, 10.12, 111111, 10.12, 2.12, 'TP')")



6f2ecfc9939f1e18fd9120a67a6ffd01.png

如何更新股票数据表

8d72f0475e4ff3a4bd0c875a35653f8e.png

如果要更新数据表中已有的数据,那么可以使用“UPDATE” 语句。需要注意的是,使用“UPDATE”时WHERE 子句规定哪条记录或者哪些记录需要更新,如果省略了 WHERE 子句,所有的记录都将被更新!

如下所示,是让ID为1的那条数据额Code更新为“600888”“

cursor.execute("UPDATE minute_tb set Code = 600888 where ID=1")

174db5d73380897630c4c7ec53e81115.png

如何查询股票数据表

995c39de0c0ec5c09eee8e7f0dd2ea49.png

在分析股票的时候就需要从数据库中查询个股数据表中的数据了,此时可以使用 “ SELECT”语句,这里的“*”号是表示从数据表中获取全部的数据。如果要再针对性地获取数据,可以在语句中增加条件判断。

然后再通过fetchone()返回满足条件的一行数据,或者通过fetchall()返回满足条件的全部数据。

cursor.execute("select * from minute_tb")

a204e8a2b037def5b2a43bfb813aeaca.png

如何删除股票数据表

5a9b491f459622cb0c1d418c5f6c1c04.png

为了对数据库做有效率的管理,有时候我们会决定我们需要从数据库中删除一个表格。此时使用“DROP TABLE”语句删除股票数据表:

cursor.execute("DROP TABLE minute_tb")

说明

完整代码我们会上传星球《Python量化场景编程技巧与方法》。

关于数据库是否要分表?如何分表?可以关注星球《Python量化场景编程技巧与方法》中的介绍。

《Python量化场景编程技巧和方法》围绕《玩转股票量化交易》中涉及到的一些内容,分享一些偏基础的关于Python编程技巧、Pandas编程技巧、数据库技巧、可视化编程技巧等等。
加入星球《玩转股票量化交易》的会员可以免费加入星球《Python量化场景编程技巧与方法》,微信联系我加入!!

990ebfbc3944701e225b2c457af9ce7b.png

元宵大师的量化交易书籍开售!!
京东、当当、天猫有售!!

bb44a0df52e7569b20c90615b94b72ab.png

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
量化交易是利用数学和统计模型来进行股票交易的一种方法。在量化交易中,数据库的设计对于数据的存储和查询效率非常重要。MySQL是一种常用的关系型数据库管理系统,可以用于存储和管理量化交易中的股票数据。 在设计MySQL数据库时,可以考虑以下几个方面: 1. 表的设计:根据需求,可以设计多张表来存储不同类型的数据,例如股票基本信息表、交易数据表、财务数据表等。每张表应该有一个主键来唯一标识每条录。 2. 数据类型的选择:根据数据的特点和需求,选择合适的数据类型来存储数据。例如,使用整型来存储股票代码、日期等,使用浮点型来存储价格、成交量等。 3. 索引的创建:对于经常需要查询的字段,可以创建索引来提高查询效率。例如,对于交易数据表,可以创建股票代码和日期的组合索引。 4. 数据库性能优化:可以通过调整数据库的参数和优化查询语句来提高数据库的性能。例如,合理设置缓冲区大小、调整并发连接数、使用合适的查询语句等。 下面是一个示例的MySQL数据库设计: ```sql -- 股票基本信息表 CREATE TABLE stock_info ( stock_code VARCHAR(10) PRIMARY KEY, stock_name VARCHAR(50), industry VARCHAR(50), exchange VARCHAR(10) ); -- 交易数据表 CREATE TABLE stock_trade ( id INT PRIMARY KEY AUTO_INCREMENT, stock_code VARCHAR(10), trade_date DATE, open_price FLOAT, close_price FLOAT, high_price FLOAT, low_price FLOAT, volume INT, FOREIGN KEY (stock_code) REFERENCES stock_info(stock_code) ); -- 财务数据表 CREATE TABLE stock_finance ( id INT PRIMARY KEY AUTO_INCREMENT, stock_code VARCHAR(10), report_date DATE, revenue FLOAT, net_profit FLOAT, total_assets FLOAT, FOREIGN KEY (stock_code) REFERENCES stock_info(stock_code) ); ``` 以上是一个简单的MySQL数据库设计示例,包括股票基本信息表、交易数据表和财务数据表。根据实际需求,可以进一步扩展和优化数据库设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值