Table of Contents


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;
}