Example (code and executable here)
Here's an example of SigHiLo processing
#define _CRT_SECURE_NO_WARNINGS #include <windows.h> #include <stdio.h> #include "NxCoreAPI.h" #include "NxCoreAPI_class.h" static NxCoreClass nxCoreClass; static const char *symbol = "eAAPL"; // Symbol to use if no arg passed in static int __stdcall nxCoreCallback(const NxCoreSystem* pNxCoreSys, const NxCoreMessage* pNxCoreMessage) { switch (pNxCoreMessage->MessageType) { case NxMSG_TRADE: { NxString *nx = pNxCoreMessage->coreHeader.pnxStringSymbol; // If this symbol has been stamped with a 1, exit, not the sym we are looking for if (nx->UserData1 == 1) { break; } // If UserData is 0, and the symbol is not a match to the one we are looking for... if (nx->UserData1 == 0 && strcmp(nx->String, symbol)) { // Stamp it with a 1 nx->UserData1 = 1; break; } // Otherwise this is the symbol we want, stamp it with a 2 nx->UserData1 = 2; // Set a trade data ptr const NxCoreTrade &nt = pNxCoreMessage->coreData.Trade; // ignore any trades that if ((nt.PriceFlags & NxTPF_EXGCANCEL) || // are cancels nt.nxAnalysis.FilterLevel >= 6) // are dubious based on filtering { break; } const NxCoreHeader &ch = pNxCoreMessage->coreHeader; const NxTime &et = ch.nxExgTimestamp; int secs = et.MsOfDay / 1000 - (nt.nxAnalysis.SigHiLoSeconds + 15); NxTime st; st.Hour = secs / 3600; st.Minute = (secs / 60) % 60; st.Second = secs % 60; const char *p = nt.nxAnalysis.SigHiLoType == NxRTA_SIGHL_LOWEST ? "Lowest" : nt.nxAnalysis.SigHiLoType == NxRTA_SIGHL_LOW ? "Low" : nt.nxAnalysis.SigHiLoType == NxRTA_SIGHL_HIGH ? "High" : nt.nxAnalysis.SigHiLoType == NxRTA_SIGHL_HIGHEST ? "Highest" : "Same"; printf("%.2d:%.2d:%.2d %6ld %.2lf %8s %6ld %.2d:%.2d:%.2d %d %ld\n", (int) et.Hour, (int) et.Minute, (int) et.Second, nt.Size, nxCoreClass.PriceToDouble(nt.Price, nt.PriceType), p, nt.nxAnalysis.SigHiLoSeconds, (int) st.Hour, (int) st.Minute, (int) st.Second, ch.ReportingExg, nt.ExgSequence ); 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; } // Pass a symbol as the second argument, otherwise the default of 'eAAPL' will be used if (argc > 2) { symbol = argv[2]; } nxCoreClass.ProcessTape(argv[1], 0, NxCF_EXCLUDE_CRC_CHECK | NxCF_EXCLUDE_QUOTES | NxCF_EXCLUDE_QUOTES2 | NxCF_EXCLUDE_OPRA, 0, nxCoreCallback); return 0; }