| 261 | [9781.28, 9846.04]) |
| 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 | |
| 284 | def test_dont_overwrite_data(self): |
| 285 | df = EURUSD.copy() |