def cal_alphas(self, expr_ds): # 计算信号 for i in [ 'OpenPrice', 'ClosePrice', 'HighestPrice', 'LowestPrice', 'Volume', 'VWAP', 'Position', 'TurnOver' ]: expr_tmp = expr_ds.values.expr.replace(i, 'self.eod.%s' % i) alphas = eval(expr_tmp) resample_wgts = pd.DataFrame(alphas[:-1] * 1., index=self.eod.dates[1:], columns=self.eod.ticker_names) bt = BackTest(resample_wgts, returns=self.resample_returns, cycle='day', IS_OOS_ratio=None, stat_info=False, plot=False, quintiles=3, turnover=1, cost=0., ticker_names=None, output_dir=None, test_mode=False, signal_name=None) bt.stat_quintiles() bt.stat_quintiles_pnl() bt.stat_alpha_pnl() bt.stat_alpha_sharpe() # 保存信号 print expr_ds.values.id, expr_ds.values.expr, 'sharpe:', bt.alpha_sharpe