Esempio n. 1
0
    def get_hk_all_stock_list_daily(self):
        '''
        获取所有港股信息
        :return:
        '''
        start_time = datetime.now()
        print("get_hk_all_stock_list_daily 每天更新港股列表 start_time:", start_time)

        current_data_df = ak.stock_hk_spot()
        #print(current_data_df)

        df_list = self.common_utils.dataframe_to_dict(current_data_df)['data']

        df_list_tuple = []
        stock_exist = self.get_hk_stock_exist()
        stock_exist_list = stock_exist.split(",")

        for lt in df_list:
            symbol_name = lt[0] + "_" + lt[1]
            if symbol_name not in stock_exist_list:
                stock_exist += symbol_name + ","
                df_list_tuple.append(tuple(lt[0:4]))

        df_tuple_tuple = tuple(df_list_tuple)
        print(df_tuple_tuple)
        flag = self.hk_stock_service.insert_batch(df_tuple_tuple)
        if flag is True:
            print(stock_exist)
            self.update_hk_stock_list_exist(stock_exist, 'hk_stock_list', len(df_list))

        end_time = datetime.now()
        time = (end_time - start_time)
        print("get_hk_all_stock_list_daily 每天更新港股列表 end_time:", end_time, "耗时:", time)
Esempio n. 2
0
def get_stock_price(stock_code):
    global stock_zh_a_spot_df
    global stock_hk_spot_df
    if stock_zh_a_spot_df.empty:
        print("get A stock information")
        stock_zh_a_spot_df = ak.stock_zh_a_spot()
    if stock_hk_spot_df.empty:
        print("get HK stock information")
        stock_hk_spot_df = ak.stock_hk_spot()
    if stock_code[:2] == "hk":
        return float(
            stock_hk_spot_df.set_index('symbol').at[stock_code[2:],
                                                    'lasttrade'])
    elif stock_code == '689009':
        return 64.0
    else:
        return float(
            stock_zh_a_spot_df.set_index('code').at[stock_code, 'trade'])
Esempio n. 3
0
def get_hk_code(local = False):
    """获取港股的代码,从行情快照中抽取"""
    name = os.path.join(os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),"config"),"hk_stocks.txt")
    if(local):
        ret = []
        with open(name,"r") as f:
            for code in f.readlines():
                ret.append(code.replace("\n",""))
        return ret
    else:
        df = ak.stock_hk_spot()
        ret = []
        for index,row in df.iterrows():
            ret.append("hk"+row["symbol"])
        with open(name,"w") as f:
            for code in ret:
                f.write(code)
                f.write("\n")
        return ret
Esempio n. 4
0
    def update_hk_all_stock_daily_lastest(self):
        '''
        更新港股所有股票代码当前最新的行情,延迟15分钟
        :return:
        '''
        start_time = datetime.now()
        print("update_hk_all_stock_daily_lastest 更新港股所有股票代码当前最新的行情 start_time:", start_time)

        current_data_df = ak.stock_hk_spot()
        df_list = self.common_utils.dataframe_to_dict(current_data_df)['data']

        df_list_tuple = []
        date_str = ''

        for lt in df_list:
            symbol = lt[0]
            # if symbol == '00001':
            open = lt[6] if lt[6] is not None else 0
            high = lt[7] if lt[7] is not None else 0
            low = lt[8] if lt[8] is not None else 0
            last_trade = lt[4] if lt[4] is not None else 0
            volume = lt[9] if lt[9] is not None else 0

            ticktime = datetime.fromisoformat(lt[11]).date() if lt[11] is not None else datetime.now()
            # print(ticktime, type(ticktime))
            date_str = str(ticktime)

            df_list_tuple.append(
                (symbol, ticktime, float(open), float(high), float(low), float(last_trade), float(volume)))
            # print(symbol, open, high, low, last_trade, volume, ticktime)

        df_tuple_tuple = tuple(df_list_tuple)
        flag = False
        try:
            flag = self.hk_stock_service.insert_all_stock_daily_batch(df_tuple_tuple)
            print(date_str, flag)
        except Exception as ex:
            print("insert_stock_daily_batch exception, reason:", ex)

        end_time = datetime.now()
        time = (end_time - start_time)
        print("update_hk_all_stock_daily_lastest 更新港股所有股票代码当前最新的行情 end_time:", end_time, "耗时:", time)
Esempio n. 5
0
 def get_stock_hk_spot(self):
     current_data_df = ak.stock_hk_spot()
     return current_data_df
