Category Description
Up to last 5 changes (Add, Modify, Delete) to a symbol's ticker or listed exchange.
Category Identification
| pNxCoreMessage->coreData.Category.pnxStringCategory->Atom | 30 | 
| pNxCoreMessage->coreData.Category.pnxStringCategory->String | SymbolHistory | 
Update Time and Frequency
| Approximate Time | Info | 
|---|---|
| 00:00 AM | Information from previous session | 
| 05:15 AM | Current session information | 
| Very Rare Updates | Very rare updates throughout the day | 
Category Fields | 20
| Index | FieldName | FieldType | C Code | Info | 
|---|---|---|---|---|
| 0 | EffectiveDate | NxCFT_DATE | pnxFields[0].data.nxDate | Date Added, Modified, or Deleted at start of date | 
| 1 | EntryType | NxCFT_STRINGZ | pnxFields[1].data.StringZ | Added, Modified, or Deleted | 
| 2 | ExgCode | NxCFT_STRING_IDX | pnxFields[2].data.stringTableItem | Old Exchange Code (if modified), or new Exchange Code (if deleted), from table table_NxST_EXCHANGE.html | 
| 3 | Symbol | NxCFT_STRINGZ | pnxFields[3].data.StringZ | Old Symbol (if modified), or new Symbol (if deleted). | 
| 4 | EffectiveDate | NxCFT_DATE | pnxFields[4].data.nxDate | (Next Oldest 1) Date Added, Modified, or Deleted at start of date | 
| 5 | EntryType | NxCFT_STRINGZ | pnxFields[5].data.StringZ | (Next Oldest 1) Added, Modified, or Deleted | 
| 6 | ExgCode | NxCFT_STRING_IDX | pnxFields[6].data.stringTableItem | (Next Oldest 1) Old Exchange Code (if modified), or new Exchange Code (if deleted), from table table_NxST_EXCHANGE.html | 
| 7 | Symbol | NxCFT_STRINGZ | pnxFields[7].data.StringZ | (Next Oldest 1) Old Symbol (if modified), or new Symbol (if deleted). | 
| 8 | EffectiveDate | NxCFT_DATE | pnxFields[8].data.nxDate | (Next Oldest 2) Date Added, Modified, or Deleted at start of date | 
| 9 | EntryType | NxCFT_STRINGZ | pnxFields[9].data.StringZ | (Next Oldest 2) Added, Modified, or Deleted | 
| 10 | ExgCode | NxCFT_STRING_IDX | pnxFields[10].data.stringTableItem | (Next Oldest 2) Old Exchange Code (if modified), or new Exchange Code (if deleted), from table table_NxST_EXCHANGE.html | 
| 11 | Symbol | NxCFT_STRINGZ | pnxFields[11].data.StringZ | (Next Oldest 2) Old Symbol (if modified), or new Symbol (if deleted). | 
| 12 | EffectiveDate | NxCFT_DATE | pnxFields[12].data.nxDate | (Next Oldest 3) Date Added, Modified, or Deleted at start of date | 
| 13 | EntryType | NxCFT_STRINGZ | pnxFields[13].data.StringZ | (Next Oldest 3) Added, Modified, or Deleted | 
| 14 | ExgCode | NxCFT_STRING_IDX | pnxFields[14].data.stringTableItem | (Next Oldest 3) Old Exchange Code (if modified), or new Exchange Code (if deleted), from table table_NxST_EXCHANGE.html | 
| 15 | Symbol | NxCFT_STRINGZ | pnxFields[15].data.StringZ | (Next Oldest 3) Old Symbol (if modified), or new Symbol (if deleted). | 
| 16 | EffectiveDate | NxCFT_DATE | pnxFields[16].data.nxDate | (Next Oldest 4) Date Added, Modified, or Deleted at start of date | 
| 17 | EntryType | NxCFT_STRINGZ | pnxFields[17].data.StringZ | (Next Oldest 4) Added, Modified, or Deleted | 
| 18 | ExgCode | NxCFT_STRING_IDX | pnxFields[18].data.stringTableItem | (Next Oldest 4) Old Exchange Code (if modified), or new Exchange Code (if deleted), from table table_NxST_EXCHANGE.html | 
| 19 | Symbol | NxCFT_STRINGZ | pnxFields[19].data.StringZ | (Next Oldest 4) Old Symbol (if modified), or new Symbol (if deleted). | 
Code Sample from CategoryDumper project:
void onNxCoreCategory_30(const NxCoreMessage *pNxCoreMsg)
{
     NxCategoryField *pField;
			 
     // Print the category num and the Symbol
     PrintSymbol(pNxCoreMsg);
 			 
     // Category 30 may contain up to 5 unique data points.
     // Each individual data point may contain 4 unique data elements.
     for (int i=0;i<=16;i+=4)
     {
         pField=&pNxCoreMsg->coreData.Category.pnxFields[i];		 
         if (pField->Set)
             printf("Effective Date: %02d/%02d/%d \n",
                    pField->data.nxDate.Month,
                    pField->data.nxDate.Day,
                    pField->data.nxDate.Year);
 			 
         pField=&pNxCoreMsg->coreData.Category.pnxFields[i+1];		 
         if (pField->Set)
             printf("Entry Type: %s \n",
                    pField->data.StringZ);
 			 
         // See table_NxST_EXCHANGE.html for exchange codes
         pField=&pNxCoreMsg->coreData.Category.pnxFields[i+2];		 
         if (pField->Set)
             printf("Exg Code:  Table - %d  Exchange - %d\n",
                    pField->data.stringTableItem.ixTable,
                    pField->data.stringTableItem.idString);
 			 
         pField=&pNxCoreMsg->coreData.Category.pnxFields[i+3];		 
         if (pField->Set)
             printf("Old Symbol: %s \n",
                    pField->data.StringZ);
     }
}