def get_benchmark_net_asset_value(self, period, benchmark): data_class = GetKlineData() benchmark_close = None if period == Period.DAILY.value: start_time = Environment.benchmark_index[0] end_time = Environment.benchmark_index[-1] benchmark_close = data_class.get_market_data( Environment.index_daily_data, stock_code=[benchmark], field=['close'], start=start_time, end=end_time) elif period == Period.ONE_MIN.value: start_time = millisecond_to_date( millisecond=Environment.benchmark_index[0], format='%Y-%m-%d %H:%M:%S') end_time = millisecond_to_date( millisecond=Environment.benchmark_index[-1], format='%Y-%m-%d %H:%M:%S') benchmark_close = data_class.get_market_data( Environment.index_daily_data, stock_code=[benchmark], field=['close'], start=start_time, end=end_time) benchmark_close = list(benchmark_close) benchmark_net_asset_value = [ current_close / benchmark_close[0] for current_close in benchmark_close ] return benchmark_net_asset_value
def get_kline_data(self): kline_data = GetKlineData() all_stock_data = kline_data.cache_all_stock_data() self.kline = kline_data.get_market_data(all_stock_data, stock_code=self.stock_list, field=['close']) return self.kline
def show_backtesting_indicator(cls, event): benchmark = event.event_data_dict['strategy_data'].benchmark account = event.event_data_dict['strategy_data'].account data_class = GetKlineData() start_time = Environment.benchmark_index[0] end_time = Environment.benchmark_index[-1] account_df = Environment.backtesting_record_account benchmark_df = data_class.get_market_data(Environment.index_daily_data, stock_code=[benchmark], field=['close'], ).to_frame(name='close') account_df = account_df[account_df.index.get_level_values(1) == account[0]] account_df.reset_index(level='account_id', drop=True, inplace=True) net_value_analysis_obj = NetValueAnalysis(account_df, benchmark_df, start_time, end_time) net_analysis_result = net_value_analysis_obj.cal_net_analysis_result() for i in net_analysis_result: Environment.logger.info(i, net_analysis_result[i]) # 持仓数据转pandas position_data_df = Environment.backtesting_record_position position_data_df = position_data_df[position_data_df.index.get_level_values(1) == account[0]] position_analysis_obj = PositionAnalysis(position_data_df) position_analysis_result = position_analysis_obj.cal_position_analysis_result() for i in position_analysis_result: Environment.logger.info(i, position_analysis_result[i])
def update_market_data(cls, event): current_date = event.event_data_dict["strategy_data"].time_tag data_class = GetKlineData() stock_code_list = [] for position_data in Environment.bar_position_data_list: stock_code_list.append(position_data.instrument + "." + position_data.exchange) stock_code_list = list(set(stock_code_list)) cls.current_close_price_all = data_class.get_market_data( Environment.daily_data, stock_code=stock_code_list, field=["close"], start=current_date, end=current_date)
# 净值分析结果 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 的日线,有脏数据,后续单独处理 if datetime.datetime(2016, 1, 1) in benchmark_df.index: benchmark_df = benchmark_df.drop(datetime.datetime(2016, 1, 1)) regression_analysis_obj = RegressionAnalysis(factor_ma5, 'factor_ma5', market_close_data, benchmark_df) regression_analysis_obj.cal_factor_return('float_value_inverse') regression_analysis_obj.cal_t_value_statistics() regression_analysis_obj.cal_net_analysis()
self.get_month_ratio_average() self.get_day_volatility() self.get_month_volatility() self.get_selection_timing() if __name__ == '__main__': start_time = datetime(2010, 1, 4) end_time = datetime(2019, 11, 4) kline_object = GetKlineData() # # 指数行情,沪深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'], start=start_time, end=end_time).to_frame(name='close') # 策略净值数据,index 为 datetime,取单个账户分析,后续可做多个账户 net_value_df = pd.read_csv('account_data.csv', index_col=0) net_value_df.index = pd.DatetimeIndex(net_value_df.index) net_value_single_account_df = pd.DataFrame({}) for i in net_value_df.groupby('account_id'): net_value_single_account_df = i[1] break net_value_analysis_obj = NetValueAnalysis(net_value_single_account_df, benchmark_df, start_time, end_time) net_value_analysis_obj.cal_net_value() net_value_analysis_obj.cal_profit_ratio()