Esempio n. 6
0
def update(config=None):
    import akshare as ak
    import pandas as pd
    import traceback
    import time

    today = dt.date.today()
    today_weekday = today.isoweekday()
    if today_weekday in [6, 7]:
        print(f'{today} has no update!')
        return

    config = config or load_json_settings('mongodb_settings.json')
    if not config:
        raise Exception('请先配置mongodb')

    print(f'connect to {config["host"]}:{config["port"]}')
    client = connect(alias='HKStock',
                     db='HKStock',
                     host=config['host'],
                     port=config['port'],
                     username=config['user'],
                     password=config['password'],
                     authentication_source='admin')

    client.get_database('admin').authenticate(name=config['user'],
                                              password=config['password'])

    db = client.get_database('HKStock')
    col_ohlcv = db.get_collection('stock_ohlcv')
    col_hfq = db.get_collection('stock_hfq_factor')
    col_qfq = db.get_collection('stock_qfq_factor')

    col_ohlcv.create_index([("code", 1)])
    col_hfq.create_index([("code", 1)])
    col_qfq.create_index([("code", 1)])
    col_ohlcv.create_index([("code", 1), ("datetime", 1)], unique=True)
    col_hfq.create_index([("code", 1), ("datetime", 1)], unique=True)
    col_qfq.create_index([("code", 1), ("datetime", 1)], unique=True)

    print(f'update code info!')
    big_df = ak.stock_hk_spot()[["symbol", "name", "engname"]]
    big_df.columns = ["code", "name", "engname"]
    big_df["market"] = 'hk'

    HKStock_Info_Code_Name.drop_collection()
    for _, data in big_df.iterrows():
        qs = HKStock_Info_Code_Name(code=data['code'],
                                    name=data['name'],
                                    engname=data['engname'],
                                    market=data['market'])
        qs.save()

    all_info = HKStock_Info_Code_Name.objects()

    print('start update stock data')
    for info in all_info:
        try:
            ohlcv_list = []
            hfq_list = []
            qfq_list = []

            last_day = (col_ohlcv.find_one(
                {'code': info.code}, sort=[('datetime', -1)]) or {}).get(
                    'datetime', dt.datetime(1970, 1, 1)) + dt.timedelta(days=1)
            if last_day.date() >= today:
                continue

            data = ak.stock_hk_daily(info.code)
            for d, v in data[last_day:].iterrows():
                ohlcv_list.append({
                    'datetime': d.to_pydatetime(),
                    'code': info.code,
                    **v.to_dict()
                })

            if ohlcv_list:
                col_ohlcv.insert_many(ohlcv_list, ordered=False)

            hfq_factor = ak.stock_hk_daily(info.code, adjust='hfq-factor')
            for d, r in hfq_factor.iterrows():
                hfq_list.append({
                    'datetime': d.to_pydatetime(),
                    'code': info.code,
                    'factor': float(r.hfq_factor),
                    'cash': float(r.cash)
                })

            col_hfq.delete_many({'code': info.code})
            col_hfq.insert_many(hfq_list)

            qfq_factor = ak.stock_hk_daily(info.code, adjust='qfq-factor')
            for d, r in qfq_factor.iterrows():
                qfq_list.append({
                    'datetime': d.to_pydatetime(),
                    'code': info.code,
                    'factor': float(r.qfq_factor)
                })

            col_qfq.delete_many({'code': info.code})
            col_qfq.insert_many(qfq_list)

            time.sleep(1)
        # except KeyError:
        #     continue
        except Exception:
            print(
                f'update {info.code} failed with error:\n {traceback.format_exc()})'
            )
Esempio n. 7
0
# stock_szse_summary_df = ak.stock_szse_summary(date="20200930")
# doc = json.loads(stock_szse_summary_df.T.to_json()).values()

# 全股实时行情数据11
# stock_zh_a_spot_df = ak.stock_zh_a_spot()
# doc = json.loads(stock_zh_a_spot_df.T.to_json()).values()
# stockList.insert_many(doc)


# 单次返回具体某个 A 上市公司的所有历史行情数据
# 默认返回不复权的数据; qfq: 返回前复权后的数据; hfq: 返回后复权后的数据; hfq-factor: 返回后复权因子; hfq-factor: 返回前复权因子
# stock_zh_a_daily_hfq_df = ak.stock_zh_a_daily(symbol="sh688021")
# print(stock_zh_a_daily_hfq_df)
# doc = json.loads(stock_zh_a_daily_hfq_df.T.to_json()).values();
# doc_key = stock_zh_a_daily_hfq_df.T.keys();
# stockList.insert_many(doc)
# for d in doc:
#     print(d)


# stock_financial_abstract_df = ak.stock_financial_abstract(stock="300724")
# doc = json.loads(stock_financial_abstract_df.T.to_json()).values()
# for d in doc:
#     print(d)

current_data_df = ak.stock_hk_spot()
print(current_data_df.T.keys())
doc = json.loads(current_data_df.T.to_json()).values()
# stockList.insert_many(doc)
for d in doc:
    print(d)