@@ -538,6 +538,7 @@ def __init__(self, broker: '_Broker', size: int, entry_price: float, entry_bar,
538
538
self .__sl_order : Optional [Order ] = None
539
539
self .__tp_order : Optional [Order ] = None
540
540
self .__tag = tag
541
+ self ._commissions = 0
541
542
542
543
def __repr__ (self ):
543
544
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):
1013
1014
if trade ._tp_order :
1014
1015
self .orders .remove (trade ._tp_order )
1015
1016
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 )
1017
1019
# 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
1019
1027
1020
1028
def _open_trade (self , price : float , size : int ,
1021
1029
sl : Optional [float ], tp : Optional [float ], time_index : int , tag ):
0 commit comments