def refresh_all_stock_adjust(start_date="2020-03-27",
                             current_date="2020-03-30"):
    bs.login()

    db_conn = create_engine(common.db_path_sqlalchemy)
    stock_rs = bs.query_all_stock(day=current_date)
    stock_df = stock_rs.get_data()
    rs_list = []
    for code in stock_df["code"]:
        if code.startswith("sh.6") | code.startswith(
                "sz.00") | code.startswith("sz.300"):
            print('query_stock_factor code:' + code)
            rs_factor = bs.query_adjust_factor(code=code,
                                               start_date=start_date,
                                               end_date=current_date)
            while (rs_factor.error_code == '0') & rs_factor.next():
                rs_list.append(rs_factor.get_row_data())
    factor_list = []
    for d in rs_list:
        code = d[0]
        print("refresh all factor for " + code)
        rs_factor = bs.query_adjust_factor(code=code,
                                           start_date='2006-01-01',
                                           end_date=current_date)
        while (rs_factor.error_code == '0') & rs_factor.next():
            factor_list.append(rs_factor.get_row_data())
    if len(factor_list) > 0:
        db_conn.execute(
            r'''
                INSERT OR REPLACE INTO stock_adjustfactor VALUES (?, ?, ?, ?, ?)
                ''', factor_list)
    bs.logout()
Esempio n. 2
0
def downLoadAdjustFactorByStockCode(stockCode):
    '''下载指定股票的复权因子

    下载指定股票所有的复权因子

    Args: 
        stockCode: 6位的股票代码,字符串格式

    Returns:
        返回复权因子的列表 [['sz.300634', '2018-03-23', '0.996584', '1.000000', '1.000000'], ['sz.300634', '2019-06-03', '1.000000', '1.003428', '1.003428']]
        [股票代码,除权除息日期	,前复权,后复权,最后一个不要]
    '''
    if stockCode[0] == '6':
        baoStockCode = 'sh.' + stockCode
    else:
        baoStockCode = 'sz.' + stockCode
    rs = bs.query_adjust_factor(code=baoStockCode,
                                start_date="1990-01-01",
                                end_date=getTodayDate())
    if rs.error_code != '0':
        print('下载复权因子失败 :%s  %s' % (baoStockCode, rs.error_msg))
        return
    data_list = []
    while (rs.error_code == '0') & rs.next():
        data_list.append(rs.get_row_data())
    return data_list
Esempio n. 3
0
def load_adjfactor(symbol, data_path):
    adj_file = os.path.join(data_path, symbol, 'adj.csv')

    if os.path.exists(adj_file):
        return load_adjfactor_from_file(adj_file)

    lg = bs.login('anonymous', '123456')

    if lg.error_code != '0':
        raise ValueError('baostock login failed:{}, {}'.format(lg.error_code, lg.error_msg))

    rs_list = []
    rs_factor = bs.query_adjust_factor(convert_symbol(symbol), start_date="1990-01-01", end_date="2199-12-31")
    while (rs_factor.error_code == '0') & rs_factor.next():
        rs_list.append(rs_factor.get_row_data())

        if rs_factor.error_code != '0':
            bs.logout()
            raise ValueError('baostock read data failed:{}'.format(rs_factor.error_msg))

    bs.logout()

    result_factor = pd.DataFrame(rs_list, columns=rs_factor.fields)

    result_factor.to_csv(adj_file, encoding="utf-8", index=False)

    return load_adjfactor_from_file(adj_file)
Esempio n. 4
0
def testGetFactor():
    bs.login()
    data_list = []
    k_rs = bs.query_adjust_factor(code="sh.600161",
                                  start_date="2010-01-01",
                                  end_date="")
    while (k_rs.error_code == '0') & k_rs.next():
        data_list.append(k_rs.get_row_data())
    print(data_list)
    bs.logout()
Esempio n. 5
0
def updateAllAdjustFactor():
    stockList = getStockListFromBaoStock()
    for i in stockList:
        rs = bs.query_adjust_factor(code=i, start_date="1990-01-01", end_date=getTodayDate())
        if rs.error_code != '0':
            print('下载复权因子失败 :%s  %s' % (i, rs.error_msg))
            return
        data_list = []
        while (rs.error_code == '0') & rs.next():
            data_list.append(rs.get_row_data())
        updateAdjustFactorInDB(data_list)
        print('更新复权因子 %s' %i)
Esempio n. 6
0
 def query_adjust_factor(self, code, start_date = None, end_date = None):
     '''
     code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
     start_date:开始日期,为空时默认为2015-01-01,包含此日期;
     end_date:结束日期,为空时默认当前日期,包含此日期。
     '''
     rs_list = []
     rs = bs.query_adjust_factor(code=code, start_date=start_date, end_date=end_date)
     self.log('query_adjust_factor respond  error_msg:', rs)
     while (rs.error_code == '0') & rs.next():
         rs_list.append(rs.get_row_data())
     result = pd.DataFrame(rs_list, columns=rs.fields)
     return result
Esempio n. 7
0
    def query_adjust_factor(code, start_date=None, end_date=None):
        """
        查询复权因子信息
        BaoStock提供的是涨跌幅复权算法复权因子
        :param code:股票代码,sh或sz.+6位数字代码,或者指数代码,如:sh.601398。sh:上海;sz:深圳。此参数不可为空;
        :param start_date:开始日期,为空时默认为2015-01-01,包含此日期;
        :param end_date:结束日期,为空时默认当前日期,包含此日期。
        """
        lg = bs.login()
        if lg.error_code != '0':
            logger.error('login respond  error_msg:' + lg.error_msg)

        rs_list = []
        rs_factor = bs.query_adjust_factor(code=code,
                                           start_date=start_date,
                                           end_date=end_date)
        while (rs_factor.error_code == '0') & rs_factor.next():
            rs_list.append(rs_factor.get_row_data())
        result_factor = pd.DataFrame(rs_list, columns=rs_factor.fields)

        bs.logout()
        return result_factor
