mysql+tushare搭建本地数据库

 创建股票数据库


#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2018-09-04 14:34:59
# @Author  : Michael Li 
# @Version : $V2.0$import pandas as pd
import numpy as np
import datetime
import random
import pymssql
from sqlalchemy import create_engine
import tushare as ts
import logging
from time import sleep
from queue import LifoQueue
import threading
#以上是需要使用的Python包,没有安装的请pip install XXXXclass stock(object):"""get stock information"""def __init__(self):self.host = '127.0.0.1'self.user = 'sa'self.password = 'test'self.port = 3306 #端口self.database = 'stock'self.Daily_tableName = 'daily'self.Daily_basic_tableName = 'daily_basic'#开始和结束时间仅用于获取区间数据,代码中有用于获取当前日期的函数。self.startTime = '20100101' #开始时间self.endTime = datetime.datetime.now().strftime('%Y%m%d') #结束时间#以下为两个队列,用于支撑多线程。self.ts_code_queue = LifoQueue()  #ts_code队列,用于获取指定代码的股票信息。self.trade_cal_queue = LifoQueue() #trade_cal交易日期队列,用于获取指定时间的股票信息。ts.set_token('')self.pro = ts.pro_api()def log(self):''' 日志功能函数'''logger = logging.getLogger()logger.setLevel(logging.INFO)handler = logging.FileHandler(r'D:/abc.log', encoding='utf-8')# handlerStream = logging.StreamHandler()formatter = logging.Formatter("%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s")handler.setFormatter(formatter)logger.addHandler(handler)# logger.addHandler(handlerStream)logging.info('开始获取%s的数据' % (self.getDatetime()))def insertMysql(self, tableName, data):conn = pymssql.connect(host = '.',user ='sa',password = 'test',database = 'stock',charset ='utf8')'''创建数据库连接,需要先在数据库中建立相应的表和表结构'''engine = create_engine('mssql+pymssql://%s:%s@%s/%s' % (self.user, self.password, self.host, self.database))'''将获取到的数据插入到数据库中,if_exists=append为向后添加,index=False为不保存DF自动生成的index'''data.to_sql(tableName,con = engine,if_exists='append', index=False)def getDatetime(self):'''获取当天日期的函数 '''taday = datetime.datetime.now().strftime('%Y%m%d')return tadaydef getTrade_cal(self):# 获取各大交易所交易日历数据,默认提取的是上交所(注意start_date和end_date的值,获取周期数据可使用self.startTime和self.endTime)#官方文档:https://tushare.pro/document/2?doc_id=26trade_cal = self.pro.query('trade_cal', exchange='SZSE', start_date=self.startTime,end_date=self.endTime, is_open=1)#将日期列转换为list,便于使用队列trade_cals = trade_cal['cal_date'].tolist()#循环将每个交易日塞进队列中for trade_cal in trade_cals:self.trade_cal_queue.put(trade_cal, True, 2)logging.info('Trade_cal 队列中共计:%s 条信息' % (self.trade_cal_queue.qsize()))def getList(self):'''获取获取基础信息数据,包括股票代码、名称、上市日期、退市日期等'''stock_basic = self.pro.query('stock_basic', exchange_id='', is_hs='N',fields='ts_code,symbol,name,fullname,list_date,list_status')stock_basic.set_index('ts_code', inplace=True)for ts_code in stock_basic.index.tolist()[0:20]:self.ts_code_queue.put(ts_code, True, 2)logging.info('共计%s条数据' % (self.ts_code_queue.qsize()))#备注:此函数不是经常使用。def getDaily_code(self):'''获取指定股票代码的数据'''print('子线程(%s)启动' % (threading.current_thread().name))while not self.ts_code_queue.empty():#访问队列,队列为空时退出。code = self.ts_code_queue.get(True, 3)#使用tushare获取(code是从队列中取出的ts_code)#Tushare  官方文档:https://tushare.pro/document/2?doc_id=27daily = self.pro.query('daily', ts_code=code,start_date=self.startTime, end_date=self.endTime)daily['trade_date'] = pd.to_datetime(daily['trade_date'], format='%Y-%m-%d')#将获取到的数据保存至数据库self.insertMysql(self.Daily_tableName, daily)# print(code)sleep(random.randint(1, 2))logging.info('------>%s的getDaily_code数据全部搞定<------' %(self.getDatetime()))def getDaily_date(self):'''获指定日期或日期范围的股票数据'''logging.info('线程(%s)启动' % (threading.current_thread().name))while not self.trade_cal_queue.empty():#队列功能同上个函数date = self.trade_cal_queue.get(True, 2)#使用tushare获取(date是从队列中取出的日期)#Tushare 官方文档:https://tushare.pro/document/2?doc_id=27daily = self.pro.query('daily', start_date=date)daily['trade_date'] = pd.to_datetime(daily['trade_date'], format='%Y-%m-%d')self.insertMysql(self.Daily_tableName, daily)logging.info('--> %s 的数据共计:%s 条 <--' %(date, len(daily)))sleep(random.randint(1, 2))logging.info('线程(%s)结束' % (threading.current_thread().name))def getDaily_basic(self):'''获取Daily_basic数据'''#Tushare 官方文档:https://tushare.pro/document/2?doc_id=32daily_basic = self.pro.query('daily_basic', ts_code='002427',trade_date=self.getDatetime())#简单的数据清洗,将空值填充为0daily_basic = daily_basic.fillna(0)self.insertMysql(self.Daily_basic_tableName, daily_basic)logging.info('------>%s的Daily_basic的数据搞定<------' %(self.getDatetime()))#print(daily_basic)def main(self):#这里算是总调度吧self.log() #日志self.getDaily_basic() # 获取Daily_basicself.getTrade_cal()    #获取日期(可是周期,也可是单天日期)#启动多线程(4个)for x in range(4):x += 1t1 = threading.Thread(target=self.getDaily_date, name='getDaily_date %d 号进程' % (x))t1.start()t1.join()if __name__ == '__main__':#大功告成,实例化后启动main函数。stock = stock()stock.main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hbase单机搭建

