def collect_nav(mailling=False): from const import CS_INDUSTRY_DICT, MARKET_INDEX_DICT from utils.excel_io import write_xlsx from utils.tool_funcs import ensure_dir_exists df = pd.DataFrame() sm = StrategyManager('D:/data/factor_investment_strategies', 'D:/data/factor_investment_stocklists') for i, f in sm._strategy_dict['name'].iteritems(): if os.path.isfile( os.path.join(sm._strategy_path, f + '/backtest/returns_sheet.csv')): date = sm.latest_nav_date(strategy_name=f) ff = open( os.path.join(sm._strategy_path, f + '/backtest/returns_sheet.csv')) returns = pd.read_csv(ff) returns['最新日期'] = date returns.insert(0, '策略名称', f) df = df.append(returns) df = df.set_index('最新日期') maxdate = df.index.max().strftime("%Y%m%d") indexreturns = ( h5.load_factor('daily_returns_%', '/indexprices/', dates=[maxdate]) / 100).reset_index() indexreturns.insert(0, 'name', indexreturns['IDs'].map(MARKET_INDEX_DICT)) indexreturns = indexreturns.set_index(['date', 'IDs']) industry_returns = (h5.load_factor( 'changeper', '/indexprices/cs_level_1/', dates=[maxdate]) / 100).reset_index() industry_returns.insert(0, 'name', industry_returns['IDs'].map(CS_INDUSTRY_DICT)) industry_returns = industry_returns.set_index(['date', 'IDs']) ensure_dir_exists("D:/data/strategy_performance/%s" % maxdate) write_xlsx( "D:/data/strategy_performance/%s/returns_analysis_%s.xlsx" % (maxdate, maxdate), **{ 'returns': df, 'market index': indexreturns, 'citic industry index': industry_returns }) if mailling: from filemanager import zip_dir from QuantLib import mymail mymail.connect() mymail.login() zip_dir("D:/data/strategy_performance/%s" % maxdate, 'D:/data/strategy_performance/%s.zip' % maxdate) content = 'hello everyone, this is strategy report on %s' % maxdate attachment = 'D:/data/strategy_performance/%s.zip' % maxdate try: mymail.send_mail("strategy daily report on %s" % maxdate, content, {attachment}) except: mymail.connect() mymail.send_mail("strategy daily report on %s" % maxdate, content, {attachment}) mymail.quit() return df
def backup(self): from filemanager import zip_dir mtime = datetime.today().strftime("%Y%m%d") cwd = os.getcwd() os.chdir(os.path.abspath(self._strategy_path + '/../strategy_backup')) zip_dir( self._strategy_path, "copy_of_%s_%s.zip" % (os.path.split(self._strategy_path)[1], mtime)) os.chdir(cwd)
def backup(self): from filemanager import zip_dir mtime = datetime.fromtimestamp(os.path.getmtime( self._strategy_path)).strftime("%Y%m%d") cwd = os.getcwd() os.chdir(self._strategy_path) zip_dir( self._strategy_path, "copy_of_%s_%s.zip" % (os.path.split(self._strategy_path)[1], mtime)) os.chdir(cwd)
def snapshot(self, dates, zipname=None, mail=False): """获取数据库快照并保存""" self._update_info() dates = list(dates) date_now = max(dates).strftime("%Y%m%d") if os.path.isdir(os.path.join(self.snapshots_path, date_now)): shutil.rmtree(os.path.join(self.snapshots_path, date_now), True) os.mkdir(os.path.join(self.snapshots_path, date_now)) target_path = os.path.join(self.snapshots_path, date_now) for d in self.data_dict['path'].unique(): os.makedirs(target_path + d) for idx, row in self.data_dict.iterrows(): file_path = self.abs_factor_path(row['path'], row['name']) data = pd.read_hdf(file_path, row['name']).to_frame().reset_index() snapshot = data[data['date'].isin(dates)] if snapshot.empty: snapshot = data[data['date'] == data['date'].max()] snapshot.to_csv(target_path + row['path'] + row['name'] + '.csv', index=False) if zipname is not None: zip_dir( target_path, os.path.join(self.snapshots_path, '%s_%s.zip' % (date_now, zipname))) if mail: from QuantLib import mymail mymail.connect() mymail.login() content = "hello everyone, this is factor data on %s" % date_now attachment = os.path.join(self.snapshots_path, '%s_%s.zip' % (date_now, zipname)) try: mymail.send_mail("base factor data on %s" % date_now, content, {attachment}) except: mymail.connect() mymail.send_mail("base factor data on %s" % date_now, content, {attachment}) mymail.quit()