From 155019ba353bcd7d6758dd23914698f2c34395d8 Mon Sep 17 00:00:00 2001 From: Young Date: Fri, 9 Jul 2021 10:33:41 +0000 Subject: [PATCH] move the pa sign from last step to first --- qlib/backtest/report.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/qlib/backtest/report.py b/qlib/backtest/report.py index 138a44faa..8a49af490 100644 --- a/qlib/backtest/report.py +++ b/qlib/backtest/report.py @@ -466,7 +466,10 @@ class Indicator: def _agg_order_price_advantage(self): if not self.order_indicator["trade_price"].empty: - self.order_indicator["pa"] = self.order_indicator["trade_price"] / self.order_indicator["base_price"] - 1 + sign = 1 - self.order_indicator["trade_dir"] * 2 + self.order_indicator["pa"] = sign * ( + self.order_indicator["trade_price"] / self.order_indicator["base_price"] - 1 + ) else: self.order_indicator["pa"] = pd.Series() @@ -498,7 +501,11 @@ class Indicator: raise ValueError(f"method {method} is not supported!") def _cal_trade_price_advantage(self, method="mean"): - pa_order = self.order_indicator["pa"] * (1 - self.order_indicator["trade_dir"] * 2) + pa_order = self.order_indicator["pa"] + if isinstance(pa_order, (int, float)): + # pa from atomic executor + return pa_order + if method == "mean": return pa_order.mean() elif method == "amount_weighted": @@ -511,7 +518,10 @@ class Indicator: raise ValueError(f"method {method} is not supported!") def _cal_trade_positive_rate(self): - pa_order = self.order_indicator["pa"] * (2 * (self.order_indicator["amount"] < 0).astype(int) - 1) + pa_order = self.order_indicator["pa"] + if isinstance(pa_order, (int, float)): + # pa from atomic executor + return pa_order return (pa_order > 0).astype(int).sum() / pa_order.count() def _cal_trade_amount(self):