python股票接口_Python3利用Tushare接口结合mysql进行股票量化分析入门

本文主要是介绍python股票接口_Python3利用Tushare接口结合mysql进行股票量化分析入门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本帖最后由 sirius0427 于 2019-12-14 17:02 编辑

Tushare给一些对量化分析有兴趣的朋友提供了非常方便的接口,使大家可以进入量化分析的门槛,但在实际应用过程中,发现很多朋友在用文件作为存储股票信息的介质。

这里介绍一种通过mysql数据库存放信息的方式,使用了python语言作为Tushare的接口语言,入库后各位可自行使用喜欢的语言进行分析。

第一步,注册tushare.pro账号,注册链接https://tushare.pro/register

第二步,找到自己账号的接口TOKEN,保存下来,后面代码内要用。账号积分的高低会对接口有不同的限制,详细可以观看积分说明。

第三步:在mysql中创新tushare数据库,我这里用的是navicat,图形化管理比较方便。

none.gif

image.png (43.29 KB, 下载次数: 0)

2019-12-14 16:26 上传

none.gif

image.png (17.58 KB, 下载次数: 0)

2019-12-14 16:27 上传

建库语句如下:

[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的接口远不止以上三种,各位可自行参阅网站上的股票接口文档,进行相应的资料获取和存放。

进坛潜水多年,第一次发帖,如有不当之处,请版主指正。

这篇关于python股票接口_Python3利用Tushare接口结合mysql进行股票量化分析入门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/740512

相关文章

SQL注入漏洞扫描之sqlmap详解

《SQL注入漏洞扫描之sqlmap详解》SQLMap是一款自动执行SQL注入的审计工具,支持多种SQL注入技术,包括布尔型盲注、时间型盲注、报错型注入、联合查询注入和堆叠查询注入... 目录what支持类型how---less-1为例1.检测网站是否存在sql注入漏洞的注入点2.列举可用数据库3.列举数据库

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

python管理工具之conda安装部署及使用详解

《python管理工具之conda安装部署及使用详解》这篇文章详细介绍了如何安装和使用conda来管理Python环境,它涵盖了从安装部署、镜像源配置到具体的conda使用方法,包括创建、激活、安装包... 目录pytpshheraerUhon管理工具:conda部署+使用一、安装部署1、 下载2、 安装3

Mysql虚拟列的使用场景

《Mysql虚拟列的使用场景》MySQL虚拟列是一种在查询时动态生成的特殊列,它不占用存储空间,可以提高查询效率和数据处理便利性,本文给大家介绍Mysql虚拟列的相关知识,感兴趣的朋友一起看看吧... 目录1. 介绍mysql虚拟列1.1 定义和作用1.2 虚拟列与普通列的区别2. MySQL虚拟列的类型2

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

详解Java如何向http/https接口发出请求

《详解Java如何向http/https接口发出请求》这篇文章主要为大家详细介绍了Java如何实现向http/https接口发出请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用Java发送web请求所用到的包都在java.net下,在具体使用时可以用如下代码,你可以把它封装成一

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

mysql数据库分区的使用

《mysql数据库分区的使用》MySQL分区技术通过将大表分割成多个较小片段,提高查询性能、管理效率和数据存储效率,本文就来介绍一下mysql数据库分区的使用,感兴趣的可以了解一下... 目录【一】分区的基本概念【1】物理存储与逻辑分割【2】查询性能提升【3】数据管理与维护【4】扩展性与并行处理【二】分区的

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超