def classification(class_types): if class_types == 'industry': industry_classified = ts.get_industry_classified() industry_classified.to_csv('D:\\ts\\classification\\industry_classified.csv', encoding='gbk') elif class_types == 'concept': concept_classified = ts.get_concept_classified() concept_classified.to_csv('D:\\ts\\classification\\concept_classified.csv', encoding='gbk') elif class_types == 'area': area_classified = ts.get_area_classified() area_classified.to_csv('D:\\ts\\classification\\area_classified.csv', encoding='gbk') elif class_types == 'sme': sme_classified = ts.get_sme_classified() sme_classified.to_csv('D:\\ts\\classification\\sme_classified.csv', encoding='gbk') elif class_types == 'gem': gem_classified = ts.get_gem_classified() gem_classified.to_csv('D:\\ts\\classification\\gem_classified.csv', encoding='gbk') elif class_types == 'st': st_classified = ts.get_st_classified() st_classified.to_csv('D:\\ts\\classification\\st_classified.csv', encoding='gbk') elif class_types == 'hs300': hs300s = ts.get_hs300s() hs300s.to_csv('D:\\ts\\classification\\hs300s.csv', encoding='gbk') elif class_types == 'sz50': sz50s = ts.get_sz50s() sz50s.to_csv('D:\\ts\\classification\\sz50s.csv', encoding='gbk') elif class_types == 'zz500': zz500s = ts.get_zz500s() zz500s.to_csv('D:\\ts\\classification\\zz500s.csv', encoding='gbk') elif class_types == 'terminated': terminated = ts.get_terminated() terminated.to_csv('D:\\ts\\classification\\terminated.csv', encoding='gbk') elif class_types == 'suspended': suspended = ts.get_suspended() suspended.to_csv('D:\\ts\\classification\\suspended.csv', encoding='gbk')
def get_zz500s(): try: df = ts.get_zz500s(); engine = create_engine('mysql://*****:*****@127.0.0.1/stock?charset=utf8') # df.insert(0,'code','600848') df.to_sql('zz500s', engine, if_exists='append') except Exception, e: e.message
def gen_zz800_stock_list(): ''' :return: 生成中证800股票代码,[code, name, weight, date] ''' zz500 = ts.get_zz500s() hs300 = ts.get_hs300s() zz800 = zz500.append(hs300) zz800 = zz800[['code', 'name', 'weight', 'date']] zz800.columns = zz800.columns.str.upper() zz800.to_csv(config.rootPath + '/data/gen_data/zz800_codes.csv', index=False)
def storagepool(self): #storage zz500 df=ts.get_zz500s() self.pool['zz500'].insert_many(json.loads(df.to_json(orient='records'))) #hs300 df=ts.get_hs300s() self.pool['hz300'].insert_many(json.loads(df.to_json(orient='records'))) #zh50 df=ts.get_sz50s() self.pool['sz'].insert_many(json.loads(df.to_json(orient='records'))) #st df=ts.get_st_classified() self.pool['st'].insert_many(json.loads(df.to_json(orient='records')))
def list(self, stock_block_type): stock_block = None if stock_block_type == self.industry: stock_block = db.get(STOCK_BLOCK_INDUSTRY) if stock_block is None: stock_block = ts.get_industry_classified() db.save(STOCK_BLOCK_INDUSTRY, stock_block) elif stock_block_type == self.concept: stock_block = db.get(STOCK_BLOCK_CONCEPT) if stock_block is None: stock_block = ts.get_concept_classified() db.save(STOCK_BLOCK_CONCEPT, stock_block) elif stock_block_type == self.area: stock_block = db.get(STOCK_BLOCK_AREA) if stock_block is None: stock_block = ts.get_area_classified() db.save(STOCK_BLOCK_AREA, stock_block) elif stock_block_type == self.sme: stock_block = db.get(STOCK_BLOCK_SME) if stock_block is None: stock_block = ts.get_sme_classified() db.save(STOCK_BLOCK_SME, stock_block) elif stock_block_type == self.gem: stock_block = db.get(STOCK_BLOCK_GEM) if stock_block is None: stock_block = ts.get_gem_classified() db.save(STOCK_BLOCK_GEM, stock_block) elif stock_block_type == self.st: stock_block = db.get(STOCK_BLOCK_ST) if stock_block is None: stock_block = ts.get_st_classified() db.save(STOCK_BLOCK_ST, stock_block) elif stock_block_type == self.hs300s: stock_block = db.get(STOCK_BLOCK_HS300S) if stock_block is None: stock_block = ts.get_hs300s() db.save(STOCK_BLOCK_HS300S, stock_block) elif stock_block_type == self.sz50s: stock_block = db.get(STOCK_BLOCK_SZ50S) if stock_block is None: stock_block = ts.get_sz50s() db.save(STOCK_BLOCK_SZ50S, stock_block) elif stock_block_type == self.zz500s: stock_block = db.get(STOCK_BLOCK_ZZ500S) if stock_block is None: stock_block = ts.get_zz500s() db.save(STOCK_BLOCK_ZZ500S, stock_block) else: return None return stock_block
def preload(): stock_block = ts.get_industry_classified() db.save(STOCK_BLOCK_INDUSTRY, stock_block) stock_block = ts.get_concept_classified() db.save(STOCK_BLOCK_CONCEPT, stock_block) stock_block = ts.get_area_classified() db.save(STOCK_BLOCK_AREA, stock_block) stock_block = ts.get_sme_classified() db.save(STOCK_BLOCK_SME, stock_block) stock_block = ts.get_gem_classified() db.save(STOCK_BLOCK_GEM, stock_block) stock_block = ts.get_st_classified() db.save(STOCK_BLOCK_ST, stock_block) stock_block = ts.get_hs300s() db.save(STOCK_BLOCK_HS300S, stock_block) stock_block = ts.get_sz50s() db.save(STOCK_BLOCK_SZ50S, stock_block) stock_block = ts.get_zz500s() db.save(STOCK_BLOCK_ZZ500S, stock_block)
def spr(): """ Main interface :return: a filtered stock list """ global count today = date.today().strftime('%Y-%m-%d').encode() trx_date = ts.get_hist_data('sh').index if today in trx_date: # four days included today begin = trx_date[2].encode() else: # four days excluded today begin = trx_date[3].encode() print 'Starting from %s ...' % str(begin) # get full stock list print 'Getting stock list ...', stock_list = ts.get_zz500s().code print 'Done: %s stocks' % len(stock_list) # filtering process count = 0 return filter(lambda x: stock_filter(x, begin), stock_list)
end_day = now else: end_day = now - datetime.timedelta(days=1) try: stock_basics = ts.get_stock_basics() except: print('get_stock_basics timeout!') sys.exit(1) try: list_code = sys.argv[1] if int(list_code) == 500: try: stock_500 = ts.get_zz500s() except: print('get_zz500s timeout!') sys.exit(1) stock_list = stock_500.code.values else: sys.exit(1) except: stock_list = stock_basics.index.values pool = multiprocessing.Pool(processes=4) for stock_code in sorted(stock_list): pool.apply_async(job2weight,(stock_code,end_day,stock_basics)) pool.close() pool.join()
def get_zz500s_history(): zz500s = ts.get_zz500s() return get_data_by_column(zz500s)
# ST Enterprise ST = ts.get_st_classified() ST.to_csv('./ASHR/DATA/ST.csv', index = False) ts.get_h_data() # HS 300 HS300S = ts.get_hs300s() HS300S.to_csv('./ASHR/DATA/HS300S.csv', index = False) # SZ 50 SZ50S = ts.get_sz50s() SZ50S.to_csv('./ASHR/DATA/SZ50S.csv', index = False) # ZZ 500 ZZ500S = ts.get_zz500s() ZZ500S.to_csv('./ASHR/DATA/ZZ500S.csv', index = False) ################# # Fund Holdings # ################# # TODO Data is available quarterly FundHolding = ts.fund_holdings(CURRENT.year, np.floor((CURRENT.month+2)/3)) #################### # Financial Report # #################### # FinancialReport: EPS, EPS_YOY, ROE, net_profits, profits_yoy
#-*- coding: utf-8 -*- import tushare as ts import pandas as pd import numpy as np import datetime import uniout from sqlalchemy import create_engine stock_concept = ts.get_concept_classified() stock_hs300s = ts.get_hs300s() stock_sz50s = ts.get_sz50s() stock_zz500s = ts.get_zz500s() stock_list = ts.get_stock_basics() stock_list['concept_name'] = '' stock_list['ishs300s'] = 0 stock_list['issz50s'] = 0 stock_list['iszz500s'] = 0 for code in stock_list.index: temp_con = stock_concept[stock_concept['code'] == code] temp_hs300s = stock_hs300s[stock_hs300s['code'] == code] temp_sz50s = stock_sz50s[stock_sz50s['code'] == code] temp_zz500s = stock_zz500s[stock_zz500s['code'] == code] if len(temp_con) > 0: stock_list.loc[code]['concept_name'] = temp_con['c_name'] else: stock_list.loc[code]['concept_name'] = '' print 'concept_name insert' if len(temp_hs300s) == 0:
返回值说明: code:股票代码 name:股票名称''' print('上证50成份股') print(ts.get_sz50s()) '''获取中证500成份股 返回值说明: code:股票代码 name:股票名称''' print('中证500成份股') print(ts.get_zz500s()) '''获取已经被终止上市的股票列表,数据从上交所获取,目前只有在上海证券交易所交易被终止的股票。 返回值说明: code:股票代码 name:股票名称 oDate:上市日期 tDate:终止上市日期''' print('终止上市股票列表') print(ts.get_terminated()) ''''获取被暂停上市的股票列表,数据从上交所获取,目前只有在上海证券交易所交易被终止的股票。 返回值说明:
print("#0", df) df = ts.get_hist_data('600848',start='2016-08-05',end='2016-08-23') print("#1", df) df = ts.get_hist_data('600848',start='2016-08-05',end='2016-08-23', ktype='W') print("#2", df) df = ts.get_hist_data('600848',start='2016-08-05',end='2016-08-23', ktype='M') print("#3", df) df = ts.get_hist_data('600848',start='2016-08-05',end='2016-08-23', ktype='5') print("#4", df) df = ts.get_hist_data('600848',start='2016-08-05',end='2016-08-23', ktype='15') print("#5", df) df = ts.get_hist_data('600848',start='2016-08-05',end='2016-08-23', ktype='30') print("#6", df) df = ts.get_hist_data('600848',start='2016-08-05',end='2016-08-23', ktype='60') print("#7", df) df = ts.get_index() printD("ts.get_index", df) df = ts.get_suspended() printD("ts.get_suspended()", df) df = ts.get_sz50s() printD("ts.get_sz50s", df) df = ts.get_terminated() printD("ts.get_terminated", df) df = ts.get_zz500s() printD("ts.get_zz500s", df)
def stat_all(tmp_datetime): # 存款利率 # data = ts.get_deposit_rate() # common.insert_db(data, "ts_deposit_rate", False, "`date`,`deposit_type`") # # # 贷款利率 # data = ts.get_loan_rate() # common.insert_db(data, "ts_loan_rate", False, "`date`,`loan_type`") # # # 存款准备金率 # data = ts.get_rrr() # common.insert_db(data, "ts_rrr", False, "`date`") # # # 货币供应量 # data = ts.get_money_supply() # common.insert_db(data, "ts_money_supply", False, "`month`") # # # 货币供应量(年底余额) # data = ts.get_money_supply_bal() # common.insert_db(data, "ts_money_supply_bal", False, "`year`") # # # 国内生产总值(年度) # data = ts.get_gdp_year() # common.insert_db(data, "ts_gdp_year", False, "`year`") # # # 国内生产总值(季度) # data = ts.get_gdp_quarter() # common.insert_db(data, "ts_get_gdp_quarter", False, "`quarter`") # # # 三大需求对GDP贡献 # data = ts.get_gdp_for() # common.insert_db(data, "ts_gdp_for", False, "`year`") # # # 三大产业对GDP拉动 # data = ts.get_gdp_pull() # common.insert_db(data, "ts_gdp_pull", False, "`year`") # # # 三大产业贡献率 # data = ts.get_gdp_contrib() # common.insert_db(data, "ts_gdp_contrib", False, "`year`") # # # 居民消费价格指数 # data = ts.get_cpi() # common.insert_db(data, "ts_cpi", False, "`month`") # # # 工业品出厂价格指数 # data = ts.get_ppi() # common.insert_db(data, "ts_ppi", False, "`month`") #############################基本面数据 http://tushare.org/fundamental.html # 股票列表 data = ts.get_stock_basics() # print(data.index) # 解决ESP 小数问题。 data["esp"] = data["esp"].round(2) # 数据保留2位小数 common.insert_db(data, "ts_stock_basics", True, "`code`") # http://tushare.org/classifying.html#id9 # # 行业分类 必须使用 PRO 接口查询。 # data = ts.get_industry_classified() # common.insert_db(data, "ts_industry_classified", True, "`code`") # # # 概念分类 必须使用 PRO 接口查询。 # data = ts.get_concept_classified() # common.insert_db(data, "ts_concept_classified", True, "`code`") # 沪深300成份股及权重 data = ts.get_hs300s() data = data.drop(columns=["date"]) # 删除日期 data = data.set_index("code") # 替换索引 common.insert_db(data, "ts_stock_hs300s", True, "`code`") # # 上证50成份股 没有数据?? # data = ts.get_sz50s() # common.insert_db(data, "ts_sz50s", True, "`code`") # 中证500成份股 data = ts.get_zz500s() data = data.drop(columns=["date"]) # 删除日期 data = data.set_index("code") # 替换索引 common.insert_db(data, "ts_stock_zz500s", True, "`code`")
# -*- coding: utf-8 -*- """ Created on Wed Apr 13 21:39:24 2016 @author: Administrator """ import tushare as ts import pandas as pd import numpy as np from pandas import DataFrame,Series zz500s = ts.get_zz500s() #============================================================================== # for stock in zz500s['code']: # hisdata = ts.get_hist_data(stock,start ='20140101' ) # hisdata.to_csv('D:\\pythonTest\\stockfile\\'+ stock + '.csv' ) #============================================================================== stocklist = [] for stock in zz500s['code']: hisdata = ts.get_hist_data(stock,start ='2016-04-01') if (abs(hisdata['close']-hisdata['ma5'])/hisdata['ma5']<0.02).all() \ and (hisdata['ma5'] > hisdata['ma10']).all() \ and (hisdata['ma10'] > hisdata['ma20']).all() \ and (abs(hisdata['high']-hisdata['close'])/hisdata['close']<0.02).all():
gc = ts.get_gem_classified() print(gc) # 风险警示板分类 # 获取风险警示板股票数据,即查找所有st股票 st = ts.get_st_classified() print(st) # 沪深300成份及权重 # 获取沪深300当前成份股及所占权重 # FIXME 有bug h3 = ts.get_hs300s() print(h3) # 上证50成份股 # 获取上证50成份股 # FIXME 有bug ts.get_sz50s() # 中证500成份股 # FIXME 有bug ts.get_zz500s() # 终止上市股票列表 t = ts.get_terminated() print(t) # 暂停上市股票列表 # 获取被暂停上市的股票列表,数据从上交所获取,目前只有在上海证券交易所交易被终止的股票。 s = ts.get_suspended() print(s)
import tushare as ts # 中证500成份股 # 获取中证500成份股 # # 返回值说明: # # code:股票代码 # name:股票名称 df = ts.get_zz500s() print(df) # date code name weight # 0 2019-09-30 600006 东风汽车 0.10 # 1 2019-09-30 600008 首创股份 0.20 # 2 2019-09-30 600017 日照港 0.14 # 3 2019-09-30 600021 上海电力 0.22 # 4 2019-09-30 600022 山东钢铁 0.25 # .. ... ... ... ... # 495 2019-09-30 300376 易事特 0.11 # 496 2019-09-30 300383 光环新网 0.45 # 497 2019-09-30 300418 昆仑万维 0.19 # 498 2019-09-30 300450 先导智能 0.47 # 499 2019-09-30 300459 金科文化 0.08 # # [500 rows x 4 columns]
def get_stock_zz500(): """ 获取中证500成份股 """ return ts.get_zz500s()
db.commit() else: sql8 = "update stock_classify w set w.sz50 = '%s' where w.stock_code = '%s'" % ( str(1), str(resu8[0])) cursor.execute(sql8) db.commit() except Exception as ex: print(ex) continue con_sql8 = "select distinct stock_code from stock_classify" cursor.execute(con_sql8) done_set8 = cursor.fetchall() db.commit() con8 = [x[0] for x in done_set8] temp9 = ts.get_zz500s() temp9mid = np.array(temp9) print('Init_Classify ===>> 9 of 9. ZZ500') for q in range(len(temp9mid)): resu9 = temp9mid[q] try: if resu9[0] not in con8: sql9 = "insert into stock_classify(stock_code,zz500)values('%s','%s')" % ( str(resu9[0]), str(1)) cursor.execute(sql9) db.commit() else: sql9 = "update stock_classify w set w.zz500 = '%s' where w.stock_code = '%s'" % ( str(1), str(resu9[0])) cursor.execute(sql9) db.commit()
def classified(): #在现实交易中,经常会按行业统计股票的涨跌幅或资金进出,本接口按照sina财经对沪深股票进行的行业分类,返回所有股票所属行业的信息。 #注意:有的股票属于两个行业:如000587 industry = ts.get_industry_classified() industry = industry.drop_duplicates() industry_new = data_pro(industry) industry_new.rename(columns={'c_name': 'industry'}, inplace=True) #返回股票概念的分类数据,现实的二级市场交易中,经常会以”概念”来炒作,在数据分析过程中,可根据概念分类监测资金等信息的变动情况。 concept = ts.get_concept_classified() concept = concept.drop_duplicates() concept_new = data_pro(concept) concept_new.rename(columns={'c_name': 'concept'}, inplace=True) #按地域对股票进行分类,即查找出哪些股票属于哪个省份。 area = ts.get_area_classified() area = area.drop_duplicates() area_new = data_pro(area) #获取中小板股票数据,即查找所有002开头的股票 sme = ts.get_sme_classified() sme['belong_bk'] = '中小板' #获取创业板股票数据,即查找所有300开头的股票 gem = ts.get_gem_classified() gem['belong_bk'] = '创业板' #获取风险警示板股票数据,即查找所有st股票 st = ts.get_st_classified() st['belong_bk'] = '风险警示板' bk = pd.concat([sme, gem, st], join='outer', axis=0) bk = bk.drop_duplicates() bk = data_pro(bk) # 获取沪深300当前成份股及所占权重 hs300s = ts.get_hs300s() hs300s = hs300s.iloc[:, 1:-1] hs300s['belong_cfg'] = '沪深300成份股' # 获取上证50成份股 sz50s = ts.get_sz50s() sz50s = sz50s.iloc[:, 1:] sz50s['belong_cfg'] = '上证50成份股' # 获取中证500成份股 zz500s = ts.get_zz500s() zz500s = zz500s.iloc[:, 1:-1] zz500s['belong_cfg'] = '中证500成份股' cfg = pd.concat([hs300s, sz50s, zz500s], join='outer', axis=0) cfg = cfg.drop_duplicates() cfg = data_pro(cfg) # 获取已经被终止上市的股票列表,数据从上交所获取,目前只有在上海证券交易所交易被终止的股票。 terminated = ts.get_terminated() if terminated != None: terminated['终止上市'] = '终止上市' # 获取被暂停上市的股票列表,数据从上交所获取,目前只有在上海证券交易所交易被终止的股票。 suspended = ts.get_suspended() if suspended != None: suspended['暂停上市'] = '暂停上市' # 数据拼接 table_list = [industry_new, concept_new, area_new, bk, cfg] for i in range(len(table_list)): if i == 0: classified_data = table_list[i] else: classified_data = pd.merge(classified_data, table_list[i], how='outer', on=['code', 'name']) classified_data = classified_data.fillna('未知') #一个代码对应多个名称的数据整理 classified_temp = classified_data.groupby(['code']) classified_new = classified_temp.agg(lambda x: '|'.join(x)) classified_dict = { 'industry': '所属行业', 'name': '名称', 'concept': '概念', 'area': '区域', 'belong_bk': '所属板块', 'belong_cfg': '所属成分股' } classified_new.columns = classified_new.columns.map(classified_dict) industry_list = classified_new['所属行业'] industry_list = [i.split('|')[0] for i in industry_list] classified_new['所属行业'] = industry_list return classified_new
def init_zz500s_class(self): df = ts.get_zz500s() df.to_csv(self.zz500_class_file)
def update_stock_info(): trade_cal(True) for _ in range(5): try: time.sleep(0.1) df = ts.get_stock_basics() fle = os.path.join(CURDIR, 'stock.basics.csv') df.to_csv(fle, encoding="utf-8") df = df.set_index(df.index.astype(int)) df.to_sql('stock_list', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 股票列表 save to sql') time.sleep(0.1) df = ts.get_today_all() fle = os.path.join(CURDIR, 'stock.today.csv') df.to_csv(fle, encoding="utf-8") df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_today', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update stock_today') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_industry_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_industry', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 股票行业 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) # ytrack.info('成功 股票基本信息 from network..') # ynotice.send(ytrack.get_logs(), style='stock', title='更新股票基础数据和交易日期') # return for _ in range(5): try: time.sleep(0.1) df = ts.get_concept_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_concept', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 股票概念 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_area_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_area', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 股票地域 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_sme_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_sme', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 中小板股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_gem_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_gem', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update 创业板股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_st_classified() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_st', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update st股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_hs300s() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_hs300', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update hs300股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_sz50s() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_sz50s', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update sz50s股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) for _ in range(5): try: time.sleep(0.1) df = ts.get_zz500s() df = df.set_index('code') df = df.set_index(df.index.astype(int)) df.to_sql('stock_zz500s', engine, if_exists='replace', index=True, index_label='code') ytrack.info('update zz500s股票 save to sql') break except Exception as e: ytrack.error(traceback.format_exc()) ytrack.info('成功 股票基本信息 from network..') ynotice.send(ytrack.get_logs(), style='stock', title='更新股票基础数据和交易日期')
def classification_type(class_types): if class_types == 'classification_industry': industry_classified = ts.get_industry_classified('sw') industry_classified.to_sql('classification_industry', engine, flavor='mysql', if_exists='replace') elif class_types == 'concept': concept_classified = ts.get_concept_classified() concept_classified.to_sql('classification_concept', engine, flavor='mysql', if_exists='replace') elif class_types == 'area': area_classified = ts.get_area_classified() area_classified.to_sql('classification_area', engine, flavor='mysql', if_exists='replace') elif class_types == 'sme': sme_classified = ts.get_sme_classified() sme_classified.to_sql('classification_sme', engine, flavor='mysql', if_exists='replace') elif class_types == 'gem': gem_classified = ts.get_gem_classified() gem_classified.to_sql('classification_gem', engine, flavor='mysql', if_exists='replace') elif class_types == 'st': st_classified = ts.get_st_classified() st_classified.to_sql('classification_st', engine, flavor='mysql', if_exists='replace') elif class_types == 'hs300': hs300s = ts.get_hs300s() hs300s.to_sql('classification_hs300s', engine, flavor='mysql', if_exists='replace') elif class_types == 'sz50': sz50s = ts.get_sz50s() sz50s.to_sql('classification_sz50s', engine, flavor='mysql', if_exists='replace') elif class_types == 'zz500': zz500s = ts.get_zz500s() zz500s.to_sql('classification_zz500s', engine, flavor='mysql', if_exists='replace') elif class_types == 'terminated': terminated = ts.get_terminated() terminated.to_sql('classification_terminated', engine, flavor='mysql', if_exists='replace') elif class_types == 'suspended': suspended = ts.get_suspended() suspended.to_sql('classification_suspended', engine, flavor='mysql', if_exists='replace')
time.localtime(time.time() - 24 * 3600 * 30)) endDate = time.strftime("%Y-%m-%d", time.localtime(time.time())) # print(startDate) # print(endDate) df = ts.get_hist_data(code, startDate, endDate) closeList = df['close'].to_list() def add(x, y): return x + y sum = reduce(add, closeList) return round(sum / len(closeList), 2) stockList = ts.get_zz500s() startDate = time.strftime("%Y-%m-%d", time.localtime(time.time() - 24 * 3600 * 5)) endDate = time.strftime("%Y-%m-%d", time.localtime(time.time())) goodStock1 = goodStock2 = {} for index, row in stockList.iterrows(): code = row["code"] name = row["name"] print(name) print(code) m30 = m30(code) print(m30) df = ts.get_hist_data(code, startDate, endDate) closeList = df['close'].to_list() result = list(filter(lambda x: x > m30, closeList)) if len(result) == len(closeList):
import pymongo import datetime import tushare as ts code_list = ts.get_zz500s().code.tolist() print('unasync-mongo') time2 = datetime.datetime.now() clientx = pymongo.MongoClient('192.168.4.253', 27017).quantaxis.stock_day data = [] def get_data(codelist): for code in codelist: for message in clientx.find({'code': code}): data.append(message) get_data(code_list) print(datetime.datetime.now() - time2)
'''最近周k线''' D_recent_k_data = ts.get_k_data(target_stock_code, ktype='D') '''最近日k线''' recent_k60_data = ts.get_k_data(target_stock_code, ktype='60') '''最近小时线''' recent_k30_data = ts.get_k_data(target_stock_code, ktype='30') '''最近30min线''' recent_k15_data = ts.get_k_data(target_stock_code, ktype='15') '''最近15min线''' recent_k5_data = ts.get_k_data(target_stock_code, ktype='5') '''最近5min线''' #==============================================================================指数成分============================================================================== '''获取指数成分''' df_hs300 = ts.get_hs300s() #获取沪深300当前成份股及所占权重 df_sz50 = ts.get_sz50s() #获取上证50成份股 df_zz500 = ts.get_zz500s() #获取中证500成份股 #==============================================================================投资参考============================================================================== df_dividend = ts.profit_data(top=60) df_dividend.sort('shares',ascending=False) '''分配预案''' df_forecast = ts.forecast_data(2017,4) '''业绩预告''' df_restrict = ts.xsg_data() '''限售股解禁''' df_fund = ts.fund_holdings(2017, 2) '''基金持股''' df_sh = ts.sh_margin_details(start='2015-01-01', end='2015-04-19', symbol='601989') '''上交所融资融券明细''' df_sz = ts.sz_margins(start='2015-01-01', end='2015-04-19') df_sz_detail = ts.sz_margin_details('2015-04-20') '''深交所融资融券总额'''
def capture_stock_data(): capture_date = datetime.datetime.now().strftime("%Y%m%d") current_dir = os.getcwd() save_dir = os.path.join(current_dir, capture_date) if not os.path.exists(save_dir): os.mkdir(save_dir) print("The save directory is created successfully!\n", save_dir) else: print("The save directory is already exist!\n", save_dir) # ======================Daily Command================================================================ # get the boxoffcie data of the last day and save as csvfile named as the capture command ts.day_boxoffice().to_csv( save_dir + "/" + capture_date + "_day_boxoffice.csv", header=True, sep=",", index=False, ) print("day_boxoffice data capture completed!") # get the cinema data of the last day and save as csvfile named as the capture command ts.day_cinema().to_csv( save_dir + "/" + capture_date + "_day_cinema.csv", header=True, sep=",", index=False, ) print("day_cinema data capture completed!") '''ts.month_boxoffice().to_csv( save_dir + "/" + capture_date + "_month_boxoffice.csv", header=True, sep=",", index=False, ) print("month_boxoffice data capture completed!")''' ts.realtime_boxoffice().to_csv( save_dir + "/" + capture_date + "_realtime_boxoffice.csv", header=True, sep=",", index=False, ) print("realtime_boxoffice data capture completed!") # get the stock data index of the last day and save as csvfile named as the capture command ts.get_index().to_csv( save_dir + "/" + capture_date + "_get_index.csv", header=True, sep=",", index=False, ) print("get_index data capture completed!") # get the history cpi data and save as csvfile named as the capture command ts.get_cpi().to_csv( save_dir + "/" + capture_date + "_get_cpi.csv", header=True, sep=",", index=False, ) print("get_cpi data capture completed!") # get the history gdp data by month and save as csvfile named as the capture command ts.get_gdp_year().to_csv( save_dir + "/" + capture_date + "_get_gdp_year.csv", header=True, sep=",", index=False, ) print("get_gdp_year data capture completed!") # get today all stock data and save as csvfile named as the capture command # ts.get_today_all().to_csv(save_dir+'/'+capture_date+'_get_today_all.csv',header=True,sep=',',index=False) # get detail information of the top brokers today and save as csvfile named as the capture command ts.broker_tops().to_csv( save_dir + "/" + capture_date + "_broker_tops.csv", header=True, sep=",", index=False, ) print("broker_tops data capture completed!") # get detail information of the top brokers today and save as csvfile named as the capture command ts.cap_tops().to_csv( save_dir + "/" + capture_date + "_cap_tops.csv", header=True, sep=",", index=False, ) print("cap_tops data capture completed!") ts.get_area_classified().to_csv( save_dir + "/" + capture_date + "_get_area_classified.csv", header=True, sep=",", index=False, ) print("get_area_classified data capture completed!") # ts.get_balance_sheet(code='').to_csv(save_dir+'/'+capture_date+'_get_balance_sheet.csv',header=True,sep=',',index=False) # print('get_balance_sheet data capture completed!') # ts.get_cash_flow(code='').to_csv(save_dir+'/'+capture_date+'_get_cash_flow.csv',header=True,sep=',',index=False) # print('get_cash_flow data capture completed!') ts.get_day_all().to_csv( save_dir + "/" + capture_date + "_get_day_all.csv", header=True, sep=",", index=False, ) print("get_day_all data capture completed!") ts.get_cashflow_data(2018, 3).to_csv( save_dir + "/" + capture_date + "_get_cashflow_data.csv", header=True, sep=",", index=False, ) print("get_cashflow_data data capture completed!") ts.get_concept_classified().to_csv( save_dir + "/" + capture_date + "_get_concept_classified.csv", header=True, sep=",", index=False, ) print("get_concept_classified data capture completed!") ts.get_debtpaying_data(2018, 3).to_csv( save_dir + "/" + capture_date + "_get_debtpaying_data.csv", header=True, sep=",", index=False, ) print("get_debtpaying_data data capture completed!") ts.get_deposit_rate().to_csv( save_dir + "/" + capture_date + "_get_deposit_rate.csv", header=True, sep=",", index=False, ) print("get_deposit_rate data capture completed!") ts.get_gdp_contrib().to_csv( save_dir + "/" + capture_date + "_get_gdp_contrib.csv", header=True, sep=",", index=False, ) ts.get_gdp_for().to_csv( save_dir + "/" + capture_date + "_get_gdp_for.csv", header=True, sep=",", index=False, ) ts.get_gdp_pull().to_csv( save_dir + "/" + capture_date + "_get_gdp_pull.csv", header=True, sep=",", index=False, ) ts.get_gdp_quarter().to_csv( save_dir + "/" + capture_date + "_get_gdp_quarter.csv", header=True, sep=",", index=False, ) print("get_gdp_ data capture completed!") # ts.get_gdp_year().to_csv(save_dir+'/'+capture_date+'_get_gdp_year.csv',header=True,sep=',',index=False) ts.get_gem_classified().to_csv( save_dir + "/" + capture_date + "_get_gem_classified.csv", header=True, sep=",", index=False, ) ts.get_gold_and_foreign_reserves().to_csv( save_dir + "/" + capture_date + "_get_gold_and_foreign_reserves.csv", header=True, sep=",", index=False, ) ts.get_growth_data(2018, 3).to_csv( save_dir + "/" + capture_date + "_get_growth_data.csv", header=True, sep=",", index=False, ) ts.get_industry_classified().to_csv( save_dir + "/" + capture_date + "_get_industry_classified.csv", header=True, sep=",", index=False, ) ts.get_hs300s().to_csv( save_dir + "/" + capture_date + "_get_hs300s.csv", header=True, sep=",", index=False, ) # ============================================================================= # ts.get_sz50s().to_csv( # save_dir + "/" + capture_date + "_get_sz50s.csv", # header=True, # sep=",", # index=False, # ) # ============================================================================= ts.get_zz500s().to_csv( save_dir + "/" + capture_date + "_get_zz500s.csv", header=True, sep=",", index=False, ) ts.get_operation_data(2018, 3).to_csv( save_dir + "/" + capture_date + "_get_operation_data.csv", header=True, sep=",", index=False, ) ts.get_stock_basics().to_csv( save_dir + "/" + capture_date + "_get_stock_basics.csv", header=True, sep=",", index=False, ) ts.get_report_data(2018, 3).to_csv( save_dir + "/" + capture_date + "_get_report_data.csv", header=True, sep=",", index=False, ) ts.inst_detail().to_csv( save_dir + "/" + capture_date + "_inst_detail.csv", header=True, sep=",", index=False, ) ts.inst_tops().to_csv( save_dir + "/" + capture_date + "_inst_tops.csv", header=True, sep=",", index=False, ) print("inst_tops data capture completed!") # ============================================================================= # ts.new_stocks().to_csv( # save_dir + "/" + capture_date + "_new_stocks.csv", # header=True, # sep=",", # index=False, # ) # print("new_stocks data capture completed!") # ============================================================================= ts.top_list().to_csv( save_dir + "/" + capture_date + "_top_list.csv", header=True, sep=",", index=False, ) print("top_list data capture completed!") ts.get_k_data('sh', start='1990-01-01').to_csv( save_dir + "/" + capture_date + "_get_k_data.csv", header=True, sep=",", index=False, ) print("get_k_data capture completed!")
from sqlalchemy import create_engine import tushare as ts stock_basics = ts.get_stock_basics() #所有股票列表 stock_basic industry = ts.get_industry_classified() # 行业分类 industry concept = ts.get_concept_classified() # 概念分类 concept area = ts.get_area_classified() # 地域分类 area #sme = ts.get_sme_classified() # 中小板 sme #gem = ts.get_gem_classified() # 创业板 gem #st = ts.get_st_classified() # ST风险警示板 st hs300s = ts.get_hs300s() # 沪深300 hs300s sz50s = ts.get_sz50s() # 上证50 sz50s zz500s = ts.get_zz500s() # 中证500 zz500s terminated = ts.get_terminated() # 终止上市 terminated suspended = ts.get_suspended() # 暂停上市 suspended engine = create_engine('mysql://*****:*****@10.20.116.107/CN_BASSOON?charset=utf8') #sme.to_sql('sme', engine, if_exists='append') #gem.to_sql('gem', engine, if_exists='append') #st.to_sql('st', engine, if_exists='append') hs300s.to_sql('hs300s', engine, if_exists='append') sz50s.to_sql('sz50s', engine, if_exists='append') zz500s.to_sql('zz500s', engine, if_exists='append') terminated.to_sql('terminated', engine, if_exists='append') suspended.to_sql('suspended', engine, if_exists='append') stock_basics.to_sql('stock_basics', engine, if_exists='append') industry.to_sql('industry', engine, if_exists='append') concept.to_sql('concept', engine, if_exists='append') area.to_sql('area', engine, if_exists='append')
def get_zz500s_info(file_path): zz500s_info = ts.get_zz500s() zz500s_info.to_csv(file_path, encoding='utf-8') print '\ndownload zz500s info finished\n'
import tushare as ts import storage as storage storage.save_sql(ts.get_industry_classified(), "basics/industry_classified") storage.save_sql(ts.get_concept_classified(), "basics/concept_classified") storage.save_sql(ts.get_area_classified(), "basics/area_classified") storage.save_sql(ts.get_st_classified(), "basics/st_classified") storage.save_sql(ts.get_hs300s(), "basics/hs300s") storage.save_sql(ts.get_sz50s(), "basics/sz50s") storage.save_sql(ts.get_zz500s(), "basics/zz500s") storage.save_sql(ts.get_terminated(), "basics/terminated") storage.save_sql(ts.get_suspended(), "basics/suspended") storage.save_sql(ts.get_sme_classified(), "basics/sme_classified") storage.save_sql(ts.get_gem_classified(), "basics/gem_classified")
@author: Administrator ''' import tushare as ts # 行业分类 ts.get_industry_classified() # 概念分类 ts.get_concept_classified() # 地域分类 ts.get_area_classified() # 获取沪深300当前成份股及所占权重 ts.get_hs300s() # 获取中小板股票数据,即查找所有002开头的股票 ts.get_sme_classified() # 获取创业板股票数据,即查找所有300开头的股票 ts.get_gem_classified() # 获取风险警示板股票数据,即查找所有st股票 ts.get_st_classified() # 获取上证50成份股 ts.get_sz50s() # 获取中证500成份股 ts.get_zz500s()
def syncZZ500S(): zz500s_df = ts.get_zz500s() zz500s_df.to_csv(config.ZZ500_CodePath, encoding="utf-8") saveDataFileByCode(zz500s_df) print("sync and save ZZ500 done!")
def load_company_industry_info(): #下载加载行业分类数据 try: rs=ts.get_industry_classified() sql.write_frame(rs, "company_industry_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("下载公司行业分类信息ok") except: print("下载公司行业分类信息出错") #下载加载概念分类数据 try: rs=ts.get_concept_classified() sql.write_frame(rs, "company_concept_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("载公司概念分类信息ok") except: print("下载公司概念分类信息出错") #下载加载地域分类数据 try: rs=ts.get_area_classified() sql.write_frame(rs, "company_area_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("下载公司区域分类信息ok") except: print("下载公司区域分类信息出错") #下载加载中小板分类数据 try: rs=ts.get_sme_classified() sql.write_frame(rs, "company_sme_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("下载中小板分类数据ok") except: print("下载中小板分类数据出错") #下载加载创业板分类数据 try: rs=ts.get_gem_classified() sql.write_frame(rs, "company_gem_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("下载创业板分类数据ok") except: print("下载创业板分类数据出错") #下载加载st板分类数据 try: rs=ts.get_st_classified() sql.write_frame(rs, "company_st_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("下载st板分类数据ok") except: print("下载st板分类数据出错") #下载加载沪深300板分类数据 try: rs=ts.get_hs300s() sql.write_frame(rs, "company_hs300_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("下载加载沪深300板分类数据ok") except: print("下载加载沪深300板分类数据出错") #下载加载上证50板分类数据 try: rs=ts.get_sz50s() sql.write_frame(rs, "company_sz50_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("下载加载上证50板分类数据ok") except: print("下载加载上证50板分类数据出错") #下载加载中证500板分类数据 try: rs=ts.get_zz500s() sql.write_frame(rs, "company_zz500_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("下载加载中证500板分类数据ok") except: print("下载加载中证500板分类数据出错") #下载加载终止上市分类数据 try: rs=ts.get_terminated() sql.write_frame(rs, "company_terminated_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("下载加载终止上市分类数据ok") except: print("下载加载终止上市分类数据出错") #下载加载暂停上市分类数据 try: rs=ts.get_suspended() sql.write_frame(rs, "company_suspended_classified", con=conn_company_classified , flavor='mysql', if_exists='replace',index=True) print("下载加载暂停上市分类数据ok") except: print("下载加载暂停上市分类数据出错")
cur.execute('show tables') # 罗列所有当前库里面的所有表格 tables = cur.fetchall() selectab = re.compile(r'\w*\w*') tabnames = selectab.findall(str(tables)) res = tab_name in tabnames return res stk_concept_class = ts.get_concept_classified() stk_area_class = ts.get_area_classified() stk_sme_class = ts.get_sme_classified() stk_gem_class = ts.get_gem_classified() stk_st_class = ts.get_st_classified() stk_hs300_class = ts.get_hs300s() stk_sz50_class = ts.get_sz50s() stk_zz500_class = ts.get_zz500s() stk_terminated_class = ts.get_terminated() stk_sus_class = ts.get_suspended() while True: #hostname = input('Please enter the hostname: ') pw = input('Please enter the password: '******'Please enter the number of datebase: ') try: conn = mysql.connector.connect(host='10.23.0.2', port=3306, user='******', password=pw, database=dbname) cur = conn.cursor() break
# 参见 https://github.com/sherlockhoatszx/Stock_Pickup_and_Reminding/issues/7 #filter_funcs = [stock_filter, ver_hammer,feature3]''' filter_funcs = [feature3] def spr(filter_func, begin): """ Main interface :param filter_func: 股票筛选函数,返回 True or False :param begin: beginning date :return: a filtered stock list """ global count # get full stock list # print 'Getting stock list ...', stock_list = ts.get_zz500s().code # print 'Done: %s stocks' % len(stock_list) # filtering process count = 0 print "筛选方式 %s" % filter_func.__name__ return filter(lambda x: filter_func(x, begin), stock_list) if __name__ == '__main__': today = date.today().strftime('%Y-%m-%d').encode() trx_date = ts.get_hist_data('sh').index if today in trx_date: # four days included today _begin = trx_date[3].encode() else:
def stock_list_update(self,type='all'): ''' 股票基本面板更新 :param type: :return: ''' type_list =['all', 'industry', 'concept', 'area', 'sme', 'gem', 'st', 'hs300s', 'ss50s', 'zz500s', 'terminated', 'suspended'] #输入类型检查 if not isinstance(type,str): raise TypeError,'stock_type must be string' elif isinstance(type,str) and type not in type_list: raise ValueError,'%s is not a valid type' % (type) #更新数据 if type == 'all': temp = ts.get_stock_basics() path = os.path.join(StockDataControler().stock_basis_init(), 'global.csv') temp.to_csv(path) return temp if type == 'industry': temp = ts.get_industry_classified() #temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'industry.csv') temp.to_csv(path) if type == 'concept': temp = ts.get_concept_classified() #temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'concept.csv') temp.to_csv(path) if type == 'area': temp = ts.get_area_classified() #temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'area.csv') temp.to_csv(path) if type == 'sme': temp = ts.get_sme_classified() #temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'sme.csv') temp.to_csv(path) if type == 'gem': temp = ts.get_gem_classified() #temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'gem.csv') temp.to_csv(path) if type == 'st': temp = ts.get_st_classified() # temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'st.csv') temp.to_csv(path) if type == 'hs300s': temp = ts.get_hs300s() temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'hs300s.csv') temp.to_csv(path) if type == 'sz50s': temp = ts.get_sz50s() temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'sz50s.csv') temp.to_csv(path) if type == 'zz500s': temp = ts.get_zz500s() temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'zz500s.csv') temp.to_csv(path) if type == 'terminated': temp = ts.get_terminated() temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'terminated.csv') temp.to_csv(path) if type == 'suspended': temp = ts.get_suspended() temp['name'] = temp['name'].map(lambda x: x.encode('utf-8')) path = os.path.join(StockDataControler().stock_basis_init(), 'suspended.csv') temp.to_csv(path)
this file help to fill the database table, such as Classified hs300 sz50 zz500 """ import sys sys.path.append('../publicstuff') import tushare as ts import pandas as pd import config from mongoModel import * industry = ts.get_industry_classified() concept = ts.get_concept_classified() area = ts.get_area_classified() hs300 = ts.get_hs300s() sz50 = ts.get_sz50s() zz500 = ts.get_zz500s() res = pd.merge(area, industry, on=['code', 'name']) res = pd.merge(res, concept, on=['code', 'name']) # print(res) # exit() for stock in config.stolist: current = res[res.code == stock] print(current) name = config.StocksList[stock] area_ = list(set(list(current.area))) if len(area_) > 0: area_ = area_[0] else: area_ = 'None'
def zz500db(): zz500 = ts.get_zz500s() print(zz500, sep=' ', end='\n', file=sys.stdout, flush=False) zz500.to_sql('zz500_data', ENGINE)