Esempio n. 1
0
 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
Esempio n. 2
0
 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]
Esempio n. 3
0
 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],
     )
Esempio n. 4
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)
Esempio n. 5
0
 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()
     ]
Esempio n. 6
0
def receive_futu_notify():
    ctx = get_quote_ctx()
    ctx.set_handler(WeComPriceReminder())