Back to Nautilus Trader

Option Contract

docs/concepts/instruments/option_contract.md

1.230.09.5 KB
Original Source

Option Contract

OptionContract represents a listed put or call option on a non-crypto underlying. It defines the option kind, strike price, activation time, expiration time, currency, multiplier, and lot size.

Examples include equity options, index options, and futures options.

Fields

<Tabs items={["Rust", "Python"]}> <Tab value="Rust">

FieldTypeRequired/defaultNotes
instrument_idInstrumentIdRequiredStored as id in Rust.
raw_symbolSymbolRequiredNative venue symbol.
asset_classAssetClassRequiredAsset class of the underlying.
exchangeOption<Ustr>NoneExchange MIC or venue code when known.
underlyingUstrRequiredUnderlying asset, future, or index.
option_kindOptionKindRequiredPut or call.
strike_pricePriceRequiredOption strike price.
activation_nsUnixNanosRequiredContract activation timestamp.
expiration_nsUnixNanosRequiredContract expiration timestamp.
currencyCurrencyRequiredPremium quote and settlement currency.
price_precisionu8RequiredDecimal places allowed for prices.
price_incrementPriceRequiredSmallest valid price step.
size_precisionu80Options trade in whole contracts.
size_incrementQuantity1Minimum contract size step.
multiplierQuantityRequiredContract multiplier.
lot_sizeQuantityRequiredRounded lot or contract lot size.
margin_initOption<Decimal>0Initial margin rate.
margin_maintOption<Decimal>0Maintenance margin rate.
maker_feeOption<Decimal>0Maker fee rate. Negative values rebate.
taker_feeOption<Decimal>0Taker fee rate. Negative values rebate.
max_quantityOption<Quantity>NoneMaximum order quantity.
min_quantityOption<Quantity>1Minimum order quantity.
max_priceOption<Price>NoneMaximum valid quote or order price.
min_priceOption<Price>NoneMinimum valid quote or order price.
tick_schemeOption<Ustr>NoneRegistered variable tick scheme name.
infoOption<Params>NoneAdapter metadata.
ts_eventUnixNanosRequiredEvent timestamp in nanoseconds.
ts_initUnixNanosRequiredInitialization timestamp in nanoseconds.
</Tab> <Tab value="Python">
FieldTypeRequired/defaultNotes
instrument_idInstrumentIdRequired
raw_symbolSymbolRequiredNative venue symbol.
asset_classAssetClassRequiredAsset class of the underlying.
exchangestr | NoneNoneExchange MIC or venue code when known.
underlyingstrRequiredUnderlying asset, future, or index.
option_kindOptionKindRequiredPut or call.
strike_pricePriceRequiredOption strike price.
activation_nsintRequiredContract activation timestamp.
expiration_nsintRequiredContract expiration timestamp.
currencyCurrencyRequiredPremium quote and settlement currency.
price_precisionintRequiredDecimal places allowed for prices.
price_incrementPriceRequiredSmallest valid price step.
size_precisionint0Options trade in whole contracts.
size_incrementQuantity1Minimum contract size step.
multiplierQuantityRequiredContract multiplier.
lot_sizeQuantityRequiredRounded lot or contract lot size.
margin_initDecimal | None0Initial margin rate.
margin_maintDecimal | None0Maintenance margin rate.
maker_feeDecimal | None0Maker fee rate. Negative values rebate.
taker_feeDecimal | None0Taker fee rate. Negative values rebate.
max_quantityQuantity | NoneNoneMaximum order quantity.
min_quantityQuantity | None1Minimum order quantity.
max_pricePrice | NoneNoneMaximum valid quote or order price.
min_pricePrice | NoneNoneMinimum valid quote or order price.
tick_schemestr | NoneNoneRegistered variable tick scheme name.
infodict | NoneNoneAdapter metadata.
ts_eventintRequiredEvent timestamp in nanoseconds.
ts_initintRequiredInitialization timestamp in nanoseconds.
</Tab> </Tabs>

Note: Python constructors use instrument_id; Rust stores the same value as id.

Behavior

  • OptionContract has instrument class Option.
  • It trades in whole contracts with size precision 0 and size increment 1.
  • The option kind and strike price define the payoff shape.
  • Use CryptoOption for options where the underlying and settlement are crypto currencies.

Example

rust
use chrono::{TimeZone, Utc};
use nautilus_core::UnixNanos;
use nautilus_model::{
    enums::{AssetClass, OptionKind},
    identifiers::{InstrumentId, Symbol},
    instruments::OptionContract,
    types::{Currency, Price, Quantity},
};
use ustr::Ustr;

let activation = Utc.with_ymd_and_hms(2021, 9, 17, 0, 0, 0).unwrap();
let expiration = Utc.with_ymd_and_hms(2021, 12, 17, 0, 0, 0).unwrap();

let aapl_call = OptionContract::builder()
    .instrument_id(InstrumentId::from("AAPL211217C00150000.OPRA"))
    .raw_symbol(Symbol::from("AAPL211217C00150000"))
    .asset_class(AssetClass::Equity)
    .exchange(Ustr::from("GMNI"))
    .underlying(Ustr::from("AAPL"))
    .option_kind(OptionKind::Call)
    .strike_price(Price::from("150.00"))
    .currency(Currency::from("USD"))
    .activation_ns(UnixNanos::from(activation.timestamp_nanos_opt().unwrap() as u64))
    .expiration_ns(UnixNanos::from(expiration.timestamp_nanos_opt().unwrap() as u64))
    .price_precision(2)
    .price_increment(Price::from("0.01"))
    .multiplier(Quantity::from("100"))
    .lot_size(Quantity::from("1"))
    .ts_event(UnixNanos::default())
    .ts_init(UnixNanos::default())
    .build()
    .unwrap();
python
import pandas as pd

from nautilus_trader.model import AssetClass
from nautilus_trader.model import Currency
from nautilus_trader.model import InstrumentId
from nautilus_trader.model import OptionContract
from nautilus_trader.model import OptionKind
from nautilus_trader.model import Price
from nautilus_trader.model import Quantity
from nautilus_trader.model import Symbol

aapl_call = OptionContract(
    instrument_id=InstrumentId.from_str("AAPL211217C00150000.OPRA"),
    raw_symbol=Symbol("AAPL211217C00150000"),
    asset_class=AssetClass.EQUITY,
    underlying="AAPL",
    option_kind=OptionKind.CALL,
    strike_price=Price.from_str("150.00"),
    currency=Currency.from_str("USD"),
    activation_ns=pd.Timestamp("2021-09-17", tz="UTC").value,
    expiration_ns=pd.Timestamp("2021-12-17", tz="UTC").value,
    price_precision=2,
    price_increment=Price.from_str("0.01"),
    multiplier=Quantity.from_int(100),
    lot_size=Quantity.from_int(1),
    ts_event=0,
    ts_init=0,
    exchange="GMNI",
)

Adapters

Representative adapters that create or consume OptionContract instruments include:

  • Options covers option data, Greeks, and chain subscriptions.
  • Crypto Option covers crypto option contracts.