|
|
@@ -79,6 +79,11 @@ def build_open_position_series() -> list[Candle]:
|
|
|
return candles
|
|
|
|
|
|
|
|
|
+def build_tail_drawdown_series() -> list[Candle]:
|
|
|
+ candles = build_crossing_series()[:22]
|
|
|
+ return candles
|
|
|
+
|
|
|
+
|
|
|
def build_drawdown_series() -> list[Candle]:
|
|
|
closes = [60.0] * 20 + [120.0, 75.0, 100.0] + [75.0] * 14
|
|
|
opens = list(closes)
|
|
|
@@ -162,3 +167,15 @@ def test_backtest_tracks_open_trade_drawdown_from_candle_close():
|
|
|
assert result.trades[0].entry_price == candles[21].open
|
|
|
assert result.trades[0].exit_price == candles[36].open
|
|
|
assert result.max_drawdown == 0.5
|
|
|
+
|
|
|
+
|
|
|
+def test_backtest_tracks_tail_drawdown_for_final_open_position():
|
|
|
+ candles = build_tail_drawdown_series()
|
|
|
+
|
|
|
+ result = run_backtest(candles=candles, leverage=2)
|
|
|
+
|
|
|
+ assert result.trade_count == 0
|
|
|
+ assert result.trades == []
|
|
|
+ assert result.ending_equity == 0.0
|
|
|
+ assert result.total_return == -1.0
|
|
|
+ assert result.max_drawdown == 1.0
|