NxCoreSymbolChange
The struct NxCoreSymbolChange is defined in NxCoreAPI.h as:
struct NxCoreSymbolChange { unsigned char Status; char StatusChar; unsigned short alignment; NxString* pnxsSymbolOld; NxOptionHdr* pnxOptionHdrOld; unsigned short ListedExgOld; unsigned char alignment2[2]; };
Indicates, using an integer, whether the symbol change is an ADD, MODIFY or DELETE
#define | Value | Meaning |
---|---|---|
NxSS_ADD | 0 | Symbol formally added effective immediately |
NxSS_DEL | 1 | Symbol is set for deletion at end of tape. |
NxSS_MOD | 2 | Symbol string and or listed exchange has changed effective immediately. pnxsSymbolOld, pnxOptionHdrOld, and ListedExgOld are also set. |
Indicates, using a character, whether the symbol change is an 'A'DD, 'M'ODIFY or 'D'ELETE
Value | Meaning |
---|---|
'A' | Symbol formally added effective immediately |
'D' | Symbol is set for deletion at end of tape. |
'M' | Symbol string and or listed exchange has changed effective immediately. pnxsSymbolOld, pnxOptionHdrOld, and ListedExgOld are also set. |
Only used on a MODIFY message. Contains the original Symbol structure of the symbol before the change.
Only set (non-zero) for MODIFY type messages for option contracts. It contains a pointer to the OptionHeader information that was transmitted with the option contract that is changing.
Only used on a MODIFY message. Contains the original Listed Exchange structure of the symbol before the change.
Symbols and exchanges
If Status | New Symbol | New Exchange | Original Symbol | Original Exchange |
---|---|---|---|---|
NxSS_ADD | pNxCoreMessage->coreHeader.ListedExg | pNxCoreMessage->coreHeader.pnxStringSymbol | ||
NxSS_DEL | pNxCoreMessage->coreHeader.ListedExg | pNxCoreMessage->coreHeader.pnxStringSymbol | ||
NxSS_MOD | pNxCoreMessage->coreHeader.ListedExg | pNxCoreMessage->coreHeader.pnxStringSymbol | pnxsSymbolOld | ListedExgOld |
Example Code
The following lines of code from a NxCoreAPI callback function shows a simple transfer of UserData1 and UserData2 values for NxCoreSymbolChange Modify messages:
switch (pNxCoreMessage->coreData.SymbolChange.Status) { case NxSS_MOD: { NxString* pnxsOld; NxString* pnxsNew; // modify. Simply move values in old symbols UserData1 and UserData2 fields to // the new symbol's UserData1 and UserData2 fields. pnxsOld = pNxCoreMessage->coreData.SymbolChange.pnxsSymbolOld; if (pnxsOld) { pnxsNew = pNxCoreMessage->coreHeader.pnxStringSymbol; pnxsNew->UserData1 = pnxOld->UserData1; pnxsNew->UserData2 = pnxOld->UserData2; // it might be a good idea to zero out the old symbol's UserData fields if duplication is a problem pnxOld->UserData1 = 0; pnxOld->UserData2 = 0; } break; } case NxSS_ADD: // you could just process this like any other symbol the first time it appears. break; case NxSS_DEL: // be careful not to actually delete your structures here // better to mark them deleted or do nothing at all break; }
Notes
The pointer to the NxString structure used for each symbol will remain valid for the duration of the tape, so the "old" symbol will not be deleted internally by NxCoreAPI and in some cases may be sent again later in the tape. It is a simple matter of setting the UserData fields for the old symbol if you want to ignore any further messages.
There is one NxMSG_SYMBOLCHANGE update for each option contract being Added, Deleted, or Modified. Usually all option contracts will change to a new Option Root Symbol at the same time (corporate event), but there are some cases where only certain expiration months change Option Root Symbols (e.g. during the leap conversion process in May, June, and July), and some cases where only certain strikes change to a new Option Root Symbol (when strike codes are exhausted and there is consolidation for example).
You may decide to ignore one or more of these types of messages -- the NxCoreAPI system does not require you to take action.