Exemple #1
0
    def initialize(self):
        globalVars.initialize()
        loadedDataList = load_material_data()

        # TODO:use logger latter
        print('We now have {} in our globalVar now'.format(loadedDataList))

        try:
            shiftedReturn = globalVars.materialData['pctChange'].get_shifted(
                -1)
        except AttributeError as ae:
            print(ae)
            raise AttributeError('There\'s no pctChange in globalVars')
        except Exception as e:
            print(e)
            raise

        shiftedReturn.metadata.update({'shiftN': -1})
        shiftedReturn.name = 'shiftedReturn'
        self.allTradeDatetime = shiftedReturn.timestamp
        self.dependents.update({'shiftedReturn': shiftedReturn})

        # TODO: should load from some factor.json file latter
        ############ this part realy socks
        ############ to be modified latter
        ############ with nice designed globalVars
        ############ the factor in globalVars.factors is a dict
        toLoadFactors = ['close', 'high', 'low', 'open']

        for aFactor in toLoadFactors:
            simple_load_factor(aFactor)
            self.factorNameList.append(aFactor)
    def run(self):
        # initialize the globalVars
        globalVars.initialize()
        self.logger.info('globalVars is initialized')

        # load material data
        loadedDataList = load_material_data()
        self.logger.info('material data {0} is loaded'.format(loadedDataList))

        # load factors
        # TODO: should load from some factor.json file latter rather than simply load from material data
        # self.factorNameList
        # # 给globalVars注册factors(dict)
        # # key:factor的名字,value:generalData

        if 'factors' not in globalVars.varList:
            globalVars.register('factors', {})

        # TODO: factorManager
        for factorName in self.factorNameList:

            globalVars.factors[factorName] = Factor(
                factorName, globalVars.materialData[factorName])
            print(factorName, 'is now in globalVars.factors')
            self.logger.info("factor {0} is loaded".format(factorName))
        self.logger.info("all factors are loaded")

        # calculate the signal
        # 设置计算factors的参数
        # 可直接传pipeline
        # maskList:mask的nameList
        self.logger.info("start to generate signalGenerator")
        self.signalGenerator = self.signalGeneratorClass(
            model=CrossSectionalModelXGBoost, logger=self.logger)
        signals = self.signalGenerator.generate_signals(**self.params)

        return signals
Exemple #3
0
        for field in temp_fileds:
            d = np.load(f'{cur_path}/tables/tempData/{field}.npy',
                        allow_pickle=True).item()
            df[rename_dict[field]] = df['code'].map(d)
        df['is_exist'] = (df['ipo_date'] <= df['datetime']) & (
            df['delist_date'] >= df['datetime'])
        # Todo: 'is_st'  # 是否st
        return df


if __name__ == '__main__':
    from GetData.loadData import load_material_data

    BacktestDatabase.get_all_trade_days()
    globalVars.initialize()
    load_material_data()
    BacktestDatabase.get_daily_quote(['000300.SH'],
                                     pd.to_datetime("2020-01-01"),
                                     pd.to_datetime("2020-02-28"))
    BacktestDatabase.get_daily_factor(['000001.SZ', '000002.SZ'],
                                      ["close", "open"],
                                      pd.to_datetime("2020-01-01"),
                                      pd.to_datetime("2020-02-28"))
    BacktestDatabase.get_index_weight('沪深300', pd.to_datetime("2020-01-22"),
                                      pd.to_datetime("2020-01-22"))

    # start_date = pd.to_datetime('2016-01-01')
    # end_date = pd.to_datetime('2021-01-05')
    # all_trade_days = BacktestDatabase.get_all_trade_days()
    # to_get_date_list = all_trade_days[(all_trade_days >= start_date) & (all_trade_days <= end_date)]
    # for index_code in ['000300.SH', '000905.SH']:
Exemple #4
0
            factorTestDict[factor.name] = np.vstack(
                (factor.get_data(testStart,
                                 testEnd), factor.get_data(at=testEnd)))
    if dependents is not None:
        for name, dependent in dependents.items():
            dependentTrainDict[name] = dependent.get_data(at=trainEnd)
            dependentTestDict[name] = dependent.get_data(at=testEnd)

        return factorTrainDict, factorTestDict, dependentTrainDict, dependentTestDict


#%% test
from Tool import globalVars
from GetData.loadData import load_material_data, simple_load_factor
globalVars.initialize()
loadedDataList = load_material_data()

#TODO:use logger latter
shiftedReturn = globalVars.materialData['pctChange'].get_shifted(-1)
# TODO: take the -1 as a para: the period we want to shift
shiftedReturn.metadata.update({'shiftN': -1})
shiftedReturn.name = 'shiftedReturn'
dependents = {}
factorNameList = []
allTradeDatetime = shiftedReturn.timestamp
dependents.update({'shiftedReturn': shiftedReturn})
toLoadFactors = ['close', 'high', 'low', 'open']

for aFactor in toLoadFactors:
    simple_load_factor(aFactor)
    factorNameList.append(aFactor)
Exemple #5
0
    def run(self):
        # initialize the globalVars
        globalVars.initialize()
        self.logger.info('globalVars is initialized')

        # load material data
        loadedDataList = load_material_data()
        self.logger.info('material data {0} is loaded'.format(loadedDataList))

        # load factors
        # TODO: should load from some factor.json file latter rather than simply load from material data
        # self.factorNameList

        # toLoadFactors = ['close',
        #                  'high',
        #                  'low',
        #                  'open',
        #                  'volume'
        #                  ]
        # # 给globalVars注册factors(dict)
        # # key:factor的名字,value:generalData
        

        if 'factors' not in globalVars.varList:
            globalVars.register('factors', {})
        globalVars.factors['{}_factor'.format(self.toTestFactor.name)] = Factor('{}_factor'.format(self.toTestFactor.name),self.toTestFactor)
        self.factorNameList.append('{}_factor'.format(self.toTestFactor.name))
        # TODO: factorManager
        # for factorName in toLoadFactors:

        #     globalVars.factors[factorName] = Factor(factorName, globalVars.materialData[factorName])
        #     print(factorName, 'is now in globalVars.factors')
        #     self.factorNameList.append(factorName)
        #     self.logger.info("factor {0} is loaded".format(factorName))
        # self.logger.info("all factors are loaded")

        # calculate the signal
        # 设置计算factors的参数
        # 可直接传pipeline
        # maskList:mask的nameList
        params = {
            "startDate": pd.to_datetime('2020-01-01'),
            "endDate": pd.to_datetime('2020-10-31'),
            "panelSize": 3,
            "trainTestGap": 1,
            "maskList": None,
            "deExtremeMethod": DeExtremeMethod.MeanStd(),
            "imputeMethod": ImputeMethod.JustMask(),
            "standardizeMethod": StandardizeMethod.StandardScaler(),
            "pipeline": None,
            "factorNameList": self.factorNameList,
            # params for XGBoost
            "modelParams": {
                "jsonPath": None,
                "paraDict": {
                    "n_estimators": 50,
                    "random_state": 42,
                    "max_depth": 2}
            },
            # metric function for machine learning models
            "metric_func": mean_squared_error,
            # smoothing params
            "smoothing_params": None
        }
        self.logger.info("start to generate signalGenerator")
        self.signalGenerator = self.signalGeneratorClass(model=CrossSectionalModelXGBoost, logger=self.logger)
        signals = self.signalGenerator.generate_signals(**params)

        return signals