前段时间玩Python时无意看到了获取股票交易数据的tushare模块,由于自己对股票交易挺有兴趣,加上现在又在做数据挖掘工作,故想先将股票数据下载到数据库中,以便日后分析:

# 导入需要用到的模块

from queue import Queue

import threading

import os

import datetime

import tushare as ts

from sqlalchemy import create_engine

from sqlalchemy import types

# 创建myql数据库引擎,便于后期链接数据库

mysql_info = {'host':'localhost','port':3306,'user':'******','passwd':'******','db':'stock','charset':'utf8'}

engine = create_engine('mysql+pymysql://%s:%s@%s:%s/%s?charset=%s' %(mysql_info['user'],mysql_info['passwd'],

mysql_info['host'],mysql_info['port'],

mysql_info['db'],mysql_info['charset']),

echo=False)

# 获取所有股票数据,利用股票代码获取复权数据

stock_basics = ts.get_stock_basics()

stock_basics.columns

# 获取数据库现有数据的时间日期

def get_old_date():

con = engine.connect()

sql1 = 'show tables;'

tables = con.execute(sql1)

if ('fq_day',) not in tables:

date_old = datetime.date(2001,1,1)

return date_old

sql2 = 'select max(date) from fq_day;'

date_old = con.execute(sql2).fetchall()[0][0].date()

if date_old < datetime.date.today() - datetime.timedelta(1):

return date_old

else:

con.close()

print('今天已经获取过数据,不需重新获取')

os._exit(1)

# 声明队列,用于存取股票以代码数据,以便获取复权明细

stock_code_queue = Queue()

for code in stock_basics.index:

stock_code_queue.put(code)

type_fq_day = {'code':types.CHAR(6),'open':types.FLOAT,'hige':types.FLOAT,'close':types.FLOAT,'low':types.FLOAT,

'amount':types.FLOAT,'factor':types.FLOAT}

# 获取复权数据

def process_data(old_date,task_qeue):

#queueLock.acquire()

while not task_qeue.empty():

data = task_qeue.get()

print("正在获取%s;数据还有%s条:" %(data,task_qeue.qsize()))

#queueLock.release()

date_begin = old_date + datetime.timedelta(1)

date_end = datetime.date.today()

try:

qfq_day = ts.get_h_data(data,start = str(date_begin),end=str(date_end),autype='qfq',drop_factor=False)

qfq_day['code'] = data

qfq_day.to_sql('fq_day',engine,if_exists='append',dtype=type_fq_day)

except:

task_qeue.put(data) # 如果数据获取失败,将该数据重新存入到队列,便于后期继续执行

#else:

#queueLock.release()

昨天试了下单线程下载股票数据,但由于获取数据量较大,所需时间特别长,这次用多线程实试试

# 重写线程类,用户获取数据

class get_qfq(threading.Thread):

def __init__(self,name,queue,date_begin):

threading.Thread.__init__(self)

self.name = name

self.queue = queue

self.begin = date_begin

def run(self):

process_data(self.begin,self.queue)

print("Exiting " + self.name)

# 声明线程锁

#queueLock = threading.Lock()

old_date = get_old_date()

# 生成10个线程

threads = []

for i in range(7):

thread = get_qfq('thread'+ str(i), stock_code_queue,old_date)

thread.start()

threads.append(thread)

for thread in threads:

thread.join()

正在获取300239;数据还有718条:

[Getting data:]##正在获取002042;数据还有717条:

[Getting data:]正在获取600999;数据还有716条:

[Getting data:]正在获取300453;数据还有715条:

[Getting data:]#正在获取600538;数据还有714条:

[Getting data:]###正在获取002253;数据还有713条:

[Getting data:]正在获取600188;数据还有712条:

[Getting data:]正在获取000948;数据还有711条:

[Getting data:]###正在获取002586;数据还有710条:

[Getting data:]正在获取002651;数据还有709条:

[Getting data:]正在获取600705;数据还有708条:

[Getting data:]##正在获取300135;数据还有707条:

[Getting data:]##正在获取600755;数据还有706条:

[Getting data:]正在获取601890;数据还有705条:

[Getting data:]正在获取300341;数据还有704条:

[Getting data:]#正在获取000897;数据还有703条:

[Getting data:]###正在获取600886;数据还有702条:

[Getting data:]#正在获取002015;数据还有701条:

[Getting data:]正在获取600662;数据还有700条:

[Getting data:]#正在获取000408;数据还有699条:

[Getting data:]#正在获取000524;数据还有698条:

[Getting data:]#正在获取300309;数据还有697条:

[Getting data:]#正在获取600333;数据还有696条:

[Getting data:]##正在获取002178;数据还有695条:

本次采用了10个线程,下载速度快了许多,查看了下流量,基本可以达到3M/S,是单线程的6倍左右。

