|
|
@@ -15,45 +15,57 @@ def build_crossing_series() -> list[Candle]:
|
|
|
80.0,
|
|
|
80.0,
|
|
|
80.0,
|
|
|
+ 80.55555555555556,
|
|
|
+ 81.11111111111111,
|
|
|
81.66666666666667,
|
|
|
+ 82.22222222222223,
|
|
|
+ 82.77777777777777,
|
|
|
83.33333333333333,
|
|
|
+ 83.88888888888889,
|
|
|
+ 84.44444444444444,
|
|
|
+ 85.0,
|
|
|
85.0,
|
|
|
- 86.66666666666667,
|
|
|
- 88.33333333333333,
|
|
|
- 90.0,
|
|
|
- 91.66666666666667,
|
|
|
- 93.33333333333333,
|
|
|
- 95.0,
|
|
|
- 90.0,
|
|
|
- 88.88888888888889,
|
|
|
- 87.77777777777777,
|
|
|
- 86.66666666666667,
|
|
|
- 85.55555555555556,
|
|
|
84.44444444444444,
|
|
|
+ 83.88888888888889,
|
|
|
83.33333333333333,
|
|
|
+ 82.77777777777777,
|
|
|
82.22222222222223,
|
|
|
+ 81.66666666666667,
|
|
|
81.11111111111111,
|
|
|
+ 80.55555555555556,
|
|
|
80.0,
|
|
|
80.0,
|
|
|
+ 80.55555555555556,
|
|
|
+ 81.11111111111111,
|
|
|
81.66666666666667,
|
|
|
+ 82.22222222222223,
|
|
|
+ 82.77777777777777,
|
|
|
83.33333333333333,
|
|
|
+ 83.88888888888889,
|
|
|
+ 84.44444444444444,
|
|
|
+ 85.0,
|
|
|
85.0,
|
|
|
- 86.66666666666667,
|
|
|
- 88.33333333333333,
|
|
|
- 90.0,
|
|
|
- 91.66666666666667,
|
|
|
- 93.33333333333333,
|
|
|
- 95.0,
|
|
|
- 95.0,
|
|
|
- 95.0,
|
|
|
- 95.0,
|
|
|
- 95.0,
|
|
|
- 95.0,
|
|
|
+ 84.44444444444444,
|
|
|
+ 83.88888888888889,
|
|
|
+ 83.33333333333333,
|
|
|
+ 82.77777777777777,
|
|
|
+ 82.22222222222223,
|
|
|
+ 81.66666666666667,
|
|
|
+ 81.11111111111111,
|
|
|
+ 80.55555555555556,
|
|
|
+ 80.0,
|
|
|
+ 80.0,
|
|
|
+ 80.0,
|
|
|
+ 80.0,
|
|
|
+ 80.0,
|
|
|
+ 80.0,
|
|
|
+ 80.0,
|
|
|
+ 80.0,
|
|
|
]
|
|
|
opens = list(closes)
|
|
|
- opens[20] = 100.0
|
|
|
- opens[30] = 90.0
|
|
|
- opens[40] = 80.0
|
|
|
+ opens[31] = 90.0
|
|
|
+ opens[41] = 80.0
|
|
|
+ opens[51] = 70.0
|
|
|
|
|
|
candles = []
|
|
|
for index, (open_price, close_price) in enumerate(zip(opens, closes)):
|
|
|
@@ -80,10 +92,12 @@ def test_backtest_runs_fixed_sma_crossover_series():
|
|
|
|
|
|
assert result.initial_equity == 10_000
|
|
|
assert result.trade_count == 2
|
|
|
- assert result.trades[0].entry_price == candles[20].open
|
|
|
- assert result.trades[0].exit_price == candles[30].open
|
|
|
+ assert result.trades[0].entry_price == candles[31].open
|
|
|
+ assert result.trades[0].exit_price == candles[41].open
|
|
|
assert result.trades[0].margin_used == 10_000
|
|
|
assert result.trades[1].margin_used == result.trades[0].ending_equity
|
|
|
+ assert result.trades[1].entry_price == candles[41].open
|
|
|
+ assert result.trades[1].exit_price == candles[51].open
|
|
|
assert result.ending_equity == result.trades[-1].ending_equity
|
|
|
assert "total_return" in result.to_dict()
|
|
|
assert "max_drawdown" in result.to_dict()
|