def get_adj_factor(self, adjustment_mode): folder_name = LocalDataFolderName.ADJ_FACTOR.value path = LocalDataPath.path + folder_name + '/' data = pd.DataFrame({}) if adjustment_mode == RightsAdjustment.BACKWARD.value: data = get_local_data( path, AdjustmentFactor.BACKWARD_ADJ_FACTOR.value + '.h5') elif adjustment_mode == RightsAdjustment.FROWARD.value: data = get_local_data( path, AdjustmentFactor.FROWARD_ADJ_FACTOR.value + '.h5') return data
def get_all_sws_index(self): folder_name = LocalDataFolderName.SWS_INDEX.value path = LocalDataPath.path + folder_name + '/' data_name = folder_name + '.h5' self.all_sws_index = get_local_data( path, data_name).sort_values(by='time_tag') return self.all_sws_index
def cache_all_stock_data(self, period=Period.DAILY.value, dividend_type=RightsAdjustment.NONE.value, field=None): if field is not None: self.field = field folder_name = LocalDataFolderName.MARKET_DATA.value sub_folder_name = LocalDataFolderName.KLINE_DAILY.value sub_sub_folder_name = LocalDataFolderName.A_SHARE.value path = LocalDataPath.path + folder_name + '/' + sub_folder_name + '/' + sub_sub_folder_name + '/' all_market_date = {} adj_factor = 1 if dividend_type == RightsAdjustment.FROWARD.value: adj_factor = self.adj_factor_obj.get_adj_factor( RightsAdjustment.FROWARD.value) elif dividend_type == RightsAdjustment.BACKWARD.value: adj_factor = self.adj_factor_obj.get_adj_factor( RightsAdjustment.BACKWARD.value) for i in self.field: data_name = i + '.h5' data = get_local_data(path, data_name) if isinstance(adj_factor, int): all_market_date[i] = data else: if i in ['open', 'high', 'low', 'close']: all_market_date[i] = data.multiply(adj_factor) else: all_market_date[i] = data return all_market_date
def cache_all_index_data(self, period=Period.DAILY.value): folder_name = LocalDataFolderName.MARKET_DATA.value sub_folder_name = LocalDataFolderName.KLINE_DAILY.value sub_sub_folder_name = LocalDataFolderName.INDEX.value path = LocalDataPath.path + folder_name + '/' + sub_folder_name + '/' + sub_sub_folder_name + '/' index_date = {} for i in self.field: data_name = i + '.h5' index_date[i] = get_local_data(path, data_name) return index_date
def get_share(self, field=None): """ :param field: 'total_share', 'float_a_share', 'total_share_value', 'float_a_share_value' :return: """ if field is None: field = 'total_share' folder_name = LocalDataFolderName.INDICATOR_EVERYDAY.value path = LocalDataPath.path + folder_name + '/' data_name = field + '.h5' self.share_data = get_local_data(path, data_name) return self.share_data
acf_result=self.acf_result, # 因子收益率,单利,复利, 日收益率 factor_return=factor_return, # 单因子检测的T值, Series, index为时间 factor_t_value=factor_t_value, # 单因子检测的T值的统计值,'t_value_mean': 绝对值均值, 't_value_greater_two':绝对值序列大于2的占比 factor_t_value_statistics=self.factor_t_value_statistics, # 净值分析结果 net_analysis_result=self.net_analysis_result) doc.save() if __name__ == '__main__': factor_name = 'factor_ma10' path = LocalDataPath.path + LocalDataFolderName.FACTOR.value + '/' factor_ma5 = get_local_data(path, factor_name + '.h5') # 指数数据不全,需要删一部分因子数据 factor_ma5 = factor_ma5[factor_ma5.index < datetime.datetime(2020, 1, 1)] kline_object = GetKlineData() market_data = kline_object.cache_all_stock_data( dividend_type=RightsAdjustment.BACKWARD.value, field=['close']) market_close_data = kline_object.get_market_data(market_data, field=['close']) # 指数行情,沪深300代替 all_index_data = kline_object.cache_all_index_data() benchmark_df = kline_object.get_market_data( all_index_data, stock_code=['000300.SH'], field=['close']).to_frame(name='close') # 沪深300 的日线,有脏数据,后续单独处理
result = factor_ic_mean.apply(cal_weight, args=(factor_ic_cov, ), axis=1, result_type="expand") result.columns = factor_ic.keys() return result.div(result.sum(1), axis=0) if __name__ == '__main__': factor_list = ['factor_ma5', 'factor_ma10'] path = LocalDataPath.path + LocalDataFolderName.FACTOR.value + '/' factor_data = {} for factor_name in factor_list: factor_single_data = get_local_data(path, factor_name + '.h5') # 指数数据不全,需要删一部分因子数据 factor_data[factor_name] = factor_single_data[ factor_single_data.index < datetime(2020, 1, 1)] with MongoConnect(DatabaseName.MULTI_FACTOR_DATA.value): factor_ic = {} factor_return = {} for factor_name in factor_list: factor_regression_analysis_result = FactorRegressionAnalysisResult.objects(factor_name=factor_name) \ .only('factor_name') \ .only('begin_date') \ .only('end_date') \ .only('factor_return') \ .as_pymongo() factor_return[factor_name] = pd.DataFrame(
close_price = close_price_all['close'][stock] if np.isnan(close_price): continue buy_share = int( self.single_stock_value / close_price / 100) * 100 Trade(self).order_shares(stock_code=stock, shares=buy_share, price_type='fix', order_price=close_price, account_id=self.account[0]) Environment.logger.info(self.time_tag, 'buy', stock, buy_share, 'fix', close_price, self.account[0]) if __name__ == '__main__': path = LocalDataPath.path + LocalDataFolderName.FACTOR.value + '/' factor_ma5 = get_local_data(path, 'factor_ma5.h5') # 指数数据不全,需要删一部分因子数据 factor_ma5 = factor_ma5[factor_ma5.index < datetime(2020, 1, 1)] stratification_analysis_obj = StratificationAnalysis( factor_ma5, 'factor_ma5') stratification_analysis_obj.add_group() group_hold = stratification_analysis_obj.cal_group_hold( stratification_analysis_obj.group_key[0]) stratification_strategy = StratificationStrategy(group_hold) import time a = time.time() stratification_strategy.run(save_trade_record=True) print(time.time() - a)
def get_all_index_members(self): folder_name = LocalDataFolderName.INDEX_MEMBER.value path = LocalDataPath.path + folder_name + '/' data_name = folder_name + '.h5' self.all_index_members_df = get_local_data(path, data_name) return self.all_index_members_df
def get_calendar(self, market): folder_name = LocalDataFolderName.CALENDAR.value path = LocalDataPath.path + folder_name + '/' data_name = 'calendar_' + market + '.h5' data = get_local_data(path, data_name) return list(data[0])
def get_index_class(self): folder_name = LocalDataFolderName.INDUSTRY_CLASS.value path = LocalDataPath.path + folder_name + '/' data_name = 'sw_industry_one' + '.h5' self.index_class_df = get_local_data(path, data_name) return self.index_class_df