Esempio n. 8
0
    def dmpAdjFactorsToFile(self, codes:list, filename:str):
        codes = transCodes(codes)
        stocks = {
            "SSE":{},
            "SZSE":{}
        }
        count = 0
        length = len(codes)
        for code in codes:
            exchg = code[:2]
            if exchg == 'sh':
                exchg = 'SSE'
            else:
                exchg = 'SZSE'
            count += 1

            stocks[exchg][code[3:]] = list()
            print("Fetching adjust factors of %s(%d/%s)..." % (code, count, length))
            rs = bs.query_adjust_factor(code=code, start_date="1990-01-01")

            if rs.error_code == '0':
                print("Error occured: %s" % (rs.error_msg))
                continue
    
            while rs.next():
                items = rs.get_row_data()
                date = int(items[1].replace("-",""))
                factor = float(items[4])
                stocks[exchg][code[3:]].append({
                    "date": date,
                    "factor": factor
                })
        
        print("Writing adjust factors into file %s..." % (filename))
        f = open(filename, 'w+')
        f.write(json.dumps(stocks, sort_keys=True, indent=4, ensure_ascii=False))
        f.close()
Esempio n. 9
0
def get_adj_factor():
    # baostock登录
    lg = bs.login()
    param = request.form
    if param and param['code']:
        # sh.600000(600000.SH)
        code = param['code']
    if param and param['begin']:
        # 2015-01-01
        begin = param['begin']
    if param and param['end']:
        # 2015-01-01
        end = param['end']
    rs_list = []
    show_code = stock_com(code)
    rs_factor = bs.query_adjust_factor(code=show_code,
                                       start_date=begin,
                                       end_date=end)
    while (rs_factor.error_code == '0') & rs_factor.next():
        rs_list.append(rs_factor.get_row_data())
    result_factor = pd.DataFrame(rs_list, columns=rs_factor.fields)
    # 保存路径
    basepath = os.path.dirname(__file__)
    basicpath = 'static/perstock/' + code
    show_time = today_time()
    fileFlag = get_file_exist(basicpath, 'main')
    factorFlag = get_file_exist(basicpath, 'factor')
    csv_name = basicpath + '/factor/' + code + '_' + show_time + '.csv'
    save_csv(csv_name, result_factor)
    # 转为json存储
    json_name = basicpath + '/factor/' + code + "_" + show_time + ".json"
    parsed = save_json(json_name, result_factor, 'com')
    all_len = len(parsed)
    show_obj = {"data": parsed, "total": all_len, "type": "factorList"}
    # baostock登出
    bs.logout()
    return show_obj
Esempio n. 10
0
    def dmpAdjFactorsToDB(self, dbHelper:DBHelper, codes:list):
        codes = transCodes(codes)
        stocks = {
            "SSE":{},
            "SZSE":{}
        }

        count = 0
        length = len(codes)
        for code in codes:
            exchg = code[:2]
            if exchg == 'sh':
                exchg = 'SSE'
            else:
                exchg = 'SZSE'
            count += 1
            
            print("Fetching adjust factors of %s(%d/%s)..." % (code, count, length))
            stocks[exchg][code[3:]] = list()
            rs = bs.query_adjust_factor(code=code, start_date="1990-01-01")

            if rs.error_code == '0':
                print("Error occured: %s" % (rs.error_msg))
                continue
    
            while rs.next():
                items = rs.get_row_data()
                date = int(items[1].replace("-",""))
                factor = float(items[4])
                stocks[exchg][code[3:]].append({
                    "date": date,
                    "factor": factor
                })
        
        print("Writing adjust factors into database...")
        dbHelper.writeFactors(stocks)
Esempio n. 11
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)

# 查询2015至2017年复权因子
rs_list = []
rs_factor = bs.query_adjust_factor(code="sh.600000",
                                   start_date="2015-01-01",
                                   end_date="2017-12-31")
while (rs_factor.error_code == '0') & rs_factor.next():
    rs_list.append(rs_factor.get_row_data())
result_factor = pd.DataFrame(rs_list, columns=rs_factor.fields)
# 打印输出
print(result_factor)

# 结果集输出到csv文件
result_factor.to_csv("D:\\adjust_factor_data.csv", encoding="gbk", index=False)

# 登出系统
bs.logout()
Esempio n. 12
0
 def adjust_factor(self, code, start_date, end_date):
     self.getStockInstance()
     rs = bs.query_adjust_factor(code, start_date, end_date)
     self._test_rs(rs)
     return rs
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)

# 查询2017至2019年复权因子
rs_list = []
rs_factor = bs.query_adjust_factor(code="sz.000001", start_date="2017-01-01", end_date="2019-12-31")
while (rs_factor.error_code == '0') & rs_factor.next():
    rs_list.append(rs_factor.get_row_data())
result_factor = pd.DataFrame(rs_list, columns=rs_factor.fields)
# 打印输出
print(result_factor)

# 结果集输出到csv文件
result_factor.to_csv("D:\\adjust_factor_data.csv", encoding="gbk", index=False)

# 登出系统
bs.logout()