def run(self): if self.must_factors: musts = [ factor.agg("and", axis="columns") for factor in self.must_factors ] self.must_result = list(accumulate(musts, func=operator.__and__))[-1] if self.score_factors: scores = [ factor.agg("mean", axis="columns") for factor in self.score_factors ] self.score_result = list(accumulate(scores, func=operator.__add__))[-1] if self.must_result: self.score_result = self.score_result[ self.must_result > 0 and self.score_result > self.threshold] else: self.score_result = self.score_result[ self.score_result > self.threshold] self.score_result.name = 'score' self.df = self.score_result.reset_index() self.df = index_df_with_time(self.df) print(self.df)
def get_data(data_schema, security_id=None, codes=None, level=None, provider='eastmoney', columns=None, return_type='df', start_timestamp=None, end_timestamp=None, filters=None, session=None, order=None, limit=None): local_session = False if not session: store_category = get_store_category(data_schema) session = get_db_session(provider=provider, store_category=store_category) local_session = True try: if columns: query = session.query(*columns) else: query = session.query(data_schema) if security_id: query = query.filter(data_schema.security_id == security_id) if codes: query = query.filter(data_schema.code.in_(codes)) if level: query = query.filter(data_schema.level == level) query = common_filter(query, data_schema=data_schema, start_timestamp=start_timestamp, end_timestamp=end_timestamp, filters=filters, order=order, limit=limit) if return_type == 'df': df = pd.read_sql(query.statement, query.session.bind) if not df.empty: return index_df_with_time(df, drop=False) elif return_type == 'domain': return query.all() elif return_type == 'dict': return [item.to_json() for item in query.all()] except Exception: raise finally: if local_session: session.close()
def run(self): if self.must_factors: musts = [] for factor in self.must_factors: df = factor.get_result_df() if len(df.columns) > 1: s = df.agg("and", axis="columns") s.name = 'score' musts.append(s.to_frame(name='score')) else: df.columns = ['score'] musts.append(df) self.must_result = list(accumulate(musts, func=operator.__and__))[-1] if self.score_factors: scores = [] for factor in self.score_factors: df = factor.get_result_df() if len(df.columns) > 1: s = df.agg("mean", axis="columns") s.name = 'score' scores.append(s.to_frame(name='score')) else: df.columns = ['score'] scores.append(df) self.score_result = list(accumulate(scores, func=operator.__add__))[-1] if (self.must_result is not None) and (self.score_result is not None): result = self.score_result[self.must_result.score and ( self.score_result.score >= self.threshold)] elif self.score_result is not None: result = self.score_result[ self.score_result.score >= self.threshold] else: result = self.must_result[self.must_result.score] self.result_df = result.reset_index() self.result_df = index_df_with_time(self.result_df)
def run(self): if self.must_factors: musts = [] for factor in self.must_factors: df = factor.get_df() if len(df.columns) > 1: musts.append(df.agg("and", axis="columns")) else: musts.append(df) self.must_result = list(accumulate(musts, func=operator.__and__))[-1] if self.score_factors: scores = [] for factor in self.score_factors: df = factor.get_df() if len(df.columns) > 1: scores.append(df.agg("mean", axis="columns")) else: scores.append(df) self.score_result = list(accumulate(scores, func=operator.__add__))[-1] if (self.must_result is not None) and (self.score_result is not None): self.result = self.score_result[ self.must_result > 0 and self.score_result > self.threshold] elif self.score_result is not None: self.result = self.score_result[self.score_result > self.threshold] else: self.result = self.must_result self.result.name = 'score' self.df = self.result.reset_index() self.df = index_df_with_time(self.df) print(self.df)
def init_history_data(self, history_data): self.history_data = pd.DataFrame(history_data) self.history_data = index_df_with_time(self.history_data) self.current_timestamp = to_pd_timestamp(history_data[-1]['timestamp']) self.current_data = history_data[-1]
def get_data(data_schema, security_list=None, security_id=None, codes=None, level=None, provider='eastmoney', columns=None, return_type='df', start_timestamp=None, end_timestamp=None, filters=None, session=None, order=None, limit=None): local_session = False if not session: store_category = get_store_category(data_schema) session = get_db_session(provider=provider, store_category=store_category) local_session = True try: if columns: if data_schema.timestamp not in columns: columns.append(data_schema.timestamp) query = session.query(*columns) else: query = session.query(data_schema) if security_id: query = query.filter(data_schema.security_id == security_id) if codes: query = query.filter(data_schema.code.in_(codes)) if security_list: query = query.filter(data_schema.security_id.in_(security_list)) # we always store different level in different schema,the level param is not useful now if level: try: # some schema has no level,just ignore it data_schema.level if type(level) == TradingLevel: level = level.value query = query.filter(data_schema.level == level) except Exception as e: pass query = common_filter(query, data_schema=data_schema, start_timestamp=start_timestamp, end_timestamp=end_timestamp, filters=filters, order=order, limit=limit) if return_type == 'df': df = pd.read_sql(query.statement, query.session.bind) if not df.empty: return index_df_with_time(df, drop=False) elif return_type == 'domain': return query.all() elif return_type == 'dict': return [item.to_json() for item in query.all()] except Exception: raise finally: if local_session: session.close()