def query_sz50_stocks(): rs = bs.query_sz50_stocks() while Stock.retried_num < Stock.RETRY_MAX_NUM and rs.error_code != '0': sleep(Stock.RETRY_DELAY_S) rs = bs.query_sz50_stocks() Stock.retried_num += 1 if '0' == rs.error_code: Stock.retried_num = 0 return Stock.rs_to_list(rs)
def query_sz50_stocks(): rs = bs.query_sz50_stocks() while BaoStock.retried_num < BaoStock.RETRY_MAX_NUM and rs.error_code != '0': sleep(BaoStock.RETRY_DELAY_S) rs = bs.query_sz50_stocks() BaoStock.retried_num += 1 assert('0' == rs.error_code) BaoStock.retried_num = 0 return BaoStock.rs_to_list(rs)
def getStockList(type: str = "default", date: str = ""): result = [] data: DataFrame if type == "sz50": data = BaoStock.query_sz50_stocks(date).get_data() elif type == "hs300": data = BaoStock.query_hs300_stocks(date).get_data() elif type == "zz500": data = BaoStock.query_zz500_stocks(date).get_data() elif type == "default": path = Path(__file__).parent.absolute()/"list.json" file = open(str(path), "r", encoding="utf8") return Json.loads(file.read()) else: data = BaoStock.query_stock_basic().get_data() keys = data.keys() data = [x[1] for x in BaoStock.query_stock_basic().get_data().iterrows()] if type == "index": data = [x for x in data if x["type"] == "2"] elif type == "stock": data = [x for x in data if x["type"] == "1"] for row in data: result.append({getStockListMap[key][0]: row[key] for key in keys if key in getStockListMap}) return result for row in data.iterrows(): result.append({getStockListMap[key][0]: row[1][key] for key in data.keys() if key in getStockListMap}) return result
def query_sz50_stocks(self): # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 获取上证50成分股 rs = bs.query_sz50_stocks() print('query_sz50 error_code:' + rs.error_code) print('query_sz50 error_msg:' + rs.error_msg) # 打印结果集 sz50_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields) # 结果集输出到csv文件 result.to_csv(self.path + "sz50_stocks.csv", encoding="gbk", index=False) #print(result) # 登出系统 bs.logout() return result
def get_sz50_stocks(): """ 获取上证50成分股数据 """ #删除数据 BS_SZ50_Stocks.del_all_data() # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 获取上证50成分股 rs = bs.query_sz50_stocks() print('query_sz50 error_code:' + rs.error_code) print('query_sz50 error_msg:' + rs.error_msg) # 打印结果集 sz50_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields) result.to_sql('odl_bs_sz50_stocks', engine, schema=CQ_Config.DB_SCHEMA, if_exists='append', index=False) # 登出系统 bs.logout()
def get_code_list(): lg = bs.login() # 获取上证50成分股 rs = bs.query_sz50_stocks() # 打印结果集 sz50_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields) # 结果集输出到csv文件 result.to_csv("D:/sz50_stocks.csv", encoding="GB2312", index=False) code=result['code'] name=result['code_name'] #print(code) code_list=[] for i in code: code_list.append(i.split('sh.')[1]) #print(code_list) name_list=[] for i in name: name_list.append(i) bs.logout() return dict(zip(code_list,name_list))
def querySZ50Stocks(date=''): rs = bs.query_sz50_stocks(date) # 打印结果集 sz50_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields)
def get_sz50_stocks(): rs = BS.query_sz50_stocks() sz50_stocks = [] while (rs.error_code == '0') & rs.next(): sz50_stocks.append(rs.get_row_data()) result = PD.DataFrame(sz50_stocks, columns=rs.fields) print(result) return result
def get_sz50_stocks_code(date=None): # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) rs = bs.query_sz50_stocks(date) df = rs.get_data() bs.logout() return df[['code', 'code_name']].to_dict('record')
def get_constituent_stock(i): basepath = os.path.dirname(__file__) basicpath = 'static/morestock/' + i + '-stock' show_time = today_time() param = request.form show_code = "" if param and (param['code'] or param['code'] == ""): code = param['code'] show_code = stock_com(code) if show_code == "": # baostock相关设置 lg = bs.login() if i == "hs300": rs = bs.query_hs300_stocks() elif i == "sz": rs = bs.query_sz50_stocks() elif i == "zz": rs = bs.query_zz500_stocks() result = res_data(rs) # 创建个股文件夹 create_file(basicpath) # 存储csv、excel、josn文件 parsed = save_all(basicpath, i, show_time, result, 'data') # 从json获取数据(all) all_len = len(parsed) type_name = i + "Stock" show_obj = {"data": parsed, "total": all_len, "type": type_name} # baostock登出 bs.logout() return show_obj else: jsonpath = basicpath + '/json/' + i + '_' + show_time + '.json' joson_file = os.path.join(basepath, jsonpath) jsonFlag = "0" search_arr = [] with open(joson_file, 'r+', encoding="utf-8") as load_f: load_file = load_f.read() home_file = json.loads(load_file, strict=False) if show_code == "-1": search_arr = home_file['data'] elif show_code == "-2": search_arr = [] else: for item in home_file['data']: if item['code'] == show_code or item[ 'code_name'] == show_code: jsonFlag = "1" search_arr.append(item) all_len = len(search_arr) type_name = i + "Stock" show_obj = {"data": search_arr, "total": all_len, "type": type_name} return show_obj
def get_50_codes(self, date='2017-01-01'): # 获取上证50成分股 rs = bs.query_sz50_stocks(date) print('query_sz50 error_code:' + rs.error_code) print('query_sz50 error_msg:' + rs.error_msg) # 打印结果集 sz50_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields) return result
def query_sz50_stocks(self,date = None): ''' date:查询日期,格式XXXX-XX-XX,为空时默认最新日期。 ''' rs = bs.query_sz50_stocks(date = date) self.log('query_sz50 error_msg:', rs) # 打印结果集 sz50_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields) return result
def main(): # 沪深300 rs = bs.query_hs300_stocks() # 获取上证50成分股 rs1 = bs.query_sz50_stocks() # 获取中证500成分股 rs2 = bs.query_zz500_stocks() while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 re = Combine(rs.get_row_data()[1]) if re: datalist.append(re) result = pd.DataFrame(datalist) result.to_csv("/tmp/a.csv", index=False)
def bs_save_sz50_stocks(): ''' 获取上证50成分股信息 :return: ''' bs.login() rs = bs.query_sz50_stocks() data_list = [] while (rs.error_code == '0') & rs.next(): data_list.append(rs.get_row_data()) result = pd.DataFrame(data_list, columns=rs.fields) engine = create_engine( 'mysql+pymysql://root:root@localhost:3306/stock_quant?charset=utf8') result.to_sql('bs_sz50_stocks', engine, index=True) bs.logout()
def get_sz50_stocks(date=today): # 获取上证50成分股 rs = bs.query_sz50_stocks(date=date) if rs.error_code != '0': print('query_sz50 respond error_code::' + rs.error_msg) login() return get_sz50_stocks(date) # 打印结果集 sz50_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields) return result
def dispatch_request(self): post_data = request.get_json() date = post_data.get('date', '') attr_fields = post_data.get('attr_fields', None) rs = bs.query_sz50_stocks(date=date) sz50_stocks = [] while (rs.error_code == '0') & rs.next(): sz50_stocks.append(rs.get_row_data()) fields = ['updateDate', 'code', 'code_name'] data = jsonWrapper(sz50_stocks, fields) result = { 'code': 200 if rs.error_code == '0' else rs.error_code, 'data': list(map(lambda x: { attr: x.get(attr, '') for attr in attr_fields }, data)) if attr_fields else data, 'msg': rs.error_msg } self.logout() return jsonify(result)
def get_sz50_stocks(): lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) #### 获取交易日信息 #### rs = bs.query_sz50_stocks() 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 query_sz50_stocks(date=None): """ 上证50成分股 方法说明:通过API接口获取上证50成分股信息,更新频率:每周一更新。 返回类型:pandas的DataFrame类型。 参数含义: date:查询日期,格式XXXX-XX-XX,为空时默认最新日期。 """ lg = bs.login() if lg.error_code != '0': logger.error('login respond error_msg:' + lg.error_msg) rs = bs.query_sz50_stocks(date) if rs.error_code != '0': logger.error('query_sz50_stocks respond error_msg:' + rs.error_msg) sz50_stocks = [] while (rs.error_code == '0') & rs.next(): sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields) bs.logout() return result
def download_sample_stocks(sample_name='sz50'): if sample_name == 'sz50': filename = FILE_PATH + "sz50_stocks.csv" rs = bs.query_sz50_stocks() elif sample_name == 'hs300': filename = FILE_PATH + "hs300_stocks.csv" rs = bs.query_hs300_stocks() elif sample_name == 'zz500': filename = FILE_PATH + "zz500_stocks.csv" rs = bs.query_zz500_stocks() elif sample_name == 'all': filename = FILE_PATH + "all_stocks.csv" # 取前七天的成分股信息,如果取当前天的,可能当天没有更新 trade_cal = get_trade_cal() trade_day = trade_cal[( trade_cal['is_trading_day'] == 1)]['calendar_date'].values rs = bs.query_all_stock() stocks = [] while (rs.error_code == '0') & rs.next(): stocks.append(rs.get_row_data()) result = pd.DataFrame(stocks, columns=rs.fields) result.to_csv(filename, encoding="gbk", index=False) logger.debug("将成分股%s保存至%s" % (sample_name, filename))
def sz50(self): '''上证50''' return get_data(bs.query_sz50_stocks())
import baostock as bs import pandas as pd # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:' + lg.error_code) print('login respond error_msg:' + lg.error_msg) # 获取上证50成分股 rs = bs.query_sz50_stocks(date="2018-08-10") print('query_sz50 error_code:' + rs.error_code) print('query_sz50 error_msg:' + rs.error_msg) # 打印结果集 sz50_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields) # 结果集输出到csv文件 result.to_csv("D:/sz50_stocks.csv", encoding="gbk", index=False) print(result) # 登出系统 bs.logout()
import baostock as bs import pandas as pd # 登陆系统 lg = bs.login() # 显示登陆返回信息 print('login respond error_code:'+lg.error_code) print('login respond error_msg:'+lg.error_msg) # 获取上证50成分股 rs = bs.query_sz50_stocks() print('query_sz50 error_code:'+rs.error_code) print('query_sz50 error_msg:'+rs.error_msg) # 打印结果集 sz50_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields) # 结果集输出到csv文件 result.to_csv("D:/sz50_stocks.csv", encoding="gbk", index=False) print(result) # 登出系统 bs.logout()
def getA50StockList(self): try: self.initMysqlConn() # 查询当前所有正常上市交易的股票列表 df = ts.get_sz50s() # 不能用了?返回值是none # 登陆系统 lg = bs.login() rs = bs.query_sz50_stocks() # 打印结果集 sz50_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 sz50_stocks.append(rs.get_row_data()) result = pd.DataFrame(sz50_stocks, columns=rs.fields) # result['code']='\t'+result['code'].str[3:] # ex=os.path.isfile('sz50s') # if ex==False: result.to_csv('G:\\stockData\\sz50s.csv', encoding='utf_8_sig') #指数直接覆盖掉 rs = bs.query_hs300_stocks() # 打印结果集 hs300_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 hs300_stocks.append(rs.get_row_data()) result1 = pd.DataFrame(hs300_stocks, columns=rs.fields) # result1['code']=result1['code'].str[3:] # ex=os.path.isfile('sz50s') # if ex==False: result1.to_csv('G:\\stockData\\hs300s.csv', encoding='utf_8_sig') #指数直接覆盖掉 # result1.to_csv('G:\\stockData\\hs300s.csv',encoding='gbk')#指数直接覆盖掉 rs = bs.query_zz500_stocks() # 打印结果集 zz500_stocks = [] while (rs.error_code == '0') & rs.next(): # 获取一条记录,将记录合并在一起 zz500_stocks.append(rs.get_row_data()) result2 = pd.DataFrame(zz500_stocks, columns=rs.fields) # result2['code']=result2['code'].str[3:]#没有t的话会丢掉前面的0 # ex=os.path.isfile('sz50s') # if ex==False: result2.to_csv('G:\\stockData\\zz500s.csv', encoding='utf_8_sig') #指数直接覆盖掉 # 登出系统 bs.logout() print('getsz50StockList & hs300s & zz500s Finished!') return c_len = 0 if (df == None): df = result c_len = df.shape[0] # 行数 except Exception as aa: print(aa) print('get error') for j in range(c_len): # 按行读取股票列表 resu0 = list(df.loc[c_len - 1 - j]) resu = [] for k in range(len(resu0)): # 读取股票的字段 if str(resu0[k]) == 'nan': resu.append(-1) else: resu.append(resu0[k]) try: sql_insert = "INSERT INTO sz50StockList(date,code,name) VALUES ('%s', '%s', '%s')" % ( str(resu[0]), str(resu[1]), str(resu[2])) self.cursor.execute(sql_insert) self.db.commit() except Exception as err: continue self.cursor.close() self.db.close() # 登出系统 bs.logout() print('getsz50StockList Finished!')
def sz50_stocks(self): self.getStockInstance() rs = bs.query_sz50_stocks() self._test_rs(rs) return rs