@@ -538,6 +538,7 @@ def __init__(self, broker: '_Broker', size: int, entry_price: float, entry_bar,
538538 self .__sl_order : Optional [Order ] = None
539539 self .__tp_order : Optional [Order ] = None
540540 self .__tag = tag
541+ self ._commissions = None
541542
542543 def __repr__ (self ):
543544 return f'<Trade size={ self .__size } time={ self .__entry_bar } -{ self .__exit_bar or "" } ' \
@@ -1011,9 +1012,16 @@ def _close_trade(self, trade: Trade, price: float, time_index: int):
10111012 if trade ._tp_order :
10121013 self .orders .remove (trade ._tp_order )
10131014
1014- self .closed_trades .append (trade ._replace (exit_price = price , exit_bar = time_index ))
1015+ closed_trade = trade ._replace (exit_price = price , exit_bar = time_index )
1016+ self .closed_trades .append (closed_trade )
10151017 # Apply commission one more time at trade exit
1016- self ._cash += trade .pl - self ._commission (trade .size , price )
1018+ commission = self ._commission (trade .size , price )
1019+ self ._cash += trade .pl - commission
1020+ # Save commissions on Trade instance for stats
1021+ trade_open_commission = self ._commission (closed_trade .size , closed_trade .entry_price )
1022+ # applied here instead of on Trade open because size could have changed
1023+ # by way of _reduce_trade()
1024+ closed_trade ._commissions = commission + trade_open_commission
10171025
10181026 def _open_trade (self , price : float , size : int ,
10191027 sl : Optional [float ], tp : Optional [float ], time_index : int , tag ):
0 commit comments