@@ -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 = None
541
542
542
543
def __repr__ (self ):
543
544
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):
1011
1012
if trade ._tp_order :
1012
1013
self .orders .remove (trade ._tp_order )
1013
1014
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 )
1015
1017
# 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
1017
1025
1018
1026
def _open_trade (self , price : float , size : int ,
1019
1027
sl : Optional [float ], tp : Optional [float ], time_index : int , tag ):
0 commit comments