コード例 #1
0
    void MamdaCurrencyFields::setDictionary (const MamaDictionary&  dictionary)
    {
        // already initialised
        if (initialised)
        {
            return;
        }

        //set the Common Fields
        if(!MamdaCommonFields::isSet())
        {
            MamdaCommonFields::setDictionary (dictionary);
        }

        BID_PRICE  = dictionary.getFieldByName ("wBidPrice");
        ASK_PRICE  = dictionary.getFieldByName ("wAskPrice");

        theMaxFid = dictionary.getMaxFid();
        initialised = true;
    }
コード例 #2
0
    void MamdaAuctionFields::setDictionary (const MamaDictionary&  dictionary)
    {
        // Already initialised
        if (initialised)
        {
            return;
        }

        // Set the Common Fields
        if(!MamdaCommonFields::isSet ())
        {
            MamdaCommonFields::setDictionary (dictionary);
        }

        UNCROSS_PRICE            = dictionary.getFieldByName ("wUncrossPrice");
        UNCROSS_VOLUME           = dictionary.getFieldByName ("wUncrossVolume");
        UNCROSS_PRICE_IND        = dictionary.getFieldByName ("wUncrossPriceInd");
        AUCTION_TIME             = dictionary.getFieldByName ("wAuctionTime");

        theMaxFid   = dictionary.getMaxFid();
        initialised = true;
    }
