Example #1
0
    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)
Example #2
0
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()
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
 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]
Example #6
0
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()