Пример #1
0
 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)
Пример #2
0
 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)
Пример #3
0
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
Пример #4
0
    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
Пример #5
0
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))
Пример #7
0
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)
Пример #8
0
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
Пример #9
0
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')
Пример #10
0
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
Пример #11
0
    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
Пример #12
0
    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)
Пример #14
0
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()
Пример #15
0
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
Пример #16
0
 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)
Пример #17
0
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
Пример #18
0
    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
Пример #19
0
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))
Пример #20
0
 def sz50(self):
     '''上证50'''
     return get_data(bs.query_sz50_stocks())
Пример #21
0
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()
Пример #22
0
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()
Пример #23
0
 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!')
Пример #24
0
 def sz50_stocks(self):
     self.getStockInstance()
     rs = bs.query_sz50_stocks()
     self._test_rs(rs)
     return rs