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)
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'])
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
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)
def get_stock_hk_spot(self): current_data_df = ak.stock_hk_spot() return current_data_df
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()})' )
# 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)