Python获取股票历史数据和收盘数据的代码实现 - 公司荣誉 - 新余市思创暖通工贸有限公司
现在的位置: 主页 > 公司荣誉 > 文章正文
Python获取股票历史数据和收盘数据的代码实现
作者:新余市思创暖通工贸有限公司 来源:www.jxsichuang.com 发布时间:2017-09-11 13:27:07
Python获取股票历史数据和收盘数据的代码实现 各种股票软件,例如通达信、同花顺、大智慧,都可以实时查看股票价格和走势,做一些简单的选股和定量分析,但是如果你想做更复杂的分析,例如回归分析、关联分析等就有点捉襟见肘,所以最好能够获取股票历史及实时数据并存储到数据库,然后再通过其他工具,例如SPSS、SAS、EXCEL或者其他高级编程语言连接数据库获取股票数据进行定量分析,这样就能实现更多目的了。

为此,首先需要找到可以获取股票数据的接口,新浪、雅虎、腾讯等都有接口可以实时获取股票数据,历史数据选择了雅虎接口,收盘数据选择了腾讯接口。

(1)项目结构

wKioL1YyHhfTV5ZQAAE6J6--0Gg957.jpg

(2)数据库连接池

connectionpool.py

#-*- coding: UTF-8 -*- ''' create a connection pool ''' from DBUtils import PooledDB import MySQLdb import string maxconn = 30 #最大连接数 mincached = 10 #最小空闲连接 maxcached = 20 #最大空闲连接 maxshared = 30 #最大共享连接 connstring="root#root#127.0.0.1#3307#pystock#utf8" #数据库地址 dbtype = "mysql" #选择mysql作为存储数据库 def createConnectionPool(connstring, dbtype): db_conn = connstring.split("#"); if dbtype=='mysql': try: pool = PooledDB.PooledDB(MySQLdb, user=db_conn[0],passwd=db_conn[1],host=db_conn[2],port=string.atoi(db_conn[3]),db=db_conn[4],charset=db_conn[5], mincached=mincached,maxcached=maxcached,maxshared=maxshared,maxconnections=maxconn) return pool except Exception, e: raise Exception,'conn datasource Excepts,%s!!!(%s).'%(db_conn[2],str(e)) return None pool = createConnectionPool(connstring, dbtype)

(3)数据库操作

DBOperator.py

#-*- coding: UTF-8 -*- ''' Created on 2015-3-13 @author: Casey ''' import MySQLdb from stockmining.stocks.setting import LoggerFactory import connectionpool class DBOperator(object): def __init__(self): self.logger = LoggerFactory.getLogger('DBOperator') #self.conn = None def connDB(self): #单连接 #self.conn=MySQLdb.connect(host="127.0.0.1",user="root",passwd="root",db="pystock",port=3307,charset="utf8") #连接池中获取连接 self.conn=connectionpool.pool.connection() return self.conn def closeDB(self): if(self.conn != None): self.conn.close() def insertIntoDB(self, table, dict): try: if(self.conn != None): cursor = self.conn.cursor() else: raise MySQLdb.Error('No connection') sql = "insert into " + table + "(" param = [] for key in dict: sql += key + ',' param.append(dict.get(key)) param = tuple(param) sql = sql[:-1] + ") values(" for i in range(len(dict)): sql += "%s," sql = sql[:-1] + ")" self.logger.debug(sql % param) n = cursor.execute(sql, param) self.conn.commit() cursor.close() except MySQLdb.Error,e: self.logger.error("Mysql Error %d: %s" % (e.args[0], e.args[1])) self.conn.rollback() def execute(self, sql): try: if(self.conn != None): cursor = self.conn.cursor() else: raise MySQLdb.Error('No connection') n = cursor.execute(sql) return n except MySQLdb.Error,e: self.logger.error("Mysql Error %d: %s" % (e.args[0], e.args[1])) def findBySQL(self, sql): try: if(self.conn != None): cursor = self.conn.cursor() else: raise MySQLdb.Error('No connection') cursor.execute(sql) rows = cursor.fetchall() return rows except MySQLdb.Error,e: self.logger.error("Mysql Error %d: %s" % (e.args[0], e.args[1])) def findByCondition(self, table, fields, wheres): try: if(self.conn != None): cursor = self.conn.cursor() else: raise MySQLdb.Error('No connection') sql = "select " for field in fields: sql += field + "," sql = sql[:-1] + " from " + table + " where " param = [] values = '' for where in wheres: sql += where.key + "='%s' and " param.append(where.value) param = tuple(param) self.logger.debug(sql) n = cursor.execute(sql[:-5] % param) self.conn.commit() cursor.close() except MySQLdb.Error,e: self.logger.error("Mysql Error %d: %s" % (e.args[0], e.args[1]))

(4)日志

LoggerFactory.py

#-*- coding: UTF-8 -*- ''' Created on 2015-3-11 @author: Casey ''' import logging import time ''' 传入名称 ''' def getLogger(name): now = time.strftime('%Y-%m-%d %H:%M:%S') logging.basicConfig( level = logging.DEBUG, format = now +" : " + name + ' LINE %(lineno)-4d %(levelname)-8s %(message)s', datefmt = '%m-%d %H:%M', filename = "d:\\stocks\stock.log", filemode = 'w'); console = logging.StreamHandler(); console.setLevel(logging.DEBUG); formatter = logging.Formatter(name + ': LINE %(lineno)-4d : %(levelname)-8s %(message)s'); console.setFormatter(formatter); logger = logging.getLogger(name) logger.addHandler(console); return logger if __name__ == '__main__': getLogger("www").debug("www")

(5)获取股票历史数据

采用雅虎的接口:?s=<string>&a=<int>&b=<int>&c=<int>&d=<int>&e=<int>&f=<int>&g=d&ignore=.csv

参 数:s — 股票名称

a — 起始时间,月

b — 起始时间,日

c — 起始时间,年

d — 结束时间,月

e — 结束时间,日

f — 结束时间,年

g— 时间周期。

(一定注意月份参数,其值比真实数据-1。如需要9月数据,则写为08。)

示例 查询浦发银行2010.09.25 – 2010.10.8之间日线数据

?s=600000.SS&a=08&b=25&c=2010&d=09&e=8&f=2010&g=d

返回:

Date,Open,High,Low,Close,Volume,Adj Close

2010-09-30,12.37,12.99,12.32,12.95,76420500,12.95

2010-09-29,12.20,12.69,12.12,12.48,79916400,12.48

2010-09-28,12.92,12.92,12.57,12.58,63988100,12.58

2010-09-27,13.00,13.02,12.89,12.94,43203600,12.94

因为数据量比较大,需要跑很久,所以也可以考虑多线程模式来获取相关数据,单线程模式:

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:上海网站建设 http://www.flpsz.com


  • 上一篇:iOS UI07_导航视图控制器
  • 下一篇:最后一页
  • 
    COPYRIGHT © 2015 新余市思创暖通工贸有限公司 ALL RIGHTS RESERVED.
    本站所有原创信息,未经许可请勿任意转载或复制使用 网站地图 技术支持:肥猫科技
    精彩专题:网站建设
    购买本站友情链接、项目合作请联系客服QQ:2500-38-100