一、下载 https://hbase.apache.org/downloads.html  2.1.3版本 解压&#xff0c;拷贝到文件夹 /hbase/hbase-2.1.3 设置HBASE_HOME环境变量&#xff0c;把它加到path环境变量中去 source /etc/profile 二、配置 &#xff11;.在/data下创建目录 mkdir /data/hbase mkdir /d…

mysql查询报错: ORDER BY clause is not in GROUP BY..this is incompatible with sql_mode=only_full_group_by

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我的情况 &#xff1a; Mysql 5.7.21 版本运行sql 报错如题&#xff0c;同样的 sql 直接本地运行不报错。 但是当连接的是服务器上的 …

多股票投资组合+马科维茨计算组合

import matplotlib.pyplot as plt from pandas import read_excel import numpy as np import tushare as ts import pandas as pd import datetime token prots.pro_api(token) 获取财务数据 #获取财务数据 ticker_list [601318.SH,601336.SH,601398.SH,601888.SH,603993.S…

并发编程(十六)——java7 深入并发包 ConcurrentHashMap 源码解析

以前写过介绍HashMap的文章&#xff0c;文中提到过HashMap在put的时候&#xff0c;插入的元素超过了容量&#xff08;由负载因子决定&#xff09;的范围就会触发扩容操作&#xff0c;就是rehash&#xff0c;这个会重新将原数组的内容重新hash到新的扩容数组中&#xff0c;在多线…

[边分治+线段树合并]「CTSC2018」暴力写挂

