@@ -60,6 +60,8 @@ def compute_stats(
6060        # Came straight from Backtest.run() 
6161        trades_df  =  pd .DataFrame ({
6262            'Size' : [t .size  for  t  in  trades ],
63+             'IsLong' : [t .is_long  for  t  in  trades ],
64+             'IsShort' : [t .is_short  for  t  in  trades ],
6365            'EntryBar' : [t .entry_bar  for  t  in  trades ],
6466            'ExitBar' : [t .exit_bar  for  t  in  trades ],
6567            'EntryPrice' : [t .entry_price  for  t  in  trades ],
@@ -170,6 +172,15 @@ def _round_timedelta(value, _period=_data_period(index)):
170172    s .loc ['# Trades' ] =  n_trades  =  len (trades_df )
171173    win_rate  =  np .nan  if  not  n_trades  else  (pl  >  0 ).mean ()
172174    s .loc ['Win Rate [%]' ] =  win_rate  *  100 
175+     s .loc ['# Long Trades' ] =  n_long_trades  =  len (trades_df .loc [trades_df ['IsLong' ]])
176+     long_trades_df  =  trades_df .loc [trades_df ['IsLong' ]]
177+     win_long_rate  =  np .nan  if  not  n_long_trades  else  (long_trades_df ['PnL' ] >  0 ).mean ()
178+     s .loc ['Win Long Rate [%]' ] =  win_long_rate  *  100 
179+     s .loc ['# Short Trades' ] =  n_short_trades  =  len (trades_df .loc [trades_df ['IsShort' ]])
180+     short_trades_df  =  trades_df .loc [trades_df ['IsShort' ]]
181+     win_short_rate  =  np .nan  if  not  n_short_trades  else  (short_trades_df ['PnL' ] >  0 ).mean ()
182+     s .loc ['Win Short Rate [%]' ] =  win_short_rate  *  100 
183+     s .loc ['Long/Short Ratio' ] =  np .nan  if  n_long_trades  ==  0  or  n_short_trades  ==  0  else  (n_long_trades  /  n_short_trades )
173184    s .loc ['Best Trade [%]' ] =  returns .max () *  100 
174185    s .loc ['Worst Trade [%]' ] =  returns .min () *  100 
175186    mean_return  =  geometric_mean (returns )
0 commit comments