Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
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])
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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]