NxCoreStateMMQuote
One of a number of market maker quotes in NxCoreStateMMQuotes.StateMMQuotes
The struct NxCoreStateMMQuote is defined in NxCoreAPI.h as:
struct NxCoreStateMMQuote { int AskPrice; int BidPrice; int AskSize; int BidSize; NxString* pnxStringMarketMaker; unsigned char MarketMakerType; unsigned char QuoteType; unsigned char alignment[2]; };
Represents the value of the current ask from the market maker identified as pnxStringMarketMaker.
Use PriceType to convert to double: nxCoreClass.PriceToDouble(AskPrice, PriceType)
Represents the value of the current bid from the market maker identified as pnxStringMarketMaker.
Use PriceType to convert to double: nxCoreClass.PriceToDouble(BidPrice, PriceType)
Represents the size of the current Ask from the market maker identified as pnxStringMarketMaker. For most equities, the AskSize represents the number of round lots (a round lot is 100 shares in this case). For options contracts, the AskSize represents the number of option contracts. The size fields are set to the values as sent by the exchanges.
Represents the size of the current Bid from the market maker identified as pnxStringMarketMaker. For most equities, the BidSize represents the number of round lots (a round lot is 100 shares in this case). For options contracts, the BidSize represents the number of option contracts. The size fields are set to the values as sent by the exchanges.
Described here
Described here
Described here
Here's an example of getting the MM quote information for every symbol that trades
#define _CRT_SECURE_NO_WARNINGS #include <windows.h> #include <stdio.h> #include "NxCoreAPI.h" #include "NxCoreAPI_class.h" NxCoreClass nxCoreClass; int __stdcall nxCoreCallback(const NxCoreSystem* pNxCoreSys, const NxCoreMessage* pNxCoreMessage) { switch (pNxCoreMessage->MessageType) { case NxMSG_TRADE: { // If this is an option exit out....options don't have market maker data which is what we // want to retrive below. if (pNxCoreMessage->coreHeader.pnxStringSymbol->String[0]=='o') return NxCALLBACKRETURN_CONTINUE; const NxCoreHeader& ch = pNxCoreMessage->coreHeader; const NxTime& t = pNxCoreSys->nxTime; // First get exchange quotes so we have a list of possible exchanges to query for MM states NxCoreStateExgQuotes q; int rc = nxCoreClass.StateGetExgQuotes(&q, pNxCoreMessage->coreHeader.pnxStringSymbol); if (rc != 0) { break; } char buf[16 * 1024]; // Cycle through the exchanges returned in exg state quotes for (int eqi = 0; eqi < q.StateQuoteCount; eqi++) { // Now get the Market Maker state quotes for symbol and for the specific exchange NxCoreStateMMQuotes mmq; rc = nxCoreClass.StateGetMMQuotes(q.StateExgQuotes[eqi].ReportingExg, &mmq, pNxCoreMessage->coreHeader.pnxStringSymbol); if (rc != 0) { continue; } char* p = buf; bool printThis = false; p += sprintf(p, "\n Exg[%d] ", q.StateExgQuotes[eqi].ReportingExg); // Now cycle through the state quotes and print data for (int i = 0; i < mmq.StateQuoteCount; i++) { const NxCoreStateMMQuote& mm = mmq.StateMMQuotes[i]; p += sprintf(p, "\n "); if (mm.BidPrice > 0 && mm.BidSize > 0) { printThis = true; p += sprintf(p, "%s_bid(%ld @ %.2lf) ", mm.pnxStringMarketMaker->String, mm.BidSize, nxCoreClass.PriceToDouble(mm.BidPrice, mmq.PriceType)); } if (mm.AskPrice > 0 && mm.AskSize > 0) { printThis = true; p += sprintf(p, "%s_ask(%ld @ %.2lf) ", mm.pnxStringMarketMaker->String, mm.AskSize, nxCoreClass.PriceToDouble(mm.AskPrice, mmq.PriceType)); } } if (printThis) { printf("%.2d:%.2d:%.2d.%.3d %s %s\n", (int) t.Hour, (int) t.Minute, (int) t.Second, (int) t.Millisecond, pNxCoreMessage->coreHeader.pnxStringSymbol->String, buf); } } break; } } return NxCALLBACKRETURN_CONTINUE; } int main(int argc, char** argv) { if (!nxCoreClass.LoadNxCore("NxCoreAPI.dll") && !nxCoreClass.LoadNxCore("C:\\Program Files\\Nanex\\NxCoreAPI\\NxCoreAPI.dll")) { fprintf(stderr, "Can't find NxCoreAPI.dll\n"); return -1; } nxCoreClass.ProcessTape(argv[1], 0, NxCF_EXCLUDE_CRC_CHECK, 0, nxCoreCallback); return 0; }