Hi All,
I'm running some backtesting and have noticed over multiple examples that my notify_order don't match the trades. Not sure where it's coming from.
STARTING_BALANCE = 100000.0
FROM_DATE = datetime(2017, 11, 1)
TO_DATE = datetime(2020, 11, 25)
COMMISION = 0.00075
def notify_order(self, order):
# 1. If order is submitted/accepted, do nothing
if order.status in [order.Submitted, order.Accepted]:
return
# 2. If order is buy/sell executed, report price executed
if order.status in [order.Completed]:
if order.isbuy():
self.log('BUY EXECUTED, Price: {0:8.2f}, Size: {1:8.2f} Cost: {2:8.2f}, Comm: {3:8.2f}'.format(
order.executed.price,
order.executed.size,
order.executed.value,
order.executed.comm))
self.buyprice = order.executed.price
self.buycomm = order.executed.comm
else:
self.log('SELL EXECUTED, {0:8.2f}, Size: {1:8.2f} Cost: {2:8.2f}, Comm{3:8.2f}'.format(
order.executed.price,
order.executed.size,
order.executed.value,
order.executed.comm))
self.bar_executed = len(self) # when was trade executed
# 3. If order is canceled/margin/rejected, report order canceled
elif order.status in [order.Canceled, order.Margin, order.Rejected]:
self.log('Order Canceled/Margin/Rejected')
self.order = None
def notify_trade(self, trade):
if not trade.isclosed:
return
self.log('OPERATION PROFIT, GROSS %.2f, NET %.2f' %
(trade.pnl, trade.pnlcomm))
This is the beginning of my output:
2017-11-08, BUY EXECUTED, Price: 7468.99, Size: 12.76 Cost: 95339.67, Comm: 71.50
2017-11-10, SELL EXECUTED, 7079.00, Size: -12.76 Cost: 95339.67, Comm 67.77
2017-11-10, OPERATION PROFIT, GROSS -4978.12, NET -5117.39
2017-11-15, BUY EXECUTED, Price: 7248.98, Size: 12.44 Cost: 90187.99, Comm: 67.64
2017-12-20, SELL EXECUTED, 17295.20, Size: -12.44 Cost: 90187.99, Comm 161.38
2017-12-20, OPERATION PROFIT, GROSS 124989.78, NET 124760.76
2017-12-26, BUY EXECUTED, Price: 15649.99, Size: 13.33 Cost: 208674.39, Comm: 156.51
2017-12-28, SELL EXECUTED, 14045.94, Size: -13.33 Cost: 208674.39, Comm 140.46
2017-12-28, OPERATION PROFIT, GROSS -21388.14, NET -21685.11
2018-01-03, BUY EXECUTED, Price: 15170.00, Size: 12.40 Cost: 188060.34, Comm: 141.05
2018-01-09, SELL EXECUTED, 14902.54, Size: -12.40 Cost: 188060.34, Comm 138.56
2018-01-09, OPERATION PROFIT, GROSS -3315.66, NET -3595.27
2018-01-20, BUY EXECUTED, Price: 12539.08, Size: 14.73 Cost: 184645.28, Comm: 138.48
2018-01-21, SELL EXECUTED, 11420.99, Size: -14.73 Cost: 184645.28, Comm 126.14
2018-01-21, OPERATION PROFIT, GROSS -16464.53, NET -16729.15
2018-01-28, BUY EXECUTED, Price: 11499.98, Size: 14.69 Cost: 168884.02, Comm: 126.66
2018-01-29, SELL EXECUTED, 11383.91, Size: -14.69 Cost: 168884.02, Comm 125.38
2018-01-29, OPERATION PROFIT, GROSS -1704.56, NET -1956.60
2018-02-10, BUY EXECUTED, Price: 8683.93, Size: 19.22 Cost: 166893.56, Comm: 125.17
2018-02-23, SELL EXECUTED, 9815.55, Size: -19.22 Cost: 166893.56, Comm 141.48
2018-02-23, OPERATION PROFIT, GROSS 21748.23, NET 21481.58
2018-02-27, BUY EXECUTED, Price: 10321.00, Size: 18.14 Cost: 187246.44, Comm: 140.43
2018-03-07, SELL EXECUTED, 10716.48, Size: -18.14 Cost: 187246.44, Comm 145.82
2018-03-07, OPERATION PROFIT, GROSS 7174.91, NET 6888.66
2018-03-20, BUY EXECUTED, Price: 8595.01, Size: 22.54 Cost: 193732.62, Comm: 145.30
2018-03-25, SELL EXECUTED, 8468.85, Size: -22.54 Cost: 193732.62, Comm 143.17
2018-03-25, OPERATION PROFIT, GROSS -2843.66, NET -3132.13
2018-04-03, BUY EXECUTED, Price: 7370.01, Size: 25.90 Cost: 190869.57, Comm: 143.15
2018-04-05, SELL EXECUTED, 6796.10, Size: -25.90 Cost: 190869.57, Comm 132.00
2018-04-05, OPERATION PROFIT, GROSS -14863.20, NET -15138.36
2018-04-09, BUY EXECUTED, Price: 7011.04, Size: 25.15 Cost: 176313.10, Comm: 132.23
2018-04-10, SELL EXECUTED, 6781.55, Size: -25.15 Cost: 176313.10, Comm 127.91
2018-04-10, OPERATION PROFIT, GROSS -5771.20, NET -6031.34```
As you can see from the first line, 7079.00 (buy) - 7468.99 (sell) - 71.50 (commission) = -461.49 (not -5117.39)
thanks in advance!