小散量化炒股记|搭建本地化的股票量化数据库这么几步就够了

前言

相信大家都听说了量化交易这个东西了吧!

量化交易是一种新兴的系统化金融投资方法,它综合多个学科的知识,用先进的数学模型代替人的主观思维制定交易策略,利用计算机强大的运算力从庞大的股票、债券、 期货等历史数据中回测交易策略的盈亏“概率”,通过管理盈亏的“概率”帮助投资者做出准确的决策。

不过目前国内外介绍量化的书籍、课程之类的,大多是金融背景的人士编写的,所以他们的角度和我们普通股民会有些不同。偏研究分析的模型算法可能我们看不懂、用不到,有些量化系统针对于机构操盘搭建的,也不适合小资金的普通股民。

那么,什么才是普通股民所适合的量化交易打开方式呢?

本文就用一个接地气的数据管理场景来和大家分享一下,普通股民如何去使用量化交易!

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

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

数据表的划分和股票池

在存入数据库之前需要考虑如何划分数据表以及如何建立对应的股票池。

当然,根据交易者不同的操作风格可以有不一样的划分方法。比如把A股市场所有指数和上市个股都归纳到一个表中;也可以把自己熟悉的几个板块个股归纳到一个表中……

接下来我们就以板块来划分数据表,把水泥和半导体板块划分为同一个表中,然后介绍在实际应用中如何把个股行情数据更新到数据库中。

我们使用Tushare Pro版本的stock_basic()接口获取已上市的所有股票基础信息数据,包括股票代码、名称、上市日期、退市日期、所属板块等。

从上市的所有股票的代码中用Pandas条件表达式选取出“水泥”和“半导体”板块股票,比如:

df_basic[(df_basic["industry"] == u"水泥")]

选出的结果如下图所示:

将股票名称name和股票代码ts_code作为键值对转换为字典格式数据,然后使用dump把Python股票池存储为JSON文件即可。比如:

with open("stock_pool.json", "w", encoding='utf-8') as f:
    json.dump(stock_index, f, ensure_ascii=False, indent=4)

创建的JSON文件内容,如下图所示:

创建数据库更新数据

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

这里推荐一款轻型的关系型数据库SQLite。我们仅仅是用于本地的数据管理,无须多用户访问,数据容量小于2TB,无须海量数据处理,关键是移植方便、使用简单、处理迅速。这里推荐选择SQLite在实现本地数据管理。

当然,如果大家本身就擅长MySQL、MongoDB的话,或者有更高级玩法的话,完全可以选择MySQL、MongoDB这类的数据库。

首次创建数据库的时候要补全个股的历史行情走势,然后每过一个交易日就更新一天。

刚才我们存储的JSON文件提供了股票池的代码,使用open()把json文件打开,然后使用load()将文件中JSON编码字符串转换成Python数据类型,比如:

with open("stock_pool.json", 'r') as load_f:
    stock_index = json.load(load_f)

接下去可以用for循环遍历获取股票池对应的股票数据,也可以多任务提速股票数据的获取。

比如是第一次创建数据表,以000401为例,我们指定Tushare Pro版本的daily()接口起始时间和终止时间参数为分别'20190101'和'20200101',得到的数据内容如下图所示:

如果要更新下一个交易日的数据的话,只需调整起始时间即可。

创建数据库的代码:

conn = sqlite3.connect('stock-boards.db')

把数据更新到数据库表中可以直接调用DataFrame.to_sql()接口:

df_stock.to_sql('cement_semicon', conn, index=False, if_exists='append')

读取整张表数据可以调用pd.read_sql_query:

df_table = pd.read_sql_query("select * from 'cement_semicon';", conn)

比如我们存取了水泥板块全部股票的行情数据到数据库表中,读取出来的数据格式如下所示:

有了数据库,我们可以快速查询和统计一些数据。

比如查询‘20190125’这天交易日涨幅超过2%的股票:

df_target = pd.read_sql_query("select * from 'cement_semicon' where pct_chg > 2 and trade_date == '20191225'", conn)

统计得到符合要求的股票只有2只,如下图所示:

注意事项

在量化交易的实战中,数据的准确度是非常重要的,也就是说存储到数据库中的股票行情数据要保证足够的准确。

如何保证数据足够准确呢?

一个建议是选取两个数据源进行相互验证。如果是使用免费API接口,可以分别用两个接口获取数据,存在本地的CSV文件中,然后分别导入文件中的行情数据进行对比。出现偏差时要人为去判别,当数据通过检验之后再转存数据库中。

更高质量数据的话,可以使用收费的获取数据途径,例如万得(Wind)、同花顺等公司提供的金融数据终端,聚宽团队提供的JQData数据服务,预测者网站提供的金融数据下载服务等。

当然,也可以用爬虫方式从财经网站获取,比如东方财富网:

学习完书籍之后,想再次升级学习的内容可以加入知识星球《玩转股票量化交易》,点击【阅读原文】可查看目录。

总结

通过这个简单而又实用的股票量化场景,希望能够给广大朋友对于量化交易有一个直观的感受。

然后,我们应该升级自己的炒股方式了,把自己以前炒股的那套方法,抽象成策略模型,用量化的方法去全市场回测评估,然后让程序帮助我们监测行情的走势。

这个才是普通股民所适合的量化交易打开方式!

例程中代码由《Python股票量化交易从入门到实践》书中知识点组成。比如:

7.1 如何获取股票行情数据***

   7.1.1 用Panads获取股票数据

   7.1.2 用Tushare获取股票数据 

   7.1.3 用 Baostock获取股票数据 

7.3 定制股票行情数据获取接口

7.4注册JSON格式自选股票池***

    7.4.1 股票池另存为JSON文件

        1.  创建Python股票池

        2.  Python转换为JSON 

        3.  案例-创建A股市场股票池

    7.4.2加载JSON文件获取股票池

7.5多任务提速股票数据的获取

7.6 数据库管理本地行情数据***

    7.6.1 Python操作SQLite的API

    7.6.2 Pandas操作SQLite的API

    7.6.3建立SQLite股票行情数据库

    7.6.4基于SQLite股票行情数据分析

往期回顾

小散量化炒股记|只用一分钟选出底部放量跳空上扬的强势股

小散量化炒股记|不用追高!Python告诉你强势股回调介入的位置

小散量化炒股记|一文揭秘主力、散户资金流入流出的来龙去脉

元宵大师的量化交易书籍开售!!京东、当当、天猫有售!!凭订单进读者交流群获取工具源码!加我微信了解详情
微信关注:‘元宵大师带你用Python量化交易’

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值