@@ -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 = 0
541542
542543 def __repr__ (self ):
543544 return f'<Trade size={ self .__size } time={ self .__entry_bar } -{ self .__exit_bar or "" } ' \
@@ -1013,9 +1014,16 @@ def _close_trade(self, trade: Trade, price: float, time_index: int):
10131014 if trade ._tp_order :
10141015 self .orders .remove (trade ._tp_order )
10151016
1016- self .closed_trades .append (trade ._replace (exit_price = price , exit_bar = time_index ))
1017+ closed_trade = trade ._replace (exit_price = price , exit_bar = time_index )
1018+ self .closed_trades .append (closed_trade )
10171019 # Apply commission one more time at trade exit
1018- self ._cash += trade .pl - self ._commission (trade .size , price )
1020+ commission = self ._commission (trade .size , price )
1021+ self ._cash += trade .pl - commission
1022+ # Save commissions on Trade instance for stats
1023+ trade_open_commission = self ._commission (closed_trade .size , closed_trade .entry_price )
1024+ # applied here instead of on Trade open because size could have changed
1025+ # by way of _reduce_trade()
1026+ closed_trade ._commissions = commission + trade_open_commission
10191027
10201028 def _open_trade (self , price : float , size : int ,
10211029 sl : Optional [float ], tp : Optional [float ], time_index : int , tag ):
0 commit comments