def update_ipodate(): data_list = [] lg = bs.login() shobj = AStocksHeader.objects.all() for obj in shobj: rs = bs.query_stock_basic(code_name=obj.stock_name) while (rs.error_code == '0') & rs.next(): data_list.append(rs.get_row_data()) for index, item in enumerate(data_list): sb = AStocksHeader.objects.filter(stock_name=item[1]).first() if sb: print(index, item[1]) sb.ipodate = item[2] if item[3] != '': sb.outdate = item[3] sb.isdelisted = True sb.save() print('update finished...') bs.logout()
def bs_k_data_stock(code_val='sz.000651', start_val='2009-01-01', end_val='2019-06-01', freq_val='d', adjust_val='3'): # 登陆系统 lg = bs.login() # 获取历史行情数据 fields= "date,open,high,low,close,volume,turn,peTTM,pbMRQ" df_bs = bs.query_history_k_data_plus(code_val, fields, start_date=start_val, end_date=end_val, frequency=freq_val, adjustflag=adjust_val) # <class 'baostock.data.resultset.ResultData'> # frequency="d"取日k线,adjustflag="3"默认不复权,1:后复权;2:前复权 data_list = [] while (df_bs.error_code == '0') & df_bs.next(): # 获取一条记录,将记录合并在一起 data_list.append(df_bs.get_row_data()) result = pd.DataFrame(data_list, columns=df_bs.fields) for i, v in result.turn.items(): if v.find('.') == -1: result.iloc[i, result.columns.get_loc('turn')] = np.nan result = result.astype({'turn': 'float64', 'pbMRQ': 'float64', 'peTTM': 'float64','volume':'uint64', 'close': 'float64', 'open': 'float64', 'low': 'float64', 'high': 'float64'}) result.volume = result.volume / 100 # 单位转换:股-手 result.volume = result.volume.astype('uint64') result.date = pd.DatetimeIndex(result.date) result.set_index("date", drop=True, inplace=True) result.index = result.index.set_names('Date') result['OpenInterest'] = 0 result.turn.fillna(method='ffill', inplace=True) recon_data = {'high': result.high, 'low': result.low, 'open': result.open, 'close': result.close,\ 'volume': result.volume, 'turn': result.turn, 'peTTM': result.peTTM, 'pbMRQ': result.pbMRQ} df_recon = pd.DataFrame(recon_data) # 登出系统 bs.logout() return df_recon
def get_trade_dates(start_date, end_date): lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) #### 获取交易日信息 #### rs = bs.query_trade_dates(start_date, end_date) print('query_trade_dates respond error_code:' + rs.error_code) print('query_trade_dates respond error_msg:' + rs.error_msg) #### 打印结果集 #### data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) bs.logout() return result
def inportIndustryData(name='tb_today_industry', code=None, date=None): configger.init() # 显示登陆返回信息 # 结果集输出到csv文件 con = configger.engine try: sql = configger.lastOperateTimeSql.format(name) lastTime = pd.read_sql(sql=sql, con=con).iloc[0, 0] print(lastTime) except: print('没有操作数据') if (lastTime == None): lastTime = pd.to_datetime('1990-1-1 00:00:00') if (needUpdate(lastTime, datetime.now(), True) == True): lg = bs.login() # 获取行业分类数据 rs = bs.query_stock_industry() # rs = bs.query_stock_basic(code_name="浦发银行") # 打印结果集 industry_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 industry_list.append(rs.get_row_data()) result = pd.DataFrame(industry_list, columns=rs.fields) result['date'] = datetime.now().date() result.to_sql(name=name, con=con, if_exists='append', index=False) bs.logout() operation = pd.DataFrame() operation.loc[0, 'name'] = name operation.loc[0, 'updateTime'] = datetime.now().date() operation.to_sql(name='tb_operation_time', con=con, if_exists='append', index=False) print('industry_data_import_ok') else: print('无需插入')
def compute_avg_earning(): lg = bs.login() rs = bs.query_hs300_stocks() result = pd.DataFrame() while(rs.error_code == '0') & rs.next(): row = rs.get_row_data() code = row[1] df = get_closeprice(code) df['code_name'] = row[2] if result.empty: result = df else: result = result.append(df) # zz = bs.query_zz500_stocks() # while(zz.error_code == '0') & zz.next(): # row = zz.get_row_data() # code = row[1] # df = get_closeprice(code) # df['code_name'] = row[2] # result = result.append(df) result = result[result['netProfit_x'] != ''] result['netProfit_x'] = result['netProfit_x'].astype(float) result = result[result['netProfit_x'] > 0] result['netProfit_y'] = result['netProfit_y'].astype(float) result = result[result['netProfit_y'] > 0] result['avgEarningRate'] = (result['netProfit_y']/result['netProfit_x']).apply(lambda x: math.pow(x,1/5)-1) result = result[result['avgEarningRate'] > 0] result['roeAvg_y'] = result['roeAvg_y'].astype(float) result = result[result['roeAvg_y'] > 0.1] result['npMargin_y'] = result['npMargin_y'].astype(float) result = result[result['npMargin_y'] > 0.1] result['pe'] = result['pe'].astype(float) result = result[result['pe'] > 0] result = result[result['pe'] < 50] result['peg'] = result['pe'] / result['avgEarningRate'] result = result.sort_values(by=['peg'], ascending=True) result.to_csv("avg_earning_rate.csv", encoding="utf-8", index=False) result[:10].plot.bar(title='peg', x='code_name', y='peg') plt.show() bs.logout()
def generate_stock_details(stock_price_df, quarter_date_list, saved=False): code_list = stock_price_df['code'].unique() result = pd.DataFrame() lg = bs.login() for i in range(len(quarter_date_list) - 1): print(quarter_date_list[i], end=',') left_date = datetime.datetime.strptime( quarter_date_list[i], "%Y-%m-%d") - datetime.timedelta(1) left_date_str = datetime.datetime(left_date.year, left_date.month, left_date.day, 0, 0).strftime("%Y-%m-%d") right_date_str = quarter_date_list[i + 1] profit_list = [] for code in code_list: rs_profit = bs.query_profit_data(code=code, year=left_date.year, quarter=left_date.month // 4 + 1) while (rs_profit.error_code == '0') & rs_profit.next(): temp = rs_profit.get_row_data() profit_list.append(temp) profit_df = pd.DataFrame(profit_list, columns=rs_profit.fields) result = pd.concat([ result, pd.merge( stock_price_df[(stock_price_df['date'] > left_date_str) & (stock_price_df['date'] < right_date_str)], profit_df[['code', 'totalShare']], on='code') ]) result[['totalShare']] = result[['totalShare']].astype('float') result['marketCapitalization'] = result['totalShare'] * result['ave_close'] bs.logout() if saved is True: result.to_csv("TMT_stock_details.csv", index=False, encoding='utf_8_sig') else: result.reset_index(drop=True) return result
def getdata(searchKey, startdate, enddate, frequency, adjustflag): #登录系统 lg = bs.login() #打印返回信息看登陆是否成功 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) #获取历史K线数据 #根据“历史行情指标参数”章节设置的指标参数,必填 if (frequency == 'w' or frequency == 'm'): queryString = "date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg" elif frequency == 'd': queryString = "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,peTTM,psTTM,pcfNcfTTM,pbMRQ,isST" else: queryString = "date,time,code,open,high,low,close,volume,amount,adjustflag" rs = bs.query_history_k_data_plus(searchKey, queryString, start_date=startdate, end_date=enddate, frequency=frequency, adjustflag=adjustflag) print('query_history_k_data_plus respond error_code:' + rs.error_code) print('query_history_k_data_plus respond error_msg:' + rs.error_msg) obj = {} if (rs.error_code != '0'): obj['error_code'] = rs.error_code obj['error_msg'] = rs.error_msg return obj #print(type(rs))#<class 'baostock.data.resultset.ResultData'> #打印结果集 data_list = [] while (rs.error_code == '0' and rs.next()): #获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) obj['error_code'] = '0' obj['data_list'] = data_list #登出系统 bs.logout() return obj
def get_all_stock_names(): # 登陆系统 #### lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code + ', error_msg:' + lg.error_msg) dt = stock_utils.get_recently_trade_date() dt = '2020-08-03' k_rs = bs.query_all_stock(day=dt) print(k_rs) data_list = [] while (k_rs.error_code == '0') & k_rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(k_rs.get_row_data()) result = pd.DataFrame(data_list, columns=k_rs.fields) print(result.tail()) result.to_csv(ConfigUtils.get_stock("STOCK_NAME"), index=False) print("init all stock names") bs.logout()
def computeVOL(code, startdate, enddate, period): # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 详细指标参数,参见“历史行情指标参数”章节 rs = bs.query_history_k_data_plus(code, "date,volume,amount", start_date=startdate, end_date=enddate, frequency="d") print('query_history_k_data_plus respond error_code:' + rs.error_code) print('query_history_k_data_plus respond error_msg:' + rs.error_msg) # 打印结果集 data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) result.index = result['date'] result = result[['volume']] result['volume'] = result['volume'].astype(float) # print(result) #print(result) loc_list = range(len(result))[::period] result = result.iloc[loc_list, :] result.plot(title=f'fb_vol_{period}day') result=result.volume.tolist() # if is_show: # plt.show() # 结果集输出到csv文件 # if is_refresh: # result.to_csv(os.path.join(root, 'fb_vol.csv'), encoding='gbk') # # 登出系统 bs.logout() #print(result.iloc[loc_list,:0]) #print(result) return result
def getNormalDataForBaoStock(start_date,end_date): #### 登陆系统 #### lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) #### 获取沪深A股历史K线数据 #### # 详细指标参数,参见“历史行情指标参数”章节;“分钟线”参数与“日线”参数不同。“分钟线”不包含指数。 # 分钟线指标:date,time,code,open,high,low,close,volume,amount,adjustflag # 周月线指标:date,code,open,high,low,close,volume,amount,adjustflag,turn,pctChg hs300_stocks = [] rs = bs.query_hs300_stocks() while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 hs300_stocks.append(rs.get_row_data()) for stock_info in hs300_stocks: code=stock_info[1] rs = bs.query_history_k_data_plus(code, "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST", start_date=start_date, end_date=end_date, frequency="d", adjustflag="1") print('query_history_k_data_plus respond error_code:' + rs.error_code) print('query_history_k_data_plus respond error_msg:' + rs.error_msg) #### 打印结果集 #### data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) #### 结果集输出到csv文件 #### file_directory=os.path.join(save_path,code) if not os.path.exists(file_directory): os.makedirs(file_directory) result.to_csv(os.path.join(save_path,code,"history_A_stock_k_data.csv"), index=False) print(result) #### 登出系统 #### bs.logout()
def query_profit(): # 接口提供的数据最早从2007年开始 lg = bs.login() shobjs = AStocksHeader.objects.all() count = 0 start = time() for obj in shobjs: profit_list = [] count += 1 print(count) for year in range(2007, 2020): for quarter in range(1, 5): if obj.stock_code.startswith('6'): rs_profit = bs.query_profit_data(code="sh.{}".format( obj.stock_code), year=year, quarter=quarter) else: rs_profit = bs.query_profit_data(code="sz.{}".format( obj.stock_code), year=year, quarter=quarter) while (rs_profit.error_code == '0') & rs_profit.next(): profit_list.append(rs_profit.get_row_data()) result_profit = pd.DataFrame(profit_list, columns=rs_profit.fields).values for item in result_profit: ap = AStocksProfit() ap.stock = obj ap.pub_date = item[1] ap.stat_date = item[2] ap.roe_avg = float(item[3]) if item[3] else 0.0 ap.np_margin = float(item[4]) if item[4] else 0.0 ap.gp_margin = float(item[5]) if item[5] else 0.0 ap.net_profit = float(item[6]) if item[6] else 0.0 ap.epsttm = float(item[7]) if item[7] else 0.0 ap.mb_revenue = float(item[8]) if item[8] else 0.0 ap.total_share = float(item[9]) if item[9] else 0.0 ap.liqa_share = float(item[10]) if item[10] else 0.0 ap.save() print('import finish, need time: ', time() - start) bs.logout()
def get_dailiy_info(cls, stock: str, start_date, end_date): """获取每日收盘数据""" # 登陆系统 lg = bs.login() # 显示登陆返回信息 logging.info('login respond error_msg:' + lg.error_msg) rs = bs.query_history_k_data_plus( stock, "date,code,open,high,low,close,preclose,volume,amount,adjustflag,turn,tradestatus,pctChg,isST", start_date=start_date, end_date='end_date', frequency="d", adjustflag="3") # 登出系统 bs.logout() return rs
def __init__(self, jb='d'): ''' 根据周期初始化 开始时间,结束时间,股票列表 ''' #### 登陆系统 #### lg = bs.login() # 显示登陆返回信息 if int(lg.error_code) == 0: self.status = '远程登录成功' else: self.status = '远程登录失败' print('baostock 远程登录失败:', lg.error_msg) return # df = stock_base.get_stock_code('sz') self.jb = jb date = stock_base.get_start_time(jb) self.begin = date[0] self.end = date[1] print('k线级别:', self.jb, '\t开始时间:', self.begin, '\t结束时间:', self.end)
def main(): #### 登陆系统 #### lg = bs.login() #### 分析数据 #### for att_stock in Bank: # 获取数据 daily_data = get_stock_daily(bs, att_stock, "high", "2020-01-01", "2020-08-29") #print(daily_data) point_value, break_succ = brust_point_monitor(daily_data) if break_succ: print(att_stock + " 画出颈线数据:" + str(point_value / 1000.0) + " , 并突破颈线成功!") else: print(att_stock + " 画出颈线数据:" + str(point_value / 1000.0) + " , 突破失败") #### 登出系统 #### bs.logout()
def download(stockCode, yearList: list, fileName): #### 登陆系统 #### lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 查询季频估值指标盈利能力 profit_list = [] for year in yearList: for quarter in [1, 2, 3, 4]: rs_profit = bs.query_profit_data(code=stockCode, year=year, quarter=quarter) while (rs_profit.error_code == '0') & rs_profit.next(): profit_list.append(rs_profit.get_row_data()) saveToCsv(profit_list, fileName) #### 登出系统 #### bs.logout()
def get_china_share(code,quota="date,open,high,low,close,preclose,volume,amount,turn,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM",start_date=19970101,end_date=20301231): try: login = baostock.login() if login.error_code != "0":raise Exception(login.error_msg) rs = baostock.query_history_k_data_plus( code,quota, start_date = datetime.datetime.strptime(str(start_date), '%Y%m%d').strftime("%Y-%m-%d"), end_date = datetime.datetime.strptime(str(end_date), '%Y%m%d').strftime("%Y-%m-%d"), frequency = "d", adjustflag = "2",#复权状态(1:后复权, 2:前复权,3:不复权) ) data_list = [] while (rs.error_code == '0') & rs.next(): data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) return result except Exception as e: print(str(e)) finally: baostock.logout()
def generate_stock_price(stock_basic_df, start_date_str, end_date_str, shift_size, columns_str="date,code,close,pbMRQ,isST0", saved=False): lg = bs.login() result = pd.DataFrame() for code in stock_basic_df['code']: #print(code,end = ',') rs = bs.query_history_k_data_plus(code, columns_str, start_date_str, end_date_str, frequency="d", adjustflag="3") temp = rs.get_data() for i in range(shift_size, len(temp), shift_size): temp.loc[[i - 1], 'ave_close'] = temp['close'][i - shift_size:i].astype( 'float').mean() temp.loc[[i - 1], 'ave_pbMRQ'] = temp['pbMRQ'][i - shift_size:i].astype( 'float').mean() temp.dropna(inplace=True) result = pd.concat([result, temp], ignore_index=True) bs.logout() result = pd.merge(result, stock_basic_df[['code', 'code_name']], on='code') if saved is True: result.to_csv("TMT_stock_price.csv", index=False, encoding='utf_8_sig') else: result.reset_index(drop=True) return result
def save_stock_k_data_from_baostock(startdate, enddate, code, datafilename, market='sh'): lg = bs.login() if lg.error_code != '0': # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) exit('登陆baostock失败') #### 获取历史K线数据 #### # 详细指标参数,参见“历史行情指标参数”章节 # frequency="d"取日k线,adjustflag="3"默认不复权 rs = bs.query_history_k_data_plus( market + '.' + code, "date,code,open,high,low,close,preclose,volume,amount,pbMRQ", start_date=startdate.strftime('%Y-%m-%d'), end_date=enddate.strftime('%Y-%m-%d'), frequency="d", adjustflag="2") if rs.error_code != '0': print('query_history_k_data_plus respond error_code:' + rs.error_code) print('query_history_k_data_plus respond error_msg:' + rs.error_msg) exit('从获取K线数据失败') #### 打印结果集 #### data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) #### 登出系统 #### bs.logout() #### 结果集输出到csv文件 #### result = pd.DataFrame(data_list, columns=rs.fields) result.to_csv(datafilename, encoding="gbk", index=False)
def get_name(): ###登录系统### lg = bs.login() #显示登录返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) ### 获取证券信息 ### nowdate = datetime.datetime.now() delta = datetime.timedelta(days=-2) today = nowdate + delta today = today.strftime('%Y-%m-%d') rs = bs.query_all_stock(day = today) print('query_all_stock respond error_code:' + rs.error_code) print('query_all_stock respond error_msg:' + rs.error_msg) ### 打印结果集 ### data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) ### 结果集输出到csv文件 ### #result.to_csv("E:\\all_stock.csv", encoding="gbk", index=False) ### 登出系统 ### bs.logout() conn = pymysql.connect("localhost", "root", "zjxtest", "stock", use_unicode=True, charset="utf8") cursorl = conn.cursor() ls = [] for i in range(len(result['code'])): ls.append([result['code'][i].split('.')[1], result['tradeStatus'][i], result['code_name'][i]]) #print(len(ls)) for i in range(len(ls)): #sql = 'insert into stock_code_data values(%s,%s,%s,%s)' commit_data = [ls[i][0], ls[i][1].encode('utf8'), ls[i][2].encode('utf8'), today] #print(commit_data) cursorl.execute('insert into stock_code_data values(%s,%s,%s,%s)',commit_data) #cursorl.execute(sql, commit_data) conn.commit() conn.close() return ls
def init_data(code_name): stock = code_name[0] name = code_name[1] file_name = stock + '_' + name + '.csv' # data = ts.pro_bar(ts_code=stock, adj='qfq', api=ts.pro_api(token=settings.TOKEN, timeout=30)) # data = ts.get_k_data(stock, autype='qfq') # 登陆系统 #### lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code + ' , error_msg:' + lg.error_msg) # 获取历史K线数据 #### # frequency="d"取日k线,adjustflag="3"默认不复权 rs = bs.query_history_k_data_plus(stock, fields=settings.STOCK_FIELDS, start_date=settings.START_DATE, end_date=settings.END_DATE, frequency="d", adjustflag="3") print('query_history_k_data_plus respond error_code:' + rs.error_code + ' , error_msg:' + rs.error_msg + ' , code:' + stock + "/" + name) # 打印结果集 #### data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) if data_list: result = pd.DataFrame(data_list, columns=rs.fields) result['p_change'] = tl.ROC(result['close'], 1) result.to_csv(settings.DATA_DIR + "/" + file_name, encoding="utf-8", index=False, header=True) # print(result.head(3)) else: logging.debug("股票:" + stock + " 没有数据,略过...") # 登出系统 #### bs.logout()
def computeMA(self, code, startdate, enddate, is_show, is_refresh, period): name_ = ['MA8', 'MA13', 'MA21', 'MA34', 'MA55'] fb_list = [8, 13, 21, 34, 55] # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 详细指标参数,参见“历史行情指标参数”章节 rs = bs.query_history_k_data_plus(code, "date,close,volume,amount", start_date=startdate, end_date=enddate, frequency="d") print('query_history_k_data_plus respond error_code:' + rs.error_code) print('query_history_k_data_plus respond error_msg:' + rs.error_msg) # 打印结果集 data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) # 结果集输出到csv文件 result.to_csv(r"/Users/zou/PycharmProjects/weiyl_919/history_Index_k_data.csv", index=False) close = [float(x) for x in result['close']] for item in zip(name_, fb_list): result[item[0]] = ta.MA(np.array(close), timeperiod=item[1]) result.index = result['date'] result = result[name_] loc_list = range(len(result))[::period] result = result.iloc[loc_list, :] # print(result) result.plot(title=f'fb_ma_{period}day') if is_show: plt.show() if is_refresh: result.to_csv(os.path.join(root, 'fb_ma.csv'), encoding='gbk') # 登出系统 bs.logout() return result
def get_month_k_data(stock_code, start_date, end_date): csv_file_name = "m.{stock_code}-{start_date}-{end_date}.csv" result = None try: result = pd.read_csv(csv_file_name.format_map(vars()), parse_dates=[1]) except Exception as e: print(e) if result is None: #### 登陆系统 #### lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) rs = bs.query_history_k_data_plus(stock_code, "date,open,high,low,close,volume,amount", start_date=start_date, end_date=end_date, frequency="m", adjustflag="2") result = rs2result(rs) result.to_csv(csv_file_name.format_map(vars()), index=False) #### 登出系统 #### bs.logout() return result
def get_growth_data_year(stock_number,stock_name,start_year,end_year): print('==========================================================') print("开始进行: "+stock_name+"("+stock_number+")"+"的数据处理") print("尝试登陆baostock") data_list=[] lg=bs.login(user_id="anonymous",password="******") if(lg.error_code == '0'): print("登陆成功") else: print("登录失败") for y in range(int(start_year),int(end_year)+1): for q in range(1,5): #####get stock data##### rs=bs.query_growth_data(code=stock_number,year=y,quarter=q) while(rs.error_code=='0')&rs.next(): data_list.append(rs.get_row_data()) result=pd.DataFrame(data_list,columns=rs.fields) bs.logout() print(stock_name+"("+stock_number+")"+"的数据处理完成") print('==========================================================') return result
def get_stock_basic_message(stock_code): # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 获取证券基本资料 rs = bs.query_stock_basic(code=stock_code) # rs = bs.query_stock_basic(code_name="浦发银行") # 支持模糊查询 print('query_stock_basic respond error_code:' + rs.error_code) print('query_stock_basic respond error_msg:' + rs.error_msg) # 打印结果集 data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) bs.logout() return result
def download(stockCode, yearList: list, fileName): #### 登陆系统 #### lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 查询季频估值指标盈利能力 operation_list = [] for year in yearList: for quarter in [1, 2, 3, 4]: rs_operation = bs.query_operation_data(code=stockCode, year=year, quarter=quarter) # rs_operation = bs.query_operation_data(code="sh.600000", year=2017, quarter=2) while (rs_operation.error_code == '0') & rs_operation.next(): operation_list.append(rs_operation.get_row_data()) saveToCsv(operation_list, fileName) #### 登出系统 #### bs.logout()
def query_growth(): # 接口提供的数据最早从2007年开始 lg = bs.login() shobjs = AStocksHeader.objects.all() count = 0 start = time() for obj in shobjs: growth_list = [] count += 1 print(count) for year in range(2007, 2020): for quarter in range(1, 5): if obj.stock_code.startswith('6'): rs_profit = bs.query_growth_data(code="sh.{}".format( obj.stock_code), year=year, quarter=quarter) else: rs_profit = bs.query_growth_data(code="sz.{}".format( obj.stock_code), year=year, quarter=quarter) while (rs_profit.error_code == '0') & rs_profit.next(): growth_list.append(rs_profit.get_row_data()) result_profit = pd.DataFrame(growth_list, columns=rs_profit.fields).values for item in result_profit: if any([item[3], item[4], item[5], item[6], item[7]]): ag = AStocksGrowth() ag.stock = obj ag.pub_date = item[1] ag.stat_date = item[2] ag.yoy_equity = float(item[3]) if item[3] else 0.0 ag.yoy_asset = float(item[4]) if item[4] else 0.0 ag.yoy_ni = float(item[5]) if item[5] else 0.0 ag.yoy_eps_basic = float(item[6]) if item[6] else 0.0 ag.yoy_pni = float(item[7]) if item[7] else 0.0 ag.save() print('import finish, need time: ', time() - start) bs.logout()
def get_hs300_stocks(): """ 获取沪深300成分股 """ # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 获取沪深300成分股 rs = bs.query_hs300_stocks() print('query_hs300 error_code:' + rs.error_code) print('query_hs300 error_msg:' + rs.error_msg) # 打印结果集 hs300_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 hs300_stocks.append(rs.get_row_data()) result = pd.DataFrame(hs300_stocks, columns=rs.fields) # # 结果集输出到csv文件 # result.to_csv("hs300_stocks.csv", encoding="utf-8", index=False) dtype = { 'updateDate': String(10), 'code': String(9), 'code_name': String(10) } result.to_sql('odl_bs_hs300_stocks', engine, schema=CQ_Config.DB_SCHEMA, if_exists='replace', index=False, dtype=dtype) # 登出系统 bs.logout()
def get_shibor_data(startDate,endDate): """获取历史shibor数据""" # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) # 获取银行间同业拆放利率 rs = bs.query_shibor_data(start_date=startDate, end_date=endDate) print('query_shibor_data respond error_code:'+rs.error_code) print('query_shibor_data respond error_msg:'+rs.error_msg) # 打印结果集 data_list = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) print('shiborON_list:', data_list) # 登出系统 bs.logout() return result
def future_calendar_collector(qlib_dir: [str, Path], freq: str = "day"): """get future calendar Parameters ---------- qlib_dir: str or Path qlib data directory freq: str value from ["day", "1min"], by default day """ qlib_dir = Path(qlib_dir).expanduser().resolve() if not qlib_dir.exists(): raise FileNotFoundError(str(qlib_dir)) lg = bs.login() if lg.error_code != "0": logger.error(f"login error: {lg.error_msg}") return # read daily calendar daily_calendar = read_calendar_from_qlib(qlib_dir) end_year = pd.Timestamp.now().year if daily_calendar.empty: start_year = pd.Timestamp.now().year else: start_year = pd.Timestamp(daily_calendar.iloc[-1, 0]).year rs = bs.query_trade_dates(start_date=pd.Timestamp(f"{start_year}-01-01"), end_date=f"{end_year}-12-31") data_list = [] while (rs.error_code == "0") & rs.next(): _row_data = rs.get_row_data() if int(_row_data[1]) == 1: data_list.append(_row_data[0]) data_list = sorted(data_list) date_list = generate_qlib_calendar(data_list, freq=freq) date_list = sorted( set(daily_calendar.loc[:, 0].values.tolist() + date_list)) write_calendar_to_qlib(qlib_dir, date_list, freq=freq) bs.logout() logger.info( f"get trading dates success: {start_year}-01-01 to {end_year}-12-31")
def Lilv(): # 登陆系统 lg = bs.login() # 获取贷款利率 rs6 = bs.query_loan_rate_data(start_date="2010-01-01", end_date="2020-12-31") # 打印结果集 data_list = [] while (rs6.error_code == '0') & rs6.next(): # 获取一条记录,将记录合并在一起 data_list.append(rs6.get_row_data()) result2 = pd.DataFrame(data_list, columns=rs6.fields) # 登出系统 bs.logout() lilv = { 'loanRate6Month': [], 'loanRate6MonthTo1Year': [], 'loanRate1YearTo3Year': [], 'loanRate3YearTo5Year': [], 'loanRateAbove5Year': [] } lilv['loanRate6Month'] = np.array(result2['loanRate6Month']).tolist() lilv['loanRate6MonthTo1Year'] = np.array( result2['loanRate6MonthTo1Year']).tolist() lilv['loanRate1YearTo3Year'] = np.array( result2['loanRate1YearTo3Year']).tolist() lilv['loanRate3YearTo5Year'] = np.array( result2['loanRate3YearTo5Year']).tolist() lilv['loanRateAbove5Year'] = np.array( result2['loanRateAbove5Year']).tolist() lilv['loanRate6Month'] = list(map(eval, lilv['loanRate6Month'])) lilv['loanRate6MonthTo1Year'] = list( map(eval, lilv['loanRate6MonthTo1Year'])) lilv['loanRate1YearTo3Year'] = list(map(eval, lilv['loanRate1YearTo3Year'])) lilv['loanRate3YearTo5Year'] = list(map(eval, lilv['loanRate3YearTo5Year'])) lilv['loanRateAbove5Year'] = list(map(eval, lilv['loanRateAbove5Year'])) return json.dumps(lilv, ensure_ascii=False)