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
Exemple #2
0
 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)
Exemple #4
0
 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()