题目梗概 给出两棵1为根的树,求\(d[x]d[y]-d[lca(x,y)]-d[lca(x,y)]\)的最大值 解题思路 套路化简之后\((d[x]d[y]dis(x,y)-2*d[lca(x,y)])/2\) 第二棵树上的lca化不掉,所以考虑在第二棵上枚举lca 先说说这题的解法,边分树的合并. 边分和点分有什么区别,边分在合并类似\(d[x]d[…

HEVC/H265 文档获得

HEVC/H265文档是很重要的标准&#xff0c;因为代码有时由于效率问题而修改&#xff0c;这是最重要的参考&#xff1a; HEVC approved by ITU-T and ISO/IEC "Geneva, 25 January 2013 – A new video coding standard building on the PrimeTime Emmy award winning IT…

期权计算隐含波动率

牛顿迭代法 from scipy.stats import norm import numpy as np def bscall(S,K,r,sigma,t):d1(np.log(S/K)(r0.5*sigma**2)*t)/(sigma*np.sqrt(t))d2d1-sigma*np.sqrt(t)return S*norm.cdf(d1)-K*np.exp(-r*t)*norm.cdf(d2) def bsput(S,K,r,sigma,t):d1(np.log(S/K)(r0.5*sigm…

进击的二维码 | ArcBlock 课堂预告

ArcBlock Technical Learning Series 第十七期进击的二维码本周三&#xff0c;1 月 30 日下午 1:30 时 &#xff08;美国太平洋时间 29日下午 21:30 时&#xff09;&#xff0c;由 ArcBloc 后端工程师孙博山 授课。复制代码二维码源于日本,如今世界各国都在使用。一张简单的二维…

期权数据计算

判断是否为调仓日 ef is_adjust_day(self, dom1):判断是否是每月的调仓日。 :params int dom: 每月第几个交易日进行调仓&#xff0c;缺省是第1个交易日。:return: 如果是调仓日&#xff0c;返回True&#xff0c;否则返回False。ret Falsetoday self.datetime.date()…

由Docker的MySQL官方镜像配置的容器无法启动问题解决办法(修改配置后无法启动)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 为了方便阅读&#xff0c;我在原文基础上加了一些批注&#xff0c;说明我自己的情况&#xff0c;用红色标示。 这篇文章记录了我在使用…

HEVC/H265 主要设计者谈HEVC/H265

Overview of the High Efficiency Video Coding (HEVC) Standard Gary J. Sullivan, Fellow, IEEE, Jens-Rainer Ohm, Member, IEEE, Woo-Jin Han, Member, IEEE, and Thomas Wiegand, Fellow, IEEE Gary J. Sullivan是H263&#xff…

阿里云 Aliplayer高级功能介绍(九):自动播放体验

基本介绍经常会碰到客户询问&#xff0c;为什么我设置了autoplay为true&#xff0c;但是没有自动播放&#xff0c;每次都要向客户解释这个是浏览器从用户体验角度考虑做的限制&#xff0c;客户会继续询问那我要怎么做&#xff1f; 针对这个问题Aliplayer也专们做过优化&#xf…

指数定投(行不行学习)

import tushare as ts import pandas as pd import numpy as np from scipy import stats import tushare as ts import matplotlib.pyplot as plt %matplotlib inline #正常显示画图时出现的中文和负号 from pylab import mpl mpl.rcParams[font.sans-serif][SimHei] mpl…

centOS安装python3.7.2

1.查看centos中自带的Python地址&#xff1a;which python&#xff08;一般在 /usr/bin/python&#xff09; 2.切换到python安装目录&#xff1a;cd /usr/bin 3.查看对应的Python版本指向&#xff1a;ls -l python* 4.创建一个空目录&#xff1a;mkdir /usr/local/python3 5.…

有进度条圆周率Π计算

圆周率π的计算 一、圆周率π的简介 圆周率的介绍圆周率用希腊字母 π&#xff08;读作pi&#xff09;表示&#xff0c;是一个常数&#xff08;约等于3.141592654&#xff09;&#xff0c;是代表圆周长和直径的比值。它是一个即无限不循环小数&#xff0c;在日常生活中&#xf…

期权制作回测数据

将指定的档位的期权&#xff0c;指定阶段剩余到期日的期权数据合并&#xff0c;用于回测 import pandas as pd import numpy as np import akshare as ak pd.set_option("display.max_rows",None) pd.set_option("display.max_columns",None)nh_price ak…

HEVC/H265 HM10.0 分析(一)NALread.cpp

下面分析 NALread.cpp 函数和代码。 void read(InputNALUnit& nalu, vector<uint8_t>& nalUnitBuf) {/* perform anti-emulation prevention */TComInputBitstream *pcBitstream new TComInputBitstream(NULL);convertPayloadToRBSP(nalUnitBuf, (nalUnitBuf[0]…

Docker run 命令 参数说明

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 docker run &#xff1a;创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...][OPTIONS] IMAGE [COM…

【云周刊】第205期:阿里云重磅开源实时计算平台Blink,挑战计算领域的“珠峰”...

本期头条 阿里云重磅开源实时计算平台Blink&#xff0c;挑战计算领域的“珠峰” 信息爆炸的时代&#xff0c;智能推荐已经被应用到各类互联网产品中&#xff0c;但为千万级甚至亿级规模的用户实时做精准的推荐难度极高。这一难题已经被阿里攻克了&#xff1a;双11的第1分钟&…

凯特勒通道(backtrader)

import backtrader as bt import datetime import pandas as pd import matplotlib.pyplot as plt import backtrader.analyzers as btanalyzers#定义指标 class Ketler(bt.Indicator):params dict(ema20,atr 17)lines (expo,atr,upper,lower)plotinfo dict(subplot False)p…