def init_finance_table(self, start_date=0): self.authenticate() self.stock = jdk.normalize_code(self.stock) self.stock_info = jdk.get_security_info(self.stock) if self.stock_info is None: print('Error: Cannot get data or stock code not correct!') '''Internal usage. To get finance table''' q = jdk.query(jdk.valuation).filter(jdk.valuation.code == self.stock) end_date = datetime.now().date() if start_date == 0: df = jdk.get_fundamentals_continuously(q, end_date=end_date, count=5000) else: # get the days between start date and end date date_span = jdk.get_trade_days(start_date=start_date, end_date=end_date) if len(date_span) == 0: return df = jdk.get_fundamentals_continuously(q, end_date=end_date, count=len(date_span)) if df is None: return self.finance_data = df.swapaxes('items', 'minor_axis') self.finance_data = self.finance_data[self.stock] del self.finance_data['day.1'] del self.finance_data['code.1'] del self.finance_data['id'] return
async def get_valuation(self, codes: Union[str, List[str]], day: datetime.date, n: int = 1) -> np.array: if not self.connected: logger.warning("not connected") return None """get `n` of `code`'s valuation records, end at day. 对同一证券,返回的数据按升序排列(但取决于上游数据源) Args: code (str): [description] day (datetime.date): [description] n (int): [description] Returns: np.array: [description] """ if isinstance(codes, str): codes = [codes] if codes is None: q = jq.query(jq.valuation) else: q = jq.query(jq.valuation).filter(jq.valuation.code.in_(codes)) records = jq.get_fundamentals_continuously(q, count=n, end_date=day, panel=False) return self._to_numpy(records)
def get_fundamentals_continuously(code, Date, Count): myq = query(jqdatasdk.valuation).filter(jqdatasdk.valuation.code == code) GL_df = jqdatasdk.get_fundamentals_continuously(myq, end_date=Date, count=Count, panel=False) return GL_df
def record(self, entity, start, end, size, timestamps): q = query(valuation).filter(valuation.code == to_jq_entity_id(entity)) count: pd.Timedelta = now_pd_timestamp() - start df = get_fundamentals_continuously(q, end_date=now_time_str(), count=count.days + 1, panel=False) df['entity_id'] = entity.id df['timestamp'] = pd.to_datetime(df['day']) df['code'] = entity.code df['name'] = entity.name df['id'] = df['timestamp'].apply( lambda x: "{}_{}".format(entity.id, to_time_str(x))) df = df.rename( { 'pe_ratio_lyr': 'pe', 'pe_ratio': 'pe_ttm', 'pb_ratio': 'pb', 'ps_ratio': 'ps', 'pcf_ratio': 'pcf' }, axis='columns') df['market_cap'] = df['market_cap'] * 100000000 df['circulating_market_cap'] = df['circulating_market_cap'] * 100000000 df['capitalization'] = df['capitalization'] * 10000 df['circulating_cap'] = df['circulating_cap'] * 10000 df['turnover_ratio'] = df['turnover_ratio'] * 0.01 df_to_db(df=df, data_schema=self.data_schema, provider=self.provider, force_update=self.force_update) return None
def jq_get_fundamentals_continuously(query_object, end_date=None, count=1, panel=True): logger.info( "HTTP GET: fundamentals_continuously, with end_date={}, count={}". format(end_date, count)) return get_fundamentals_continuously(query_object, end_date=end_date, count=count, panel=panel)
def maintask(): a=pd.DataFrame() j=1 for i in indexs: print('正在获取第%d家,股票代码%s.' % (j, i)) j+=1 q = jq.query(jq.valuation.turnover_ratio).filter(jq.valuation.code == i) df = jq.get_fundamentals_continuously(q,end_date='2019-05-8', count=244) dff=df.to_frame() a=a.append(dff) a.to_csv("C:/Users/Administrator/Desktop/1y.csv") print(dff)
def financeData(self, stock_code): q = jq.query(jq.valuation.turnover_ratio, jq.valuation.market_cap, jq.valuation.pb_ratio, jq.valuation.pe_ratio, jq.valuation.pcf_ratio, jq.indicator.eps).filter( jq.valuation.code.in_([stock_code])) #ROE = PB/PE df = jq.get_fundamentals_continuously(q, end_date=default_end, count=20) df = add_roe(df) return df
def getTurnoverRatio(date_time, stock_code_list): query = jq.query(jq.valuation.turnover_ratio).filter( jq.valuation.code.in_(stock_code_list)) result = jq.get_fundamentals_continuously(query, end_date=date_time, count=1) print(result) #result = jq.get_fundamentals_continuously(query, start_date=date_time,end_date=date_time) code = list(result['code']) cps = list(result['turnover_ratio']) code_cps_dict = dict(zip(code, cps)) return np.array([code_cps_dict[k] for k in stock_code_list])
def draw_line(stock_name, type, days=600): info = jqdatasdk.get_security_info(stock_name) if info is None: return 'error' q = jqdatasdk.query(jqdatasdk.valuation).filter(jqdatasdk.valuation.code == stock_name) now = datetime.now() date = '%d-%d-%d' % (now.year, now.month, now.day) df = jqdatasdk.get_fundamentals_continuously(q, end_date=date, count=days) print(df['pe_ratio'].index) if type == 'PE': return draw_diagram(df['pe_ratio'], 'PE-TTM', stock_name, info.display_name) elif type == 'PB': return draw_diagram(df['pb_ratio'], 'PB', stock_name, info.display_name)
final_stks = [x[:6] for x in res2.index.tolist()] # 将放量上影线结果写入csv中 df_fl = df_pos[df_pos['股票代码'].isin(final_stks)] df_fl.loc[:, '日期'] = datetime.datetime.now().strftime('%Y%m%d') df_fl.to_csv('放量上影线.csv', mode='a', index=False, encoding='gbk', header=False) print("=======今日放量上影线股票===============") print(df_pos[df_pos['股票代码'].isin(final_stks)]) # ============计算换手率=========================================== q = jq.query(jq.valuation.turnover_ratio).filter( jq.valuation.code.in_(holdings)) turnover = jq.get_fundamentals_continuously(q, end_date=datetime.datetime.now(), count=20)['turnover_ratio'] # 五日换手总和 tn_sum = turnover.iloc[-5:].sum() / 100 # 五日换手大于50%股票 tn_stks = tn_sum[tn_sum > 0.5].index.tolist() # 100天内高点出现在最近5天 max5 = prices['close'].iloc[-5:].max() max100 = prices['close'].iloc[-100:].max() match_items = (max5 == max100) match_stks = match_items[match_items].index.tolist() final_match = list(set(tn_stks) & set(match_stks)) final_match = [x[:6] for x in final_match]