2.3. 获取历史行情数据——情绪指数目前pro版本国外已经支持如下指数数据(数据来源:https://tushare.pro/):
指数名称
XIN9
富时中国A50指数 (富时A50)
HSI
恒生指数
DJI
道琼斯工业指数
SPX
标普500指数
IXIC
纳斯达克指数
FTSE
富时100指数
FCHI
法国CAC40指数
GDAXI
德国DAX指数
N225
日经225指数
KS11
韩国综合指数
AS51
澳大利亚标普200指数
SENSEX
印度孟买SENSEX指数
IBOVESPA
巴西IBOVESPA指数
RTS
俄罗斯RTS指数
TWII
台湾加权指数
CKLSE
马来西亚指数
SPTSX
加拿大S&P/TSX指数
CSX5P
STOXX欧洲50指数
使用方法:
#美股指数def get_us_index(self,start_date,end_date):if self.pro:self.us_index = self.stock.index_global(ts_code= self.us_code, start_date=start_date, end_date=end_date)self.us_index = self.us_index[self.columns]return self.us_index2.4. 获取分时数据升级pro版本,可以获取3年的数据,而老版本 只能获取1个月的分时数据 。#获取分钟级别数据def get_tickshare_dat(self,freq,start_date, end_date):if self.pro:start_date=re.sub('D','',start_date)end_date = re.sub('D','',end_date)freq = freq + 'min'self.tickshare_dat = ts.pro_bar(ts_code=self.code, freq = freq,start_date=start_date, end_date=end_date)self.tickshare_dat['vol'] = self.tickshare_dat['vol'] /100else:# ktype:数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为Dself.tickshare_dat = ts.get_hist_data(code=self.code, ktype = freq,start=start_date, end=end_date)self.tickshare_dat['ts_code'] = self.codeself.tickshare_dat = self.tickshare_dat.reset_index()self.tickshare_dat = self.tickshare_dat.rename(columns={ 'date':'trade_time','volume':'vol'})self.tickshare_dat['trade_date'] = self.tickshare_dat['trade_time'].Apply(lambda x:re.sub('D','',x[0:10]))self.setCodebyOld()self.tickshare_dat['ts_code'] = self.codeself.tickshare_dat = self.tickshare_dat[['ts_code','trade_time','open','high','close','low','vol','trade_date']]return self.tickshare_dat注:输入freq为字符型数字,1/5/15/30/602.5. 获取股票基本信息#获取股票基本面信息def get_ShareInfo(self,trade_date):if self.pro:self.shareInfo = self.stock.daily_basic(ts_code=self.code, trade_date=trade_date) #, fields='ts_code,trade_date,turnover_rate,volume_ratio,pe,pb')else:self.shareInfo = ts.get_stock_basics()print(self.shareInfo)2.6. 获取复权数据# 获取复权数据def get_h_dat(self,start_date,end_date,fq='hfq'):#self.h_dat = ts.get_h_data(code=self.code, autype='hfq',start=start_date, end=end_date)self.h_dat = ts.pro_bar(ts_code=self.code, adj=fq, start_date=start_date, end_date=end_date)return self.h_dat3. 数据存储在本地Mongo数据库中class Stock_Collection(object):def __init__(self,db_name):self.db_name = db_nameclient = pymongo.MongoClient('mongodb://stock:stock@localhost:27017/stock')self.db = client[self.db_name]def insertdatas(self,name,datas):collection = self.db[name]collection.insert(json.loads(datas.T.to_json()).values())def getDistinctCode(self,name):collection = self.db[name]code = collection.distinct('ts_code')return codedef setIndex_Code(self):self.sentiment_index = ['IXIC','DJI','HSI'] # 情绪指数self.sentiment_index_column = ['trade_date','open','high','close','low','change','pct_chg']self.index_daily = ['000001.SH', '399001.SZ']self.index_daily_column = ['trade_date','open','high','close','low','vol','change','pct_chg']def setCode(self,code):self.code = code #['002230.SZ'] #, '000547.SZ', '601318.SH', '601208.SH', '600030.SH', '000938.SZ', '002108.SZ', '600967.SH']self.stock_column = ['trade_date','open','high','close','low','vol','change','pct_chg']# 构造LSTM模型训练集def generate_train_datas(self,db_name,code_name,filename):collection = self.db[db_name]self.out_code = code_name#查询条件“字典”query_dict = { 'ts_code':'1','trade_date':{ '$gt':'20171001'}}#col_name = {'_id':0,'trade_date':1,'ts_code':1,'open':1,'high':1,'close':1,'low':1,'vol':1,'change':1,'pct_chg':1}col_name = { '_id':0}for d in self.stock_column:col_name[d] = 1query_dict['ts_code'] = self.out_code#注意时间排序df = pd.DataFrame(list(collection.find(query_dict,col_name).sort([('trade_date',1)])))df['trade_date'] = df['trade_date'].apply(lambda x:re.sub('D','',x)) #去掉日期中的“-”符号self.code.remove(self.out_code)# 删除输出股票代码#构造股票数据集n = 0k = 0columns = self.stock_column.copy()columns.remove('trade_date')print('Start!')#self.code长度为1,下面循环不执行for code in self.code:query_dict['ts_code'] = codedf1 = pd.DataFrame(list(collection.find(query_dict,col_name).sort([('trade_date',1)])))df1['trade_date'] = df1['trade_date'].apply(lambda x:re.sub('D','',x)) #去掉日期中的“-”符号#按日期合并两个表#df =pd.merge(left=df,right=df1,how='left',on=['trade_date'])#以上证为基准df =pd.merge(left=df,right=df1,how='inner',on=['trade_date'])# 处理合并表,字段重复的情况,需要把_x,_y新命名字段,下轮继续cols_dict = { }for cols in columns:cols_dict[cols+'_x'] = cols + str(n)cols_dict[cols+'_y'] = cols + str(n+1)if k==0:df = df.rename(columns=cols_dict)n = n + 2k = 1else:k = 0print('code 1')print(df)#构造数据集——上证、深成指数query_dict = { 'ts_code':'1'}columns = self.index_daily_column.copy() #默认list为传址,需要赋值新listcolumns.remove('trade_date')print(self.index_daily_column)for index_daily in self.index_daily:query_dict['ts_code'] = index_dailycol_name = { '_id':0}for d in self.index_daily_column:col_name[d] = 1df1 = pd.DataFrame(list(collection.find(query_dict,col_name).sort([('trade_date',1)])))df1['trade_date'] = df1['trade_date'].apply(lambda x:re.sub('D','',x)) #去掉日期中的“-”符号#按日期合并两个表df =pd.merge(left=df,right=df1,how='left',on=['trade_date'])cols_dict = { }for cols in columns:cols_dict[cols+'_x'] = cols + str(n)cols_dict[cols+'_y'] = cols + str(n+1)if k==0:df = df.rename(columns=cols_dict)n = n + 2k = 1else:k = 0print(df)#构造数据集——情绪指数columns = self.sentiment_index_column.copy()columns.remove('trade_date')for sentiment_index in self.sentiment_index:query_dict['ts_code'] = sentiment_indexcol_name = { '_id':0}for d in self.sentiment_index_column:col_name[d] = 1df1 = pd.DataFrame(list(collection.find(query_dict,col_name).sort([('trade_date',1)])))df1['trade_date'] = df1['trade_date'].apply(lambda x:re.sub('D','',x)) #去掉日期中的“-”符号#按日期合并两个表df =pd.merge(left=df,right=df1,how='left',on=['trade_date'])cols_dict = { }for cols in columns:cols_dict[cols+'_x'] = cols + str(n)cols_dict[cols+'_y'] = cols + str(n+1)df = df.rename(columns=cols_dict)if k==0:df = df.rename(columns=cols_dict)n = n + 2k = 1else:k = 0print(df)df = df.fillna(0) #数据缺失补上为0,相当于停盘!!!df.to_csv(filename)
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 快速而强大的Python图形用户界面工具包DearPyGui
- 一文弄清Python网络爬虫解析库!内含多个实例讲解
- python 手把手教你基于搜索引擎实现文章查重
- Python开发者的最强工具PyCharm发布2021最新版
- 真的够可以的,基于Netty实现了RPC框架
- 大道至简,Python 装饰器 的通俗讲解
- Python爬虫练习:爬取800多所大学学校排名、星级等
- 60行Python代码轻松搞定数据库查询 1秒找到需要的数据
- C++调用python解释器
- 软件测试工具monkeyrunner基于python脚本开发
