Exemple #1
0
        }//StoreOrder()

        //
        //
        //
        #endregion // order update handlers


        #region Private Methods
        // *****************************************************************
        // ****                     Private Methods                     ****
        // *****************************************************************
        //
        //
        //
        //
        // *****************************************************
        // ****             Try Create New Book()           ****
        // *****************************************************
        private bool TryCreateNewBook(TT.InstrumentKey ttKey, out OrderBookTT book)
        {
            book = null;
            InstrumentName name;

            TT.InstrumentDetails details;
            if (m_Market.TryLookupInstrument(ttKey, out name) && m_Market.TryLookupInstrumentDetails(name, out details))
            {                                       // Market knows this instrument already.
                Log.BeginEntry(LogLevel.Minor, "TryCreateNewBook: Creating book.");
                book = new OrderBookTT(this, name); // Create book.
                double minTickSize = Convert.ToDouble(details.TickSize.Numerator) / Convert.ToDouble(details.TickSize.Denominator);
                book.MinimumPriceTick = minTickSize;
                if (m_Books.TryAdd(book.m_InstrumentName, book))
                {
                    m_TTKey2Name.TryAdd(ttKey, book.m_InstrumentName);

                    Log.AppendEntry(" New book created {0}.", book);
                    Log.EndEntry();
                    return(true);
                }
                else
                {
                    Log.AppendEntry(" Failed to add book to Books.");
                    Log.EndEntry();
                    return(false);
                }
            }
            else
            {                                       // Market doesnt know this instrument yet.
                Log.NewEntry(LogLevel.Minor, "TryCreateNewBook: Market instrument unknown.  Requesting details from market for {0}.", TTConvert.ToString(ttKey));
                m_Market.RequestInstruments(ttKey); // request to look it up.
                return(false);
            }
        }//TryCreateNewBook()
Exemple #2
0
        //
        //
        // ****                 Store Order()               ****
        //
        private void StoreTTEvent(EventArgs ttEVentArgs, TT.InstrumentKey ttKey)
        {
            ConcurrentQueue <EventArgs> eventQueue;

            if (m_TTEventsToProcess.TryGetValue(ttKey, out eventQueue))
            {
                eventQueue.Enqueue(ttEVentArgs);
            }
            else if (m_TTEventsToProcess.TryAdd(ttKey, new ConcurrentQueue <EventArgs>()) && m_TTEventsToProcess.TryGetValue(ttKey, out eventQueue))
            {
                eventQueue.Enqueue(ttEVentArgs);
                OrderHubRequest request = new OrderHubRequest(OrderHubRequest.RequestType.RequestCreateFillBook);
                request.Data = new object[] { ttKey };
                this.HubEventEnqueue(request);
            }
            else
            {   // TODO: Check whether perhaps we can fail while the orderbook is being created.
                Log.NewEntry(LogLevel.Warning, "Listener_OrderAdded: Failed to store order in OrdersToProcess list.");
            }
        }//StoreOrder()
Exemple #3
0
        }     //HubEventHandler()

        //

        //
        //
        // *****************************************************
        // ****             Process Request()               ****
        // *****************************************************
        private void ProcessRequest(OrderHubRequest eventArg)
        {
            Log.NewEntry(LogLevel.Minor, "ProcessRequest: {0}", eventArg);
            switch (eventArg.Request)
            {
            case OrderHubRequest.RequestType.RequestConnect:
                // We automatically connect to the TT Api once we get the call back from it.
                break;

            case OrderHubRequest.RequestType.RequestCreateFillBook:
                if (eventArg.Data[0] is TT.InstrumentKey)
                {
                    TT.InstrumentKey ttKey = (TT.InstrumentKey)eventArg.Data[0];
                    InstrumentName   name;
                    if (m_TTKey2Name.TryGetValue(ttKey, out name) && m_Books.ContainsKey(name))
                    {
                        Log.NewEntry(LogLevel.Minor, "ProcessRequest: Already have book for {1}. Ignoring {0}.", eventArg, name);
                    }
                    else
                    {
                        OrderBookTT book;
                        if (TryCreateNewBook(ttKey, out book))
                        {
                            Log.NewEntry(LogLevel.Minor, "ProcessRequest: Create book succeeded {0}.", book);
                            OrderBookEventArgs outgoingEventArg = new OrderBookEventArgs(this, book.m_InstrumentName, OrderBookEventArgs.EventTypes.CreatedBook);
                            OnBookCreated(outgoingEventArg);    // TODO: Load additional information needed for new book creation.
                            // Push out waiting events.
                            ConcurrentQueue <EventArgs> waitingTTOrders;
                            while (m_TTEventsToProcess.TryRemove(ttKey, out waitingTTOrders))             // this should only execute once, but if new orders are added concurrently could execute more!
                            {
                                EventArgs eventArg1;
                                while (waitingTTOrders.Count > 0)
                                {
                                    if (waitingTTOrders.TryDequeue(out eventArg1))
                                    {
                                        this.HubEventEnqueue(eventArg1);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                        else
                        {
                            Log.NewEntry(LogLevel.Minor, "ProcessRequest: Create book failed. Will try again.");
                            m_WaitingRequests.Enqueue(eventArg);                        // Store this request
                        }
                    }
                }
                break;

            case OrderHubRequest.RequestType.RequestShutdown:
                if (m_OrderListener != null)
                {
                    m_OrderListener.Dispose();
                    m_OrderListener = null;
                }
                base.Stop();
                break;

            default:
                break;
            } // switch request
        }     //ProcessRequest()