python获取股票逐笔交易数据_利用python下载股票交易数据相关推荐

  1. 基于python的股票程序化交易论文_基于Python工具的股票量化投资策略研究

    2019 年第 07 期 20 世 纪 80 年代, 一 些 投 资 者 开 始 利用 计 算 机 研究金 融 数据 , 并 初显 成 效 . 20 世 纪 末 , 投 资 者 把 计 算 机 技术 ...

  2. python获取window共享目录列表_利用Python获取DICOM RTstructure勾画列表

    在<利用Python打开DICOM CT文件>一文中,我们利用pydicom.dcmread()读取了CT图像.本文中我们将修改load_scan()函数来读取RTstructure文件并 ...

  3. python获取一个月之前日期_利用python获取当前日期前后N天或N月日期的方法示例...

    前言 最近因为工作原因,发现一个Python的时间组件,很好用分享出来!(忘记作者名字了,在这里先感谢了),下面话不多说,来一起看看详细的介绍吧. 示例代码: # -*- coding: utf-8 ...

  4. python处理行情数据_利用Python脚本来获取期货行情数据

    因为自己最近在学习做期货交易,想要下载期货的行情数据来做分析.有一些交易软件是可以导出数据的,但是导出的过程还是需要很多的手工操作,自己在想能不能通过Python程序来实现呢. 新浪期货数据接口介绍 ...

  5. 利用python从网页查找数据_利用Python模拟淘宝的搜索过程并对数据进行可视化分析...

    数据挖掘入门与实战 公众号: datadw 本文讲述如何利用Python模拟淘宝的搜索过程并对搜索结果进行初步的数据可视化分析. 搜索过程的模拟:淘宝的搜索页面有两种形式, 一种形式是, 2019/2 ...

  6. python处理nc数据_利用python如何处理nc数据详解

    利用python如何处理nc数据详解 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  利用python如何处理nc数据详解.txt ] (友情提示:右键点上行txt ...

  7. dataframe修改数据_利用Python进行数据分析(语法篇)

    一.数据 结构化数据: 1.多维数组--矩阵 2.表格型数据(关系型数据库中的数据) 3.通过关键列相连接的表 4.间隔平均或者不平均的时间序列 二.关于iPython 三.Numpy学习 numpy ...

  8. pandas 转化np数据_利用Python进行数据分析(语法篇)

    一.数据 结构化数据: 1.多维数组--矩阵 2.表格型数据(关系型数据库中的数据) 3.通过关键列相连接的表 4.间隔平均或者不平均的时间序列 二.关于iPython 三.Numpy学习 numpy ...

  9. python 钉钉机器人发送图片_利用Python自动发送钉钉数据消息

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

最新文章

  1. 从源码分析DEARGUI之add_selectable
  2. linux ping IP地址与telnet 测试IP端口
  3. 知乎赴美上市为缓解商业化瓶颈,下一步网络推广知乎想怎么做?
  4. tomcat各目录(文件)作用
  5. nginx配置反向代理解决前后端分离跨域问题
  6. Visual Studio 2019 16.3 正式发布,支持 .NET Core 3.0
  7. 七、 面向对象(二)
  8. day01_初识python
  9. android p wifi一直在扫描_Android Wifi 扫描及自动连接
  10. 如何删除后缀.Tater勒索病毒并解密.tater勒索病毒加密的病毒文件
  11. 华硕固件默认ip_斐讯刷华硕固件后开启QOS限速的方法
  12. 数据仓库中元数据的定义、用途及元数据的分类。
  13. PAT 甲级 图形输出 1031 Hello World for U (20 分)
  14. pyhton第五章 字典与集合 课后习题
  15. 同事辞职了,我一个人做两个人的活,公司又不招人了,该怎么办?
  16. http基本请求头详解
  17. ArcGIS在线应用介绍(10)旧金山犯罪地图
  18. 【Android初级】什么是ANR?如何防止?如何修复?
  19. 铂链获美国顶级区块链投资基金 Draper Dragon Digital Fund投资
  20. 利用PopButton实现类似Path的点聚式导航

热门文章

  1. 学银在线python课程_清华计算机系第一课:1615集 Python+Java+web等编程视频课程流出...
  2. 把关与服务的关系_浅析新闻把关与新闻真实性的关系
  3. Java多线程Demo
  4. cordova 调用蓝牙_cordova-plugin-bluetoothle 详解
  5. Smart work——以sketch导出标注为例
  6. [Canvas绘图] 第31节 藏图阁(11) AlphaGo与李世石的围棋大战之第一局
  7. 2019淘金币618大促天猫商家参与方式
  8. Unity3D 5 官方教程:标准着色器
  9. 拍照、从相册选图并对图片进行裁剪
  10. android 蓝牙opp流程,Android BluetoothProfile之OPP(蓝牙文件分享流程)