@@ -260,6 +260,27 @@ def next(self):
260
260
self .assertEqual (stats ['_equity_curve' ]['Equity' ].iloc [2 :4 ].round (2 ).tolist (),
261
261
[9781.28 , 9846.04 ])
262
262
263
+ def test_commissions (self ):
264
+ class S (_S ):
265
+ def next (self ):
266
+ if len (self .data ) == 2 :
267
+ self .buy (size = SIZE , tp = 3 )
268
+
269
+ FIXED_COMMISSION , COMMISSION = 10 , .01
270
+ CASH , SIZE , PRICE_ENTRY , PRICE_EXIT = 5000 , 100 , 1 , 4
271
+ arr = np .r_ [1 , PRICE_ENTRY , 1 , 2 , PRICE_EXIT , 1 , 2 ]
272
+ df = pd .DataFrame ({'Open' : arr , 'High' : arr , 'Low' : arr , 'Close' : arr })
273
+ with self .assertWarnsRegex (UserWarning , 'index is not datetime' ):
274
+ stats = Backtest (df , S , cash = CASH , commission = (FIXED_COMMISSION , COMMISSION )).run ()
275
+ EXPECTED_PAID_COMMISSION = (
276
+ FIXED_COMMISSION + COMMISSION * SIZE * PRICE_ENTRY +
277
+ FIXED_COMMISSION + COMMISSION * SIZE * PRICE_EXIT )
278
+ self .assertEqual (stats ['Commissions [$]' ], EXPECTED_PAID_COMMISSION )
279
+ self .assertEqual (stats ._trades ['Commission' ][0 ], EXPECTED_PAID_COMMISSION )
280
+ self .assertEqual (
281
+ stats ['Equity Final [$]' ],
282
+ CASH + (PRICE_EXIT - PRICE_ENTRY ) * SIZE - EXPECTED_PAID_COMMISSION )
283
+
263
284
def test_dont_overwrite_data (self ):
264
285
df = EURUSD .copy ()
265
286
bt = Backtest (df , SmaCross )
0 commit comments