def get_kdata(entity_id, level=IntervalLevel.LEVEL_1DAY, adjust_type=AdjustType.qfq, limit=10000): entity_type, exchange, code = decode_entity_id(entity_id) level = IntervalLevel(level) sec_id = to_em_sec_id(entity_id) fq_flag = to_em_fq_flag(adjust_type) level_flag = to_em_level_flag(level) # f131 结算价 # f133 持仓 # 目前未获取 url = f"https://push2his.eastmoney.com/api/qt/stock/kline/get?secid={sec_id}&klt={level_flag}&fqt={fq_flag}&lmt={limit}&end=20500000&iscca=1&fields1=f1,f2,f3,f4,f5,f6,f7,f8&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64&ut=f057cbcbce2a86e2866ab8877db1d059&forcect=1" resp = requests.get(url, headers=DEFAULT_HEADER) resp.raise_for_status() results = resp.json() data = results["data"] kdatas = [] if data: klines = data["klines"] name = data["name"] for result in klines: # "2000-01-28,1005.26,1012.56,1173.12,982.13,3023326,3075552000.00" # "2021-08-27,19.39,20.30,20.30,19.25,1688497,3370240912.00,5.48,6.01,1.15,3.98,0,0,0" # time,open,close,high,low,volume,turnover # "2022-04-13,10708,10664,10790,10638,402712,43124771328,1.43,0.57,60,0.00,4667112399583576064,4690067230254170112,1169270784" fields = result.split(",") the_timestamp = to_pd_timestamp(fields[0]) the_id = generate_kdata_id(entity_id=entity_id, timestamp=the_timestamp, level=level) open = to_float(fields[1]) close = to_float(fields[2]) high = to_float(fields[3]) low = to_float(fields[4]) volume = to_float(fields[5]) turnover = to_float(fields[6]) # 7 振幅 change_pct = value_to_pct(to_float(fields[8])) # 9 变动 turnover_rate = value_to_pct(to_float(fields[10])) kdatas.append( dict( id=the_id, timestamp=the_timestamp, entity_id=entity_id, provider="em", code=code, name=name, level=level.value, open=open, close=close, high=high, low=low, volume=volume, turnover=turnover, turnover_rate=turnover_rate, change_pct=change_pct, ) ) if kdatas: df = pd.DataFrame.from_records(kdatas) return df
def generate_domain_id(self, entity, original_data): return generate_kdata_id(entity_id=entity.id, timestamp=original_data['timestamp'], level=self.level)
def get_kdata(entity_id, level=IntervalLevel.LEVEL_1DAY, adjust_type=AdjustType.qfq, limit=10000): entity_type, exchange, code = decode_entity_id(entity_id) level = IntervalLevel(level) sec_id = to_em_sec_id(entity_id) fq_flag = to_em_fq_flag(adjust_type) level_flag = to_em_level_flag(level) url = f'https://push2his.eastmoney.com/api/qt/stock/kline/get?secid={sec_id}&klt={level_flag}&fqt={fq_flag}&lmt={limit}&end=20500000&iscca=1&fields1=f1,f2,f3,f4,f5,f6,f7,f8&fields2=f51,f52,f53,f54,f55,f56,f57,f58,f59,f60,f61,f62,f63,f64&ut=f057cbcbce2a86e2866ab8877db1d059&forcect=1' resp = requests.get(url, headers=DEFAULT_HEADER) resp.raise_for_status() results = resp.json() data = results['data'] kdatas = [] if data: klines = data['klines'] name = data['name'] # TODO: ignore the last unfinished kdata now,could control it better if need for result in klines[:-1]: # "2000-01-28,1005.26,1012.56,1173.12,982.13,3023326,3075552000.00" # "2021-08-27,19.39,20.30,20.30,19.25,1688497,3370240912.00,5.48,6.01,1.15,3.98,0,0,0" # time,open,close,high,low,volume,turnover fields = result.split(',') the_timestamp = to_pd_timestamp(fields[0]) the_id = generate_kdata_id(entity_id=entity_id, timestamp=the_timestamp, level=level) open = to_float(fields[1]) close = to_float(fields[2]) high = to_float(fields[3]) low = to_float(fields[4]) volume = to_float(fields[5]) turnover = to_float(fields[6]) # 7 振幅 change_pct = value_to_pct(to_float(fields[8])) # 9 变动 turnover_rate = value_to_pct(to_float(fields[10])) kdatas.append( dict(id=the_id, timestamp=the_timestamp, entity_id=entity_id, provider='em', code=code, name=name, level=level.value, open=open, close=close, high=high, low=low, volume=volume, turnover=turnover, turnover_rate=turnover_rate, change_pct=change_pct)) if kdatas: df = pd.DataFrame.from_records(kdatas) return df