Exemple #1
0
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()
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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('无需插入')
Exemple #5
0
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
Exemple #8
0
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()
Exemple #9
0
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
Exemple #10
0
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()
Exemple #12
0
    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
Exemple #13
0
    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()
Exemple #15
0
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()
Exemple #16
0
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
Exemple #18
0
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)
Exemple #19
0
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
Exemple #20
0
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()
Exemple #21
0
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
Exemple #22
0
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
Exemple #23
0
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
Exemple #24
0
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
Exemple #25
0
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()
Exemple #26
0
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()
Exemple #27
0
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()
Exemple #28
0
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
Exemple #29
0
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")
Exemple #30
0
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)