本文来源吾爱破解论坛
本帖最后由 sirius0427 于 2019-12-14 17:02 编辑 image.png (43.29 KB, 下载次数: 0)
下载附件
保存到相册
image.png (17.58 KB, 下载次数: 0)
下载附件
保存到相册
Tushare给一些对量化分析有兴趣的朋友提供了非常方便的接口,使大家可以进入量化分析的门槛,但在实际应用过程中,发现很多朋友在用文件作为存储股票信息的介质。
这里介绍一种通过mysql数据库存放信息的方式,使用了python语言作为Tushare的接口语言,入库后各位可自行使用喜欢的语言进行分析。
第一步,注册tushare.pro账号,注册链接https://tushare.pro/register
第二步,找到自己账号的接口TOKEN,保存下来,后面代码内要用。账号积分的高低会对接口有不同的限制,详细可以观看积分说明。
第三步:在mysql中创新tushare数据库,我这里用的是navicat,图形化管理比较方便。
建库语句如下:
[SQL] 纯文本查看 复制代码
CREATE DATABASE `tushare` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
第四步:建立相应的表,首先建立trade_cal表,用于记录交易日信息;建立stock_list表,用于存放股票信息;建立stock_daily表,用于存放股票日交易数据。
[SQL] 纯文本查看 复制代码
/* Navicat Premium Data Transfer Source Server : Quantization Source Server Type : MySQL Source Server Version : 80018 Source Host : 127.0.0.1:3306 Source Schema : tushare Target Server Type : MySQL Target Server Version : 80018 File Encoding : 65001 Date: 14/12/2019 16:31:24 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for trade_cal -- ---------------------------- DROP TABLE IF EXISTS `trade_cal`; CREATE TABLE `trade_cal` ( `cal_date` date NOT NULL COMMENT '日历日期', `is_open` int(1) NULL DEFAULT NULL COMMENT '是否交易 0休市 1交易', `pretrade_date` date NULL DEFAULT NULL COMMENT '上一个交易日', PRIMARY KEY (`cal_date`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
[SQL] 纯文本查看 复制代码
/* Navicat Premium Data Transfer Source Server : Quantization Source Server Type : MySQL Source Server Version : 80018 Source Host : 127.0.0.1:3306 Source Schema : tushare Target Server Type : MySQL Target Server Version : 80018 File Encoding : 65001 Date: 14/12/2019 16:34:11 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for stock_list -- ---------------------------- DROP TABLE IF EXISTS `stock_list`; CREATE TABLE `stock_list` ( `ts_code` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT 'TS代码', `symbol` varchar(6) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '股票代码', `name` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '股票名称', `area` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所在地域', `industry` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '所属行业', `fullname` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '股票全称', `enname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '英文全称', `market` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '市场类型 (主板/中小板/创业板)', `exchange` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '交易所代码', `curr_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '交易货币', `list_status` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT ' 上市状态: L上市 D退市 P暂停上市', `list_date` date NULL DEFAULT NULL COMMENT '上市日期', `delist_date` date NULL DEFAULT NULL COMMENT '退市日期', `is_hs` varchar(2) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '是否沪深港通标的,N否 H沪股通 S深股通', PRIMARY KEY (`ts_code`, `symbol`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
[SQL] 纯文本查看 复制代码
/* Navicat Premium Data Transfer Source Server : Quantization Source Server Type : MySQL Source Server Version : 80018 Source Host : 127.0.0.1:3306 Source Schema : tushare Target Server Type : MySQL Target Server Version : 80018 File Encoding : 65001 Date: 14/12/2019 16:34:55 */ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for stock_daily -- ---------------------------- DROP TABLE IF EXISTS `stock_daily`; CREATE TABLE `stock_daily` ( `ts_code` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '股票代码', `trade_date` date NOT NULL COMMENT '交易日期', `open` double NULL DEFAULT NULL COMMENT '开盘价', `high` double NULL DEFAULT NULL COMMENT '最高价', `low` double NULL DEFAULT NULL COMMENT '最低价', `close` double NULL DEFAULT NULL COMMENT '收盘价', `pre_close` double NULL DEFAULT NULL COMMENT '昨日收盘价', `change` double NULL DEFAULT NULL COMMENT '涨跌额', `pct_chg` double NULL DEFAULT NULL COMMENT '涨跌幅', `vol` double NULL DEFAULT NULL COMMENT '成交量 (手)', `amount` double NULL DEFAULT NULL COMMENT '成交额 (千元)', `turnover_rate` double NULL DEFAULT NULL COMMENT '换手率', `volume_ratio` double NULL DEFAULT NULL COMMENT '量比', UNIQUE INDEX `ts_code_date`(`ts_code`, `trade_date`) USING BTREE COMMENT '以股票代码和日期作为主键', INDEX `ts_code`(`ts_code`) USING BTREE, INDEX `trade_date`(`trade_date`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;
第五步,安装python3,因为不同平台的安装方法不一致,所以不在赘述,可自行查询相关平台的安装方法。
通过pip安装PyMysql、tushare、numpy、pandas,方法很简单,pip install +所需要安装的包名即可。
第六步,写Python代码,取交易日期存入trade_cal表中
[Python] 纯文本查看 复制代码
# coding:utf-8 import tushare as ts import pymysql import numpy as np ts.set_token('你的接口TOKEN') pro = ts.pro_api() #调用trade_cal接口,设置起始日期和终止日期 data = pro.query('trade_cal', start_date='20190101', end_date='20201231', fields='cal_date,is_open,pretrade_date') print(data) dataset = np.array(data) datalist = dataset.tolist() # 打开数据库连接 db = pymysql.connect(host='localhost', port=3306, user='mysql用户名', passwd='mysql密码', db='tushare', charset='utf8mb4') cursor = db.cursor() # SQL 插入语句 sql = "INSERT INTO trade_cal (cal_date,is_open,pretrade_date) VALUES (%s,%s,%s)" try: # 执行sql语句 cursor.executemany(sql, datalist) # 提交到数据库执行 db.commit() except Exception as e: print(e) # 如果发生错误则回滚 db.rollback() # 关闭游标 cursor.close() # 关闭数据库连接 db.close()
第七步,取股票列表存入stock_list表中。
[Python] 纯文本查看 复制代码
# coding:utf-8 import tushare as ts import pymysql import numpy as np ts.set_token('你的TOKEN') pro = ts.pro_api() #查询当前所有正常上市交易的股票列表 data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,fullname,enname,market,exchange,curr_type,list_status,list_date,delist_date,is_hs' ) print(data) dataset = np.array(data) datalist = dataset.tolist() # 打开数据库连接 db = pymysql.connect(host='localhost', port=3306, user='mysql用户名', passwd='mysql密码', db='tushare', charset='utf8mb4') # 使用cursor()方法获取操作游标 cursor = db.cursor() sql = "delete from stock_list" try: # 执行sql语句 cursor.execute(sql) # 提交到数据库执行 db.commit() except Exception as e: print(e) # 如果发生错误则回滚 db.rollback() # 关闭游标 cursor.close() cursor = db.cursor() # SQL 插入语句 sql = "INSERT INTO stock_list (ts_code, symbol, name, area, industry, fullname, enname, market, exchange, curr_type, list_status, list_date, delist_date, is_hs) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" try: # 执行sql语句 cursor.executemany(sql, datalist) # 提交到数据库执行 db.commit() except Exception as e: print(e) # 如果发生错误则回滚 db.rollback() # 关闭游标 cursor.close() # 关闭数据库连接 #查询当前所有正常上市交易的股票列表 data1 = pro.stock_basic(exchange='', list_status='P', fields='ts_code,symbol,name,area,industry,fullname,enname,market,exchange,curr_type,list_status,list_date,delist_date,is_hs' ) print(data1) dataset1 = np.array(data1) datalist1 = dataset1.tolist() cursor = db.cursor() try: # 执行sql语句 cursor.executemany(sql, datalist1) # 提交到数据库执行 db.commit() except Exception as e: print(e) # 如果发生错误则回滚 db.rollback() # 关闭游标 cursor.close() # 关闭数据库连接 db.close()
第八步:取股票当日交易信息,放入stock_daily表中。
[Python] 纯文本查看 复制代码
# coding:utf-8 import tushare as ts import pymysql import numpy as np import datetime import time import pandas as pd import sys ts.set_token('你的token') pro = ts.pro_api() db = pymysql.connect(host='localhost', port=3306, user='mysql用户名', passwd='mysql密码', db='tushare', charset='utf8mb4') db1 = pymysql.connect(host='localhost', port=3306, user='mysql用户名', passwd='mysql密码', db='tushare', charset='utf8mb4') cursor = db1.cursor() sql = "select cal_date from trade_cal where cal_date ='" + str(sys.argv[1]) + "' and is_open=1 order by cal_date" cursor.execute(sql) print("cursor.excute:", cursor.rowcount) for each in cursor.fetchall(): print(datetime.datetime.strftime(each[0], "%Y%m%d")) data = pro.daily(trade_date=datetime.datetime.strftime(each[0], "%Y%m%d")) cursor = db.cursor() datalist = np.array(data).tolist() sql = "insert into stock_daily( ts_code, trade_date, `open`, high, low, `close`, pre_close, `change`, pct_chg, vol, amount) values ( %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s )" print(sql) try: # 执行sql语句 cursor.executemany(sql, datalist) # 提交到数据库执行 db.commit() except Exception as e: print(e) # 如果发生错误则回滚 db.rollback()
最后,执行上面的三个python文件,注意取stock_daily的python是需要加日期作为参数的,这样可以灵活的取一天的数据入表,或写一个批处理,将一年的数据一次性存入表中。
结尾,这样,最基础的股票交易日期、股票列表、股票日K线,就已经存入数据库表中了,后面即可按自己的想法进行量化分析。
Tushare的接口远不止以上三种,各位可自行参阅网站上的股票接口文档,进行相应的资料获取和存放。
进坛潜水多年,第一次发帖,如有不当之处,请版主指正。
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。
- 上一篇: 通过机器学习破解验证码图片
- 下一篇: 基于Python和selenium的链工宝网课自动学习脚本