コード例 #3
0
void MamaEntitle::buildDataDictionary ()
{
    DictionaryCallback cb (this, mBridgeImpl);

    mDictionary = new MamaDictionary;
    mDictionary->create (mDefaultQueue,
                          &cb,
                          mDictSource,
                          3,
                          10.0);

    Mama::start (mBridgeImpl);
    if (mDictionaryComplete == false)
    {
        cerr << "Failed to create dictionary. Exiting." << endl;
        exit (1);
    }
}
コード例 #4
0
int main (int argc, const char **argv)
{
    try
    {
        CommonCommandLineParser  cmdLine (argc, argv);
        setvbuf (stdout, (char *) NULL, _IONBF, 0);
        // Initialise the MAMA API
        mamaBridge bridge = cmdLine.getBridge();
        Mama::open ();

        const vector<const char*>&
                         symbolList          = cmdLine.getSymbolList ();
        double           throttleRate        = cmdLine.getThrottleRate ();
        int              snapshotInterval    = cmdLine.getOptInt    ("snapshot");
        int              precision           = cmdLine.getPrecision ();
        bool             processEntries      = cmdLine.getOptBool   ('e');
        bool             strictChecking      = !cmdLine.getOptBool  ('C');
        bool             processMarketOrders = cmdLine.getOptBool   ('k');
        bool             showDeltas          = cmdLine.showDeltas   ();
        const char*      dictFile            = cmdLine.getOptString("use_dict_file");
        MamaSource*      source              = cmdLine.getSource    ();
        MamaQueueGroup   queues (cmdLine.getNumThreads(), bridge);
        DictRequester    dictRequester (bridge);

        // We might as well enforce strict checking of order book updates
        // (at the expense of some performance).
        if (strictChecking)
        {
            cout << "MamdaOrderBook strict checking is on" << endl;
            MamdaOrderBook::setStrictChecking (true);
        }
        else
        {
            cout << "MamdaOrderBook strict checking is off" << endl;
            MamdaOrderBook::setStrictChecking (false);
        }

        // Get and initialize the dictionary
        if(dictFile)
        {
            MamaDictionary* dict =new MamaDictionary;
            dict->populateFromFile(dictFile);
            MamdaCommonFields::setDictionary    (*dict);
            MamdaOrderBookFields::setDictionary (*dict);
        }
        else
        {
            dictRequester.requestDictionary     (cmdLine.getDictSource());
            MamdaCommonFields::setDictionary    (*dictRequester.getDictionary());
            MamdaOrderBookFields::setDictionary (*dictRequester.getDictionary ());
        }
        const char* symbolMapFile = cmdLine.getSymbolMapFile ();
        if (symbolMapFile)
        {
            MamaSymbolMapFile* aMap = new MamaSymbolMapFile;
            if (MAMA_STATUS_OK == aMap->load (symbolMapFile))
            {
                source->getTransport()->setSymbolMap (aMap);
            }
        }
        
        for (vector<const char*>::const_iterator i = symbolList.begin ();
            i != symbolList.end ();
            ++i)
        {
            const char* symbol = *i;
            MamdaSubscription*      aSubscription = new MamdaSubscription;
            MamdaOrderBookListener* aBookListener = new MamdaOrderBookListener;
            aSubscription->addMsgListener         (aBookListener);
            aBookListener->setProcessMarketOrders (processMarketOrders);
            aBookListener->setProcessEntries      (processEntries);

            BookTicker* aTicker = new BookTicker;

            aBookListener->addHandler         (aTicker);
            aSubscription->addQualityListener (aTicker);
            aSubscription->addErrorListener   (aTicker);

            aTicker->setShowEntries      (processEntries);
            aTicker->setShowMarketOrders (processMarketOrders);
            aTicker->setShowDeltas       (showDeltas);
            aTicker->setPrecision        (precision);
            
            aSubscription->setType (MAMA_SUBSC_TYPE_BOOK);
            aSubscription->setMdDataType (MAMA_MD_DATA_TYPE_ORDER_BOOK);
            
            aSubscription->create (queues.getNextQueue(), source, symbol);
        }

        Mama::start (bridge);
    }
    catch (MamaStatus &e)
    {  
        // This exception can be thrown from Mama.open ()
        // Mama::createTransport (transportName) and from
        // MamdaSubscription constructor when entitlements is enabled.
        cerr << "MamaStatus exception in main (): " << e.toString () << endl;
        exit (1);
    }
    catch (std::exception &ex)
    {
        cerr << "Exception in main (): " << ex.what () << endl;
        exit (1);
    }
    catch (...)
    {
        cerr << "Unknown Exception in main ()." << endl;
        exit (1);
    }

    exit (1);
}
コード例 #5
0
int main(int argc, const char** argv)
{
    //MamaQueue* mDefaultQueue = NULL;

    const char* symbol = "";
    const char* source = "";
    const char* middleware = "";
    const char* transportname = "";
    const char* output_filename = "";
    const char* symbol_filename = "";
    GzFileHandler* gzfh = NULL;
    set<string> all_symbols;

    int i = 1;

    for (i = 1; i < argc;)
    {
        if (strcmp (argv[i], "-S") == 0)
        {
            source = argv[i + 1];
            i += 2;
        }
        else if (strcmp (argv[i], "-tport") == 0)
        {
            transportname = argv[i + 1];
            i += 2;
        }
        else if (strcmp (argv[i], "-f") == 0)
        {
            char sbuf[128];
            symbol_filename = argv[i + 1];
            i += 2;
            FILE *sfile = fopen(symbol_filename, "r");
            while(fgets(sbuf, 128, sfile) != NULL)
            {
                char* nl_find = strchr(sbuf, '\n');
                if(nl_find != NULL)
                    *nl_find = '\0';
                string str = sbuf;
                all_symbols.insert(sbuf);
            }
        }
        else if (strcmp (argv[i], "-s") == 0)
        {
            symbol = argv[i + 1];
            i += 2;
            all_symbols.insert(symbol);
        }
        else if (strcmp (argv[i], "-m") == 0)
        {
            middleware = argv[i + 1];
            i += 2;
        }
        else if (strcmp (argv[i], "-o") == 0)
        {
            output_filename = argv[i + 1];
            i += 2;
        }
    }

    gzfh = new GzFileHandler(output_filename, GZ_FILE_HANDLER_WRITE);
    t_rmsc = new RecordingMamaSubscriptionCallback(gzfh);
    int number_threads = 1;

    // Load all required bridges at this point
    mBridgeImpl = Mama::loadBridge (middleware);

    // Open up the MAMA api
    Mama::open ();

    Mama::enableLogging (MAMA_LOG_LEVEL_NORMAL, stderr);
    MamaQueue* mDefaultQueue = Mama::getDefaultEventQueue (mBridgeImpl);
    transport = new MamaTransport;
    transport->create(transportname, mBridgeImpl);
    set<string>::iterator it;
    MamaSource* mDictSource = new MamaSource ("WOMBAT", transport, "WOMBAT");

    DictionaryCallback cb (mBridgeImpl);
    MamaDictionary* mDictionary = new MamaDictionary;
    mDictionary->create (mDefaultQueue, &cb, mDictSource, 3, 10);
    Mama::start (mBridgeImpl);
    printf("Writing Dictionary...\n");
    mDictionary->writeToFile("/home/frank/wush/fquinn/openmamacapture/data.dict");
    mQueueGroup = new MamaQueueGroup (number_threads, mBridgeImpl);

    for(it = all_symbols.begin(); it != all_symbols.end(); it++)
    {
        printf("Setting up MAMA Subscription for %s\n", (*it).c_str());
        MamaSubscription* sub = new MamaSubscription;
        mVectorMamaSubscription.push_back(sub);
        sub->create (transport, mQueueGroup->getNextQueue (), (RecordingMamaSubscriptionCallback*)t_rmsc,
                 source, (*it).c_str(), NULL);
    }
    signal(SIGINT, cleanup);
    printf("Starting...\n");
    Mama::start(mBridgeImpl);
}
コード例 #6
0
int main (int argc, const char **argv)
{
    setbuf (stdout, NULL);
    try
    {
        BookPublisher* mBookPublisher = new BookPublisher;
        CommonCommandLineParser     cmdLine (argc, argv);
          
        // Initialise the MAMA API
        mamaBridge bridge = cmdLine.getBridge();
       
        Mama::open ();
        
        const char* symbol      = cmdLine.getOptString("s");          
        const char* partId      = cmdLine.getOptString("p");          
        const char* pubSource   = cmdLine.getOptString("SP");
        const char* dictFile    = cmdLine.getOptString("use_dict_file");
        MamaSource* source      = cmdLine.getSource();
        mBookPublisher->mPublishRecaps = cmdLine.getPublishRecaps();
        
        MamaQueueGroup   queues (cmdLine.getNumThreads(), bridge);
        mBookPublisher->setQueueGroup (&queues);;
        
        mBookPublisher->setProcessEntries (cmdLine.getOptBool ('e'));
        mBookPublisher->createPublisherTransport (bridge);
        mBookPublisher->createPublisherManager (pubSource, bridge);

        // Get and initialize the dictionary
        if (dictFile)
        {
            MamaDictionary* dict =new MamaDictionary;
            dict->populateFromFile(dictFile);
            MamdaCommonFields::setDictionary    (*dict);
            MamdaOrderBookFields::setDictionary (*dict);
        }
        else
        {
            DictRequester    dictRequester      (bridge);
            dictRequester.requestDictionary     (cmdLine.getDictSource());
            MamdaCommonFields::setDictionary    (*dictRequester.getDictionary());
            MamdaOrderBookFields::setDictionary (*dictRequester.getDictionary());
        }
        //create publisher and also set up MamaTimer to process order and publish changes
        mBookPublisher->createTimer   (symbol, bridge);
        mBookPublisher->createMessage ();
       
        //set up new Book and enable order book publishing
        mBookPublisher->createBook (symbol, partId);          
               
        Mama::start (bridge);
    }
    catch (MamaStatus &e)
    {  
        // This exception can be thrown from Mama.open ()
        // Mama::createTransport (transportName) and from
        // MamdaSubscription constructor when entitlements is enabled.
        cerr << "MamaStatus exception in main (): " << e.toString () << endl;
        exit (1);
    }
    catch (std::exception &ex)
    {
        cerr << "Exception in main (): " << ex.what () << endl;
        exit (1);
    }
    catch (...)
    {
        cerr << "Unknown Exception in main ()." << endl;
        exit (1);
    }
    exit (1);    
}
コード例 #7
0
    void MamdaFundamentalFields::setDictionary (const MamaDictionary&  dictionary)
    {
        // already initialised
        if (initialised)
        {
            return;
        }

        // Set the Common Fields
        if (!MamdaCommonFields::isSet())
        {
            MamdaCommonFields::setDictionary (dictionary);
        }

        CORP_ACT_TYPE       = dictionary.getFieldByName ("wCorpActType");
        DIVIDEND_PRICE      = dictionary.getFieldByName ("wDividend");
        DIVIDEND_FREQ       = dictionary.getFieldByName ("wDivFreq");
        DIVIDEND_EX_DATE    = dictionary.getFieldByName ("wDivExDate");
        DIVIDEND_PAY_DATE   = dictionary.getFieldByName ("wDivPayDate");
        DIVIDEND_REC_DATE   = dictionary.getFieldByName ("wDivRecordDate");
        DIVIDEND_CURRENCY   = dictionary.getFieldByName ("wDivCurrency");
        SHARES_OUT          = dictionary.getFieldByName ("wSharesOut");
        SHARES_FLOAT        = dictionary.getFieldByName ("wSharesFloat");
        SHARES_AUTH         = dictionary.getFieldByName ("wSharesAuth");
        EARN_PER_SHARE      = dictionary.getFieldByName ("wEarnPerShare");
        VOLATILITY          = dictionary.getFieldByName ("wVolatility");
        PRICE_EARN_RATIO    = dictionary.getFieldByName ("wPeRatio");
        YIELD               = dictionary.getFieldByName ("wYield");
        MRKT_SEGM_NATIVE    = dictionary.getFieldByName ("wMarketSegmentNative");
        MRKT_SECT_NATIVE    = dictionary.getFieldByName ("wMarketSectorNative");
        MRKT_SEGMENT        = dictionary.getFieldByName ("wMarketSegment");
        MRKT_SECTOR         = dictionary.getFieldByName ("wMarketSector");
        RISK_FREE_RATE      = dictionary.getFieldByName ("wRiskFreeRate");
        HIST_VOLATILITY     = dictionary.getFieldByName ("wHistVolatility");

        theMaxFid = dictionary.getMaxFid();
        initialised = true;
    }
コード例 #8
0
    void MamdaSecStatusFields::setDictionary (const MamaDictionary&  dictionary)
    {
        // Already initialised
        if (initialised)
        {
            return;
        }

        // Set the Common Fields
        if (!MamdaCommonFields::isSet())
        {
            MamdaCommonFields::setDictionary (dictionary);
        }

        PUB_CLASS              = dictionary.getFieldByName ("wPubClass");
        REASON                 = dictionary.getFieldByName ("wReason");
        SECURITY_ACTION        = dictionary.getFieldByName ("wSecurityAction");
        SECURITY_TYPE          = dictionary.getFieldByName ("wSecurityType");
        SECURITY_STATUS        = dictionary.getFieldByName ("wSecurityStatus");
        SECURITY_STATUS_QUAL   = dictionary.getFieldByName ("wSecStatusQual");
        SECURITY_STATUS_NATIVE = dictionary.getFieldByName ("wSecurityStatusOrig");
        SECURITY_STATUS_TIME   = dictionary.getFieldByName ("wSecurityStatusTime");
        EVENT_SEQ_NUM          = dictionary.getFieldByName ("wSeqNum");
        FREE_TEXT              = dictionary.getFieldByName ("wText");
        SHORT_SALE_CIRCUIT_BREAKER = dictionary.getFieldByName("wShortSaleCircuitBreaker");
        LULDINDICATOR          = dictionary.getFieldByName ("wLuldIndicator");
        LULDTIME               = dictionary.getFieldByName ("wLuldTime");

        theMaxFid = dictionary.getMaxFid();
        initialised = true;
    }