Skip to content

Commit 22d830a

Browse files
authored
Merge pull request #2664 from DerekMelchin/bug-option-chain-needs-no-subscription
equity-options skill: option_chain() needs no option subscription
2 parents dd27274 + 033df43 commit 22d830a

3 files changed

Lines changed: 3 additions & 0 deletions

File tree

skill-templates/equity-options/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Decide the route once, in py`initialize`cs`Initialize`. Mixing them is usually a
2727
- **Universe route** (py`add_option`cs`AddOption` + filter): a universe's purpose is its slice chain. If all selection, pricing, and sizing happen through py`option_chain()`cs`OptionChain()` anyway, the minute-resolution subscriptions are pure cost — either read the slice for the decisions that need live data, or drop the universe and subscribe the picks directly.
2828
- **Discovery route** (py`option_chain()`cs`OptionChain()` + py`add_option_contract`cs`AddOptionContract`): the daily chain picks the contracts; subscribe each pick. Match the data to the decision: the py`option_chain()`cs`OptionChain()` rows are previous-close values — fine when daily-granularity data suits the strategy (screening, ranking, a daily-cadence rule that tolerates day-old marks), but when the strategy calls for decision-time values (intraday sizing, hedging, entry marks), read the subscribed picks' live quotes from the slice. Whichever you use, know which one you are using.
2929
- A subscription earns its cost by being **read** or being **held**: a contract you own needs its subscription (position pricing, fills, expiry processing) even if you never read a chain. What doesn't earn its cost is breadth — a wide py`add_option`cs`AddOption` universe where the algorithm neither reads the slice chain nor holds more than its few picks.
30+
- py`option_chain()`cs`OptionChain()` needs **no option subscription** — the underlying's equity subscription is sufficient. Never add py`add_option`cs`AddOption`, a filter, or py`add_universe_options`cs`AddUniverseOptions` just to make a chain available; an empty chain has some other cause.
3031

3132
Size the subscription to the trade, not to the chain:
3233

skills/csharp/equity-options/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Decide the route once, in `Initialize`. Mixing them is usually a smell:
2727
- **Universe route** (`AddOption` + filter): a universe's purpose is its slice chain. If all selection, pricing, and sizing happen through `OptionChain()` anyway, the minute-resolution subscriptions are pure cost — either read the slice for the decisions that need live data, or drop the universe and subscribe the picks directly.
2828
- **Discovery route** (`OptionChain()` + `AddOptionContract`): the daily chain picks the contracts; subscribe each pick. Match the data to the decision: the `OptionChain()` rows are previous-close values — fine when daily-granularity data suits the strategy (screening, ranking, a daily-cadence rule that tolerates day-old marks), but when the strategy calls for decision-time values (intraday sizing, hedging, entry marks), read the subscribed picks' live quotes from the slice. Whichever you use, know which one you are using.
2929
- A subscription earns its cost by being **read** or being **held**: a contract you own needs its subscription (position pricing, fills, expiry processing) even if you never read a chain. What doesn't earn its cost is breadth — a wide `AddOption` universe where the algorithm neither reads the slice chain nor holds more than its few picks.
30+
- `OptionChain()` needs **no option subscription** — the underlying's equity subscription is sufficient. Never add `AddOption`, a filter, or `AddUniverseOptions` just to make a chain available; an empty chain has some other cause.
3031

3132
Size the subscription to the trade, not to the chain:
3233

skills/python/equity-options/SKILL.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ Decide the route once, in `initialize`. Mixing them is usually a smell:
2727
- **Universe route** (`add_option` + filter): a universe's purpose is its slice chain. If all selection, pricing, and sizing happen through `option_chain()` anyway, the minute-resolution subscriptions are pure cost — either read the slice for the decisions that need live data, or drop the universe and subscribe the picks directly.
2828
- **Discovery route** (`option_chain()` + `add_option_contract`): the daily chain picks the contracts; subscribe each pick. Match the data to the decision: the `option_chain()` rows are previous-close values — fine when daily-granularity data suits the strategy (screening, ranking, a daily-cadence rule that tolerates day-old marks), but when the strategy calls for decision-time values (intraday sizing, hedging, entry marks), read the subscribed picks' live quotes from the slice. Whichever you use, know which one you are using.
2929
- A subscription earns its cost by being **read** or being **held**: a contract you own needs its subscription (position pricing, fills, expiry processing) even if you never read a chain. What doesn't earn its cost is breadth — a wide `add_option` universe where the algorithm neither reads the slice chain nor holds more than its few picks.
30+
- `option_chain()` needs **no option subscription** — the underlying's equity subscription is sufficient. Never add `add_option`, a filter, or `add_universe_options` just to make a chain available; an empty chain has some other cause.
3031

3132
Size the subscription to the trade, not to the chain:
3233

0 commit comments

Comments
 (0)