investfly.models.portfolio.OptionPositionGroup
SDK model for a multi-leg option position group as exposed to user strategy code.
@dataclass
class
OptionContractSnapshot:
Per-leg view derived from a live open position matched to a persisted group leg.
Java persists only grouping keys. Price, quantity, contract unit, expiry, and option-right fields come from the currently-open broker/paper position and option symbol parsing.
OptionContractSnapshot( role: investfly.models.portfolio.OptionLegRole, actionAtOpen: investfly.models.portfolio.OptionLegAction, securityType: investfly.models.marketdata.SecurityType = OPTION, symbol: Optional[str] = None, quantity: Optional[float] = None, priceAtOpen: Optional[float] = None, contractUnits: Optional[int] = None, occSymbol: Optional[str] = None, underlyingSymbol: Optional[str] = None, optionType: Optional[investfly.models.marketdata.OptionType] = None, strikePrice: Optional[float] = None, expiry: Optional[datetime.date] = None, contracts: Optional[int] = None, openedAt: Optional[datetime.datetime] = None)
actionAtOpen: investfly.models.portfolio.OptionLegAction
@dataclass
class
OptionPositionGroup:
Group-level view used by strategy code (live + backtest).
Exit decisions (closeBeforeDte, profit/loss-based exits) are evaluated per-group rather than
per-leg. The runtime fills legs from Java's reconciled open-position-group endpoint, not
raw overlay table rows. Legs may include the underlying stock/ETF for buy-write structures
that were opened atomically.
OptionPositionGroup( groupId: int, template: investfly.models.portfolio.OptionStrategyTemplate, underlyingSymbol: str, contracts: Optional[int], netCreditAtOpen: Optional[float], openedAt: datetime.datetime, legs: List[OptionContractSnapshot] = <factory>)
legs: List[OptionContractSnapshot]