This commit is contained in:
D-X-Y 2021-03-14 13:44:51 +00:00
parent f715f5be20
commit 1c947f26c7

View File

@ -1,7 +1,7 @@
##################################################### #####################################################
# Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.02 # # Copyright (c) Xuanyi Dong [GitHub D-X-Y], 2021.02 #
##################################################### #####################################################
# python exps/trading/organize_results.py # python exps/trading/organize_results.py #
##################################################### #####################################################
import sys, argparse import sys, argparse
import numpy as np import numpy as np
@ -52,7 +52,7 @@ class QResult:
new_dict[xkey] = values new_dict[xkey] = values
return new_dict return new_dict
def info(self, keys: List[Text], separate: Text = "", space: int = 25, verbose: bool = True): def info(self, keys: List[Text], separate: Text = "& ", space: int = 25, verbose: bool = True):
avaliable_keys = [] avaliable_keys = []
for key in keys: for key in keys:
if key not in self.result: if key not in self.result:
@ -62,10 +62,12 @@ class QResult:
head_str = separate.join([self.full_str(x, space) for x in avaliable_keys]) head_str = separate.join([self.full_str(x, space) for x in avaliable_keys])
values = [] values = []
for key in avaliable_keys: for key in avaliable_keys:
current_values = self._result[key] # current_values = self._result[key]
current_values = [x * 100 for x in self._result[key]]
mean = np.mean(current_values) mean = np.mean(current_values)
std = np.std(current_values) std = np.std(current_values)
values.append("{:.4f} $\pm$ {:.4f}".format(mean, std)) # values.append("{:.4f} $\pm$ {:.4f}".format(mean, std))
values.append("{:.2f} $\pm$ {:.2f}".format(mean, std))
value_str = separate.join([self.full_str(x, space) for x in values]) value_str = separate.join([self.full_str(x, space) for x in values])
if verbose: if verbose:
print(head_str) print(head_str)
@ -114,7 +116,7 @@ def query_info(save_dir, verbose):
"Rank IC": "Rank_IC", "Rank IC": "Rank_IC",
"Rank ICIR": "Rank_ICIR", "Rank ICIR": "Rank_ICIR",
"excess_return_with_cost.annualized_return": "Annualized_Return", "excess_return_with_cost.annualized_return": "Annualized_Return",
"excess_return_with_cost.information_ratio": "Information_Ratio", # "excess_return_with_cost.information_ratio": "Information_Ratio",
"excess_return_with_cost.max_drawdown": "Max_Drawdown", "excess_return_with_cost.max_drawdown": "Max_Drawdown",
} }
all_keys = list(key_map.values()) all_keys = list(key_map.values())
@ -162,7 +164,7 @@ if __name__ == "__main__":
parser.add_argument( parser.add_argument(
"--save_dir", type=str, nargs="+", default=["./outputs/qlib-baselines"], help="The checkpoint directory." "--save_dir", type=str, nargs="+", default=["./outputs/qlib-baselines"], help="The checkpoint directory."
) )
parser.add_argument("--verbose", type=str2bool, default=False, help="Print detailed log information or not") parser.add_argument("--verbose", type=str2bool, default=False, help="Print detailed log information or not.")
args = parser.parse_args() args = parser.parse_args()
print("Show results of {:}".format(args.save_dir)) print("Show results of {:}".format(args.save_dir))
@ -176,3 +178,4 @@ if __name__ == "__main__":
all_info_dict.append(info_dict) all_info_dict.append(info_dict)
info_dict = QResult.merge_dict(all_info_dict) info_dict = QResult.merge_dict(all_info_dict)
compare_results(info_dict["heads"], info_dict["values"], info_dict["names"], space=15, verbose=True, sort_key=True) compare_results(info_dict["heads"], info_dict["values"], info_dict["names"], space=15, verbose=True, sort_key=True)