feat: add option settlement handling and single-leg spread types, bump to 0.3.4

Add settlement logic for option expiry with Settlement exit reason, leg_expiry_timestamps parameter for per-leg expiry tracking, and new single-leg spread types (LongCall, LongPut, NakedCall, NakedPut). Positions are force-closed at settlement with premiums replaced by intrinsic value, and re-entry is prevented after all legs expire.
This commit is contained in:
porcelaincode
2026-03-07 06:37:31 +05:30
parent 997e234a85
commit c9451069d8
10 changed files with 51 additions and 9 deletions
+9 -1
View File
@@ -883,7 +883,7 @@ for trade in result.trades():
print(trade.pnl) # Profit/Loss
print(trade.return_pct) # Return percentage
print(trade.fees) # Fees paid
print(trade.exit_reason) # "Signal", "StopLoss", "TakeProfit"
print(trade.exit_reason) # "Signal", "StopLoss", "TakeProfit", "TrailingStop", "EndOfData", "Settlement"
```
---
@@ -997,6 +997,14 @@ MIT License - see [LICENSE](LICENSE) for details.
## Changelog
### v0.3.4
- Add single-leg option spread types: `LongCall`, `LongPut`, `NakedCall`, `NakedPut` to `SpreadType` enum
- Add `ExitReason::Settlement` for option expiry settlement exits
- Add `leg_expiry_timestamps` parameter to `run_spread_backtest` for per-leg expiry tracking
- Positions are force-closed at settlement when any leg expires, with premiums replaced by intrinsic value
- Prevent re-entry after all legs have expired
### v0.3.3
- Add `batch_spread_backtest` function for running multiple spread backtests in parallel via Rayon