def batch_fetch(self, limit=200, offset=0) -> Tuple[bool, int, List[FUTUStockBaseInfo]]: """从 富途 API 批量获取股票基本信息""" ctx = get_quote_ctx() ret, ls = ctx.get_stock_filter(Market.SZ, self.fields, begin=offset, num=limit) result = (bool(ls[0]), ls[1], []) for obj in ls[2]: financial = { key: {} for key in ["annual", "first_quarter", "interim", "third_quarter"] } # 处理财报 for key in obj.__dict__.keys(): if isinstance(key, tuple) and key[1] in [ "annual", "first_quarter", "interim", "third_quarter", ]: financial[key[1]][key[0]] = obj.__dict__[key] # update result result[2].append( FUTUStockBaseInfo(name=obj.stock_name, code=obj.stock_code, pe_annual=obj.pe_annual, pe_ttm=obj.pe_ttm, pb_rate=obj.pb_rate, **financial)) return result
def get_stock_info(cls, code: str) -> StockBaseInfo: """获取股票的基本信息""" if code not in cls.stock_info_maps: ctx = get_quote_ctx() ret, data = ctx.get_stock_basicinfo(detect_stock_market(code), code_list=[code]) info = StockBaseInfo(code=data["code"][0], name=data["name"][0]) cls.stock_info_maps[code] = info return cls.stock_info_maps[code]
def get_tick(self, code: str) -> StockTick: ctx = get_quote_ctx() _, data = ctx.get_market_snapshot([code]) stock_info = self.get_stock_info(code) return StockTick( # TODO: 获取名称 name=stock_info.name, code=stock_info.code, time=data["update_time"][0], current=data["last_price"][0], volume=data["volume"][0], turnover=data["turnover"][0], )
def fetch( self, stock_code: str, limit=1000, ktype: object = constant.KLType.K_DAY, autype: object = constant.AuType.NONE, ): # TODO: 获取实时 k 线 ctx = get_quote_ctx() ret, ls = ctx.get_cur_kline(stock_code, num=limit, ktype=ktype, autype=autype)
def get_tick_batch(self, code_list: List[str]) -> List[StockTick]: ctx = get_quote_ctx() _, datas = ctx.get_market_snapshot(code_list) stock_info_maps = { code: self.get_stock_info(code) for code in code_list } return [ StockTick( name=stock_info_maps[data["code"]].name, code=stock_info_maps[data["code"]].code, time=data["update_time"], current=data["last_price"], volume=data["volume"], turnover=data["turnover"], ) for idx, data in datas.iterrows() ]
def receive_futu_notify(): ctx = get_quote_ctx() ctx.set_handler(WeComPriceReminder())