搭建过程
每个交易者都应该形成一套自己的交易系统。
很多交易者也清楚知道,搭建自己交易系统的重要性。现实中,从0到1往往是最难跨越的一步。
授人鱼不如授人以渔,为了帮助大家跨出搭建量化系统的第一步,我们决定推出这个主题系列。
这个系列中,我们用Python从0开始一步步搭建出一套ETF量化交易系统(选择ETF标的是因为对于普通交易者来说,ETF相对于选强势股难度要小,而且没有退市风险)。大家可以跟随着我们的实现路径来一起学习,从过程中掌握方法。
掌握了方法之后,你可以换成期货系统、比特币系统、美股系统,然后在实战中不断去完善自己的系统了。
搭建一套ETF量化交易系统涉及多个模块和组件的协同工作,包括数据源模块、量化策略模块、可视化模块、数据库模块、回测评估模块、自动交易模块等等。
DAY1链接如下:15天搭建ETF量化交易系统Day1—数据源模块
DAY2链接如下:15天搭建ETF量化交易系统Day2—图形显示模块
DAY3链接如下:15天搭建ETF量化交易系统Day3—上手经典回测框架
DAY4链接如下:15天搭建ETF量化交易系统Day4—玩转海龟交易策略
DAY5链接如下:15天搭建ETF量化交易系统Day5—打造实盘量化机器人
DAY6链接如下:15天搭建ETF量化交易系统Day6—打通同花顺自动交易
DAY7链接如下:15天搭建ETF量化交易系统Day7—全自动化交易系统
DAY8链接如下:15天搭建ETF量化交易系统Day8—强化自动交易模块
DAY9链接如下:15天搭建ETF量化交易系统Day9—玩大A必学网格策略
DAY10链接如下:15天搭建ETF量化交易系统Day10—借用网格思想做仓位管理
DAY11链接如下:15天搭建ETF量化交易系统Day11—miniQMT自动交易真香!
DAY12链接如下:15天搭建ETF量化交易系统Day12—雏形系统关键代码讲解!
数据是量化交易的源头,如何高效地管理大量数据是量化交易分析中非常关键的环节。数据库就是最佳的解决方案。
通过API接口获取到股票行情数据之后,我们可以存入到数据库之中,这样下次调用的时候只需要从本地数据库中获取即可。
目前流行的数据库有Oracle、MySQL、MongoDB、Redis、SQLite……关于数据库的选型通常取决于性能、数据完整性以及应用方面的需求。每个数据库都有它的特点和最适合的应用场合。
如果追求更全面的功能、更强大的性能,特别在并发处理上要求高效的话,MySQL无疑是所有大型数据库中最为流行的一个。
接下来我们就来介绍下如何在本地搭建MySQL数据库
安装MySQL
首先去官网http://www.mysql.com下载MySQL。点击Downloads—>Community,选择MySQL Community Server。
选择对应的安装文件后开始下载。下载完成后,打开安装包,开始安装MySQL。
选择需要的版本:
需要安装下依赖的Visual C++
然后按以下的步骤一步步操作即可。
输入账户和密码:
到此为止,MySQL就成功地安装在你的本地电脑上了。
一个基础的例程
接下来用一个简单的例程使用下MySQL。
使用Python操作MySQL可以安装pymysql这个库。
pip install pymysql
使用pymysql打开数据库连接代码如下,其中host为localhost,port为3306
self.conn = pymysql.connect(host=host, port=self.port, db=self.db, user=self.user, password=self.password)
如果在打开MySQL时出现报错:
RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods
原因缺少了cryptography库,安装一下即可。
pip3 install cryptography -i https://pypi.douban.com/simple
获得一个可以执行SQL语句的光标对象:
self.cursor = self.conn.cursor()
执行SQL语句,比如sql是"SELECT * FROM stock",即查看stock表中全部内容。
self.cursor.execute(sql)
self.conn.commit()
关闭数据库连接如下:
self.conn.close()
如果我们处理的是Dataframe数据的话,那么保存到数据库时可以直接使用to_sql。需要注意的一点是使用to_sql,只能使用sqlalchemy库。代码如下所示:
from sqlalchemy import create_engine
conn = create_engine("mysql+pymysql://root:yuanxiao@127.0.0.1:3306/quanttrader?charset=utf8")
df = ak.fund_etf_hist_min_em(symbol='510050', period="60", adjust="")
df.to_sql(name='stock', con=conn, if_exists='append', index=False, index_label=False)
写入的数据格式如下所示:
写入数据库数据:
时间 开盘 收盘 最高 最低 涨跌幅 涨跌额 成交量 成交额 振幅 换手率
0 2024-06-28 10:30:00 2.428 2.447 2.448 2.426 0.53 0.013 2733762 667077979.0 0.90 0.52
1 2024-06-28 11:30:00 2.447 2.446 2.452 2.440 -0.04 -0.001 1505936 368450104.0 0.49 0.29
2 2024-06-28 14:00:00 2.446 2.444 2.453 2.443 -0.08 -0.002 960916 235222793.0 0.41 0.18
3 2024-06-28 15:00:00 2.445 2.441 2.446 2.436 -0.12 -0.003 2228945 544035907.0 0.41 0.42
4 2024-07-01 10:30:00 2.440 2.434 2.447 2.432 -0.29 -0.007 1857474 452823648.0 0.61 0.35
5 2024-07-01 11:30:00 2.434 2.443 2.448 2.433 0.37 0.009 2088655 509597725.0 0.62 0.40
然后我们从数据库中读取写入的数据,验证是否写入成功。我们可以使用 fetchone() 方法获取单条数据。
result = cursor.fetchone()
读取的数据格式如下所示:
('2024-06-28 10:30:00', 2.428, 2.447, 2.448, 2.426, 0.53, 0.013, 2733762, 667077979.0, 0.9, 0.52)
总结
我们已经在本地搭建了MySQL,接下来介绍MySQL作为股票量化数据库的操作方法。比如
“如何为每个股票在MySQL中创建表?”
“每天获取的股票数据怎么存入到MySQL数据库中?”
“如何从MySQL中取出我们想要的股票数据呢?”
……
接下来期待为大家解锁新的技能!
说明
此系列为连载专栏,完整代码会上传知识星球《玩转股票量化交易》!作为会员们的学习资料。
想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利!
非星球会员需要的话,需要单独联系我购买!
知识星球介绍点击:知识星球《玩转股票量化交易》精华内容概览