@@ -23,17 +23,19 @@ class BacktestMetrics:
2323 Attributes:
2424 backtest_start_date (datetime): The start date of the backtest.
2525 backtest_end_date (datetime): The end date of the backtest.
26+ final_value (float): The final value of the portfolio at the end
27+ of the backtest.
2628 equity_curve (List[Tuple[datetime, float]]): A list of
2729 tuples representing the equity curve, where each tuple
2830 contains a date and the corresponding portfolio value.
29- growth (float): The growth of the portfolio over the backtest period.
30- growth_percentage (float): The percentage growth of the portfolio
31+ total_growth (float): The growth of the portfolio over the
32+ backtest period.
33+ total_growth_percentage (float): The percentage growth of the portfolio
3134 over the backtest period.
32- final_value (float): The final value of the portfolio at the end
33- of the backtest.
3435 total_net_gain (float): The total return of the backtest.
3536 total_net_gain_percentage (float): The total return percentage
3637 total_loss (float): The total loss of the backtest.
38+ total_loss_percentage (float): The total loss percentage
3739 cagr (float): The compound annual growth rate of the backtest.
3840 sharpe_ratio (float): The Sharpe ratio of the backtest, indicating
3941 risk-adjusted return.
@@ -68,15 +70,24 @@ class BacktestMetrics:
6870 average exposure of the portfolio.
6971 cumulative_exposure (float): The cumulative exposure, indicating the
7072 total exposure of the portfolio over the backtest period.
71- trades_average_gain (float): The average gain from winning trades.
72- trades_average_gain_percentage (float): The average gain percentage
73- from winning trades.
74- trades_average_loss (float): The average loss from losing trades.
75- trades_average_loss_percentage (float): The average loss percentage
73+ average_trade_size (float): The average size of trades executed
74+ during the backtest.
75+ average_trade_loss (float): The average loss from losing trades.
76+ average_trade_loss_percentage (float): The average loss percentage
7677 from losing trades.
77- trades_average_return (float): The average return from all trades.
78- trades_average_return_percentage (float): The average return
79- percentage from all trades.
78+ average_trade_gain (float): The average gain from winning trades.
79+ average_trade_gain_percentage (float): The average gain percentage
80+ from winning trades.
81+ average_trade_return (float): The average return from all trades.
82+ average_trade_return_percentage (float): The average return percentage
83+ from all trades.
84+ median_trade_return (float): The median return from all trades.
85+ median_trade_return_percentage (float): The median return percentage
86+ from all trades.
87+ number_of_positive_trades (int): The total number of profitable trades
88+ executed during the backtest.
89+ number_of_negative_trades (int): The total number of unprofitable
90+ trades executed during the backtest.
8091 best_trade (float): A string representation of the best trade,
8192 including net gain and percentage.
8293 worst_trade (float): A string representation of the worst trade,
@@ -123,10 +134,12 @@ class BacktestMetrics:
123134 backtest_start_date : datetime
124135 backtest_end_date : datetime
125136 equity_curve : List [Tuple [float , datetime ]] = field (default_factory = list )
126- growth : float = 0.0
127- growth_percentage : float = 0.0
137+ total_growth : float = 0.0
138+ total_growth_percentage : float = 0.0
128139 total_net_gain : float = 0.0
129140 total_net_gain_percentage : float = 0.0
141+ total_loss : float = 0.0
142+ total_loss_percentage : float = 0.0
130143 final_value : float = 0.0
131144 cumulative_return : float = 0.0
132145 cumulative_return_series : List [Tuple [float , datetime ]] = \
@@ -152,24 +165,28 @@ class BacktestMetrics:
152165 trade_per_day : float = 0.0
153166 exposure_ratio : float = 0.0
154167 cumulative_exposure : float = 0.0
155- trades_average_gain : float = 0.0
156- trades_average_gain_percentage : float = 0.0
157- trades_average_loss : float = 0.0
158- trades_average_loss_percentage : float = 0.0
159- trades_average_return : float = 0.0
160- trades_average_return_percentage : float = 0.0
161168 best_trade : Trade = None
162169 worst_trade : Trade = None
170+ number_of_positive_trades : int = 0
171+ percentage_positive_trades : float = 0.0
172+ number_of_negative_trades : int = 0
173+ percentage_negative_trades : float = 0.0
163174 average_trade_duration : float = 0.0
164175 average_trade_size : float = 0.0
176+ average_trade_loss : float = 0.0
177+ average_trade_loss_percentage : float = 0.0
178+ average_trade_gain : float = 0.0
179+ average_trade_gain_percentage : float = 0.0
180+ average_trade_return : float = 0.0
181+ average_trade_return_percentage : float = 0.0
182+ median_trade_return : float = 0.0
183+ median_trade_return_percentage : float = 0.0
165184 number_of_trades : int = 0
166185 number_of_trades_closed : int = 0
167186 number_of_trades_opened : int = 0
168187 number_of_trades_open_at_end : int = 0
169188 win_rate : float = 0.0
170189 win_loss_ratio : float = 0.0
171- percentage_positive_trades : float = 0.0
172- percentage_negative_trades : float = 0.0
173190 percentage_winning_months : float = 0.0
174191 percentage_winning_years : float = 0.0
175192 average_monthly_return : float = 0.0
@@ -198,11 +215,13 @@ def to_dict(self) -> dict:
198215 "backtest_end_date" : self .backtest_end_date .isoformat (),
199216 "equity_curve" : [(value , date .isoformat ())
200217 for value , date in self .equity_curve ],
218+ "final_value" : self .final_value ,
201219 "total_net_gain" : self .total_net_gain ,
202220 "total_net_gain_percentage" : self .total_net_gain_percentage ,
203- "final_value" : self .final_value ,
204- "growth" : self .growth ,
205- "growth_percentage" : self .growth_percentage ,
221+ "total_growth" : self .total_growth ,
222+ "total_growth_percentage" : self .total_growth_percentage ,
223+ "total_loss" : self .total_loss ,
224+ "total_loss_percentage" : self .total_loss_percentage ,
206225 "cumulative_return" : self .cumulative_return ,
207226 "cumulative_return_series" : [(value , date .isoformat ())
208227 for value , date in
@@ -216,8 +235,6 @@ def to_dict(self) -> dict:
216235 "sortino_ratio" : self .sortino_ratio ,
217236 "calmar_ratio" : self .calmar_ratio ,
218237 "profit_factor" : self .profit_factor ,
219- "gross_profit" : self .gross_profit ,
220- "gross_loss" : self .gross_loss ,
221238 "annual_volatility" : self .annual_volatility ,
222239 "monthly_returns" : [(value , date .isoformat ())
223240 for value , date in self .monthly_returns ],
@@ -233,15 +250,22 @@ def to_dict(self) -> dict:
233250 "trade_per_day" : self .trade_per_day ,
234251 "exposure_ratio" : self .exposure_ratio ,
235252 "cumulative_exposure" : self .cumulative_exposure ,
236- "trades_average_gain" : self .trades_average_gain ,
237- "trades_average_gain_percentage" :
238- self .trades_average_gain_percentage ,
239- "trades_average_loss" : self .trades_average_loss ,
240- "trades_average_loss_percentage" :
241- self .trades_average_loss_percentage ,
242- "trades_average_return" : self .trades_average_return ,
243- "trades_average_return_percentage" :
244- self .trades_average_return_percentage ,
253+ "average_trade_gain" : self .average_trade_gain ,
254+ "average_trade_gain_percentage" :
255+ self .average_trade_gain_percentage ,
256+ "average_trade_loss" : self .average_trade_loss ,
257+ "average_trade_loss_percentage" :
258+ self .average_trade_loss_percentage ,
259+ "average_trade_return" : self .average_trade_return ,
260+ "average_trade_return_percentage" :
261+ self .average_trade_return_percentage ,
262+ "median_trade_return" : self .median_trade_return ,
263+ "median_trade_return_percentage" :
264+ self .median_trade_return_percentage ,
265+ "number_of_positive_trades" : self .number_of_positive_trades ,
266+ "percentage_positive_trades" : self .percentage_positive_trades ,
267+ "number_of_negative_trades" : self .number_of_negative_trades ,
268+ "percentage_negative_trades" : self .percentage_negative_trades ,
245269 "best_trade" : self .best_trade .to_dict ()
246270 if self .best_trade else None ,
247271 "worst_trade" : self .worst_trade .to_dict ()
@@ -253,8 +277,6 @@ def to_dict(self) -> dict:
253277 "win_loss_ratio" : self .win_loss_ratio ,
254278 "percentage_winning_months" : self .percentage_winning_months ,
255279 "percentage_winning_years" : self .percentage_winning_years ,
256- "percentage_positive_trades" : self .percentage_positive_trades ,
257- "percentage_negative_trades" : self .percentage_negative_trades ,
258280 "average_monthly_return" : self .average_monthly_return ,
259281 "average_monthly_return_losing_months" :
260282 self .average_monthly_return_losing_months ,
0 commit comments