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
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']:
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)
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