API Documentation


The data member NxCoreMsg.coreHeader.pnxOptionHdr will be non-zero when the message update represents an Option Contract or Series. NxOptionHdr is defined in NxCoreAPI.h as follows:


The structure NxOptionHdr is defined in NxCoreAPI.h as:

struct NxOptionHdr {
    NxString*      pnxsDateAndStrike;
    NxString*      pnxsUnderlying;
    NxString*      pnxsSeriesChain;
    NxString*      pnxsSpecialSettle;
    unsigned short exgUnderlying;
    unsigned short contractUnit;
    int            strikePrice;
    int            strikePriceEst;
    unsigned char  PutCall;
    unsigned char  expirationCycle;
    unsigned char  oicStrikeAge;
    unsigned char  nxStrikeMatch;
    NxDate         nxExpirationDate;

NxOptionHdr members


A pointer to an NxString which contains exactly two upper case alpha characters in the String[] member (this is the only NxString that is not null terminated). The first character is the expiration date code, and the second character is the strike code. These values are assigned by OPRA. The pointer value of pnxsDateAndStrike is unique to each option contract, which means the UserData members will be unique to each option contract allowing you to extend the information available with each update to the option contract. Furthermore, the Atom member of pnxsDateAndStrike is assigned sequentially according to option contract's activity in previous sessions weighted to the last session. The option contract with the Atom value 1 was the most active options contract within the Option's Series in the recent trading sessions. Activity is approximately the sum of the count of quotes and trades.


The underlying equity or index (if known) will be idenfitied by a non-zero pnxsUnderlying NxString. All Option Series Symbols that have the same Underlying symbol will share the same pointer to the NxString pnxsUnderlying.

Caution: pnxsUnderlying, pnxsSeriesChain, and pnxSpecialSettle could be zero resulting in an Access Violation if you use these pointers without testing for zero.

If your account includes a subscription to the exchange of the underlying symbol, then pnxsUnderlying will be equal the pnxStringSymbol member set when the Underlying symbol updates. By setting the UserData members of the NxString structure, you can efficiently link the Underlying and all of it's option contracts. However, an even easier method of linking all related option contracts and the underlying is to use the pnxsSeriesChain member described next.


Contains an ASCII string which identifies all related Option Series, and certain characteristics of each Series. Within the ASCII string are Option Series symbols and one or more Special Character for each Series Symbol from the table below. The pointer to the NxString is the same for all Option Series Symbols specified in the String[] member. One technique might be to parse the Series Chain into a format more convenient for your code and store the results in one of the 2 UserData members of the pnxsSeriesChain structure -- then you only need to parse the string once for all the symbols in the Series Chain. In summary, all option series in the chain share the same pointer to this string.

Special Character
# Indicates an Option Series is a wrap and the number after the # character indicates the order the contract strikes appear. #1 is the first wrap, #2 is the second, and so on.
^ Indicates a LEAP and is followed by one or two digits which indicate the year the leap expires.
* An Asterisk will appear if the contract has been adjusted and has a different deliverable than the other Options Series listed. In the rare cases where there is more than one adjusted series deliverable, additional asterisks (e.g. **,***) are used.
| Pipe delimiter separates Option Series Symbols.
none Series symbols without special symbols are regular Options Series.


An Option Series that has been adjusted often requires delivery of equity or cash that differs from the standard amount (e.g. 100 shares for equity options). If an option has a non-standard delivery and the delivery specifications are known to the NxCore Servers, then pnxsSpecialSettle will point to a non-zero NxString containing the formula for the settlement delivery. All option series with the same special settlement share the same pointer to this string

Special Character Usage
* Multiply by the integer following the '*'.
+ Addition. Add the next item to the sum.
$ When it appears before a digit, the $ character indicates the cash settlement amount. Some Special Settlements have a single cash entry. A $ character before an alpha character also indicates a cash settlement, but the amount of the cash settlement amount is a function of the symbol represented by the alpha characters after the $. If the $ is appears in this form: $(tbd), it indicates the cash settlement portion has not yet been determined (tbd = to be determined). When the cash settlement portion has been determined, the (tbd) will change to digits representing the amount.


Identifies the exchange specified by the member pnxsUnderlying


Options Series that have been adjusted often specify delivery of more or less contracts than the default specification (e.g. 100 shares). If the contract unit is non-standard and is known by NxCore, then the value will be specified in this member.


An integer with an implied 3 decimal places representing the option contract's Strike Price. For example, the value 32500 represents a strike price of $32.50.
The strike price is received from OPRA and updated before 2am Eastern Time. If you use NxCoreClass, you can use nxCoreClass.PriceToDouble(strikePrice, 7)


If a strike price has not been received from OPRA, then the member strikePrice will be zero and strikePriceEst may contain a computed estimate of the strike price. As with the strikePrice member, the value is an integer with an implied 3 decimal places. If you use NxCoreClass, you can use nxCoreClass.PriceToDouble(strikePriceEst, 7)


Put contracts will have the PutCall member set to 1, Call contracts will set this member to 0.


This structure is deprecated since the implementation of OSI in 2010. This documentation is left in place for historical reference. Please refer to this page on the OSI symbology for current information, or the official spec from The OCC here (PDF).

Most equity and index option contracts are created on one of three expiration cycles shown in the table below. The expiration cycle is determined by the NxCore Servers and usually updated after market close. For new contracts, the expiration cycle will be set as soon as enough information is available.

expirationCycle value Cycle Name Cycle Months/Weeks
0 Not defined Expiration cycle not defined.
1 January Cycle January, April, July, and October
2 February Cycle February, May, August, and November
3 March Cycle March, June, September, December
4 Weekly 1 First week of the month
5 Weekly 2 Second week of the month
6 Weekly 3 Third week of the month
7 Weekly 4 Fourth week of the month
8 Weekly 5 Fifth week of the month
9 Quarterly Quarterly expiration


A number that is incremented from 0 up to the value 7, for each trading day that NxCore receives the specified strike price for this option contract. You can use oicStrikeAge to help verify the validity of a strike price.


After each trading session close, NxCore Servers analyze the strike prices for all option contracts and increment, decrement, or leave unchanged the value of nxStrikeMatch based on how well the strike price matches the expected strike price. This number, from 0-15, indicating the likelihood that the strikePrice is correct.


The expiration date for each option contract is specified in the member nxExpirationDate which is a structure of type NxDate.