Exemplo n.º 1
0
        void IMbtQuotesNotify.OnQuoteData(ref QUOTERECORD pRec)
        {
            SessionQuoteInformation information;
            Quote quote;

            lock (this)
            {
                if (_sessions.ContainsKey(pRec.bstrSymbol) == false)
                {
                    SystemMonitor.OperationWarning("Quote received for session not found.");
                    return;
                }

                information = _sessions[pRec.bstrSymbol];
                if (information.Quote.HasValue == false)
                {
                    information.Quote = new Quote();
                }

                quote = information.Quote.Value;
            }

            ConvertQuoteRecord(ref quote, pRec);

            lock (this)
            {
                information.Quote = quote;
            }

            if (QuoteUpdateEvent != null)
            {
                QuoteUpdateEvent(this, information);
            }
        }
Exemplo n.º 2
0
 void MBTQUOTELib.IMbtQuotesNotify.OnQuoteData(ref QUOTERECORD pQuote)
 {
     lock ( quotesLocker) {
         try {
             ProcessLevel1(ref pQuote);
         } catch (Exception ex) {
             log.Notice(ex.ToString());
         }
     }
 }
Exemplo n.º 3
0
        void ConvertQuoteRecord(ref Quote quote, QUOTERECORD pRec)
        {
            quote.Ask = (0 == pRec.dAsk) ? (decimal?)null : (decimal)pRec.dAsk;
            quote.Bid = (0 == pRec.dBid) ? (decimal?)null : (decimal)pRec.dBid;

            quote.High = (0 == pRec.dHigh) ? (decimal?)null : (decimal)pRec.dHigh;
            quote.Low  = (0 == pRec.dLow) ? (decimal?)null : (decimal)pRec.dLow;

            quote.Open   = (decimal)pRec.dOpen;
            quote.Volume = pRec.lVolume;
            quote.Time   = pRec.UTCDateTime;
        }
Exemplo n.º 4
0
        public Quote?GetSingleSymbolQuote(string symbolName, TimeSpan timeOut, out string symbolMarket)
        {
            symbolMarket = string.Empty;
            if (IsInitialized == false)
            {
                return(null);
            }

            string market = string.Empty;
            Quote? result = null;

            _messageLoopOperator.Invoke(delegate()
            {
                MbtQuotes client = _quotesClient;
                if (client == null)
                {
                    return;
                }

                QUOTERECORD record = client.GetSingleQuote(symbolName, (int)timeOut.TotalMilliseconds);
                if (string.IsNullOrEmpty(record.bstrSymbol) == false &&
                    record.bstrSymbol.ToUpper() == symbolName.ToUpper())
                {// Match found.
                    Quote quoteResult = new Quote();

                    Commission?commission = null;
                    Dictionary <string, SessionQuoteInformation> sessionsHotSwap = _sessionsHotSwap;
                    if (sessionsHotSwap.ContainsKey(record.bstrSymbol))
                    {
                        commission = sessionsHotSwap[record.bstrSymbol].Commission;
                    }

                    ConvertQuoteRecord(ref quoteResult, commission, record);
                    market = record.bstrMarket;
                    result = quoteResult;
                }
                else
                {
                    // Failed to find baseCurrency.
                    SystemMonitor.OperationWarning("Failed to find requested symbol.");
                }
            });

            if (result.HasValue)
            {
                symbolMarket = market;
            }

            return(result);
        }
Exemplo n.º 5
0
        void ConvertQuoteRecord(ref Quote quote, Commission?commission, QUOTERECORD pRec)
        {
            quote.Ask = (0 == pRec.dAsk) ? (decimal?)null : (decimal)pRec.dAsk;
            quote.Bid = (0 == pRec.dBid) ? (decimal?)null : (decimal)pRec.dBid;

            MBTradingConnectionManager manager = _manager;

            if (commission.HasValue && (manager != null && manager.Adapter != null && manager.Adapter.ApplyQuoteCommission))
            {
                commission.Value.ApplyCommissions(manager.Adapter, ref quote);
            }

            quote.High = (0 == pRec.dHigh) ? (decimal?)null : (decimal)pRec.dHigh;
            quote.Low  = (0 == pRec.dLow) ? (decimal?)null : (decimal)pRec.dLow;

            quote.Open   = (decimal)pRec.dOpen;
            quote.Volume = pRec.lVolume;
            quote.Time   = pRec.UTCDateTime;
        }
Exemplo n.º 6
0
 public void ProcessLevel1(ref QUOTERECORD pQuote)
 {
     if (trace)
     {
         log.Trace("ProcessQuote: " +
                   pQuote.bstrCompany + ", " +
                   pQuote.bstrMarket + ", " +
                   pQuote.bstrSymbol + ", " +
                   pQuote.bstrUnderlier + ", " +
                   pQuote.dAsk + ", " +
                   pQuote.dBid + ", " +
                   pQuote.dLast + ", " +
                   pQuote.dMarginMult + ", " +
                   pQuote.dStrikePrice + ", " +
                   pQuote.lAskSize + ", " +
                   pQuote.lBidSize + ", " +
                   pQuote.lContractSize + ", " +
                   pQuote.lExpMonth + ", " +
                   pQuote.lExpYear + ", " +
                   pQuote.lFlags + ", " +
                   pQuote.lLastSize + ", " +
                   pQuote.putcall + ", " +
                   pQuote.tick);
     }
     lastBid     = pQuote.dBid;
     lastAsk     = pQuote.dAsk;
     lastBidSize = pQuote.lBidSize;
     lastAskSize = pQuote.lAskSize;
     CheckSignalSync();
     if (lastBid != lastTick.Bid || lastAsk != lastTick.Ask)
     {
         CreateTick();
         if (TryAddLevel1())
         {
             SendTick();
         }
     }
 }
Exemplo n.º 7
0
 void MBTQUOTELib.IMbtQuotesNotify.OnQuoteData(ref QUOTERECORD pQuote)
 {
 }
Exemplo n.º 8
0
 /// <summary>
 /// Provides quote data but each quote has both a bid and ask. As forex does not actually have a trade in the quotes,
 /// the Response must manage how it wants to handle the bid/ask, i.e. if you're long send....
 /// pt[symbol].isLong ? k.bid : k.ask.... and opposite if you're entering
 /// </summary>
 /// <param name="pQuote"></param>
 void MBTQUOTELib.IMbtQuotesNotify.OnQuoteData(ref QUOTERECORD pQuote)
 {
     TickImpl k = new TickImpl(pQuote.bstrSymbol);
     k.time = Util.DT2FT(pQuote.UTCDateTime);
     k.date = Util.ToTLDate(DateTime.UtcNow.Date);
     k.ask = (decimal)pQuote.dAsk;
     k.bid = (decimal)pQuote.dBid;
     k.os = k.AskSize = pQuote.lAskSize;
     k.bs = k.BidSize = pQuote.lBidSize;
     k.ex = k.be = k.oe = pQuote.bstrMarket;
     SendNewTick(k);
 }
Exemplo n.º 9
0
 void MBTQUOTELib.IMbtQuotesNotify.OnQuoteData(ref QUOTERECORD pQuote)
 {
 }
Exemplo n.º 10
0
		void IMbtQuotesNotify.OnQuoteData (ref QUOTERECORD data) { 
			var bid = data.dBid.ToString();
			var ask = data.dAsk.ToString();
			var msg = bid.PadLeft(9,' ') + " / " + ask.PadLeft(9,' ');
			Console.WriteLine(msg); 
		}
        void ConvertQuoteRecord(ref Quote quote, QUOTERECORD pRec)
        {
            quote.Ask = (0 == pRec.dAsk) ? (decimal?)null : (decimal)pRec.dAsk;
            quote.Bid = (0 == pRec.dBid) ? (decimal?)null : (decimal)pRec.dBid;

            quote.High = (0 == pRec.dHigh) ? (decimal?)null : (decimal)pRec.dHigh;
            quote.Low = (0 == pRec.dLow) ? (decimal?)null : (decimal)pRec.dLow;

            quote.Open = (decimal)pRec.dOpen;
            quote.Volume = pRec.lVolume;
            quote.Time = pRec.UTCDateTime;
        }
        void IMbtQuotesNotify.OnQuoteData(ref QUOTERECORD pRec)
        {
            SessionQuoteInformation information;
            Quote quote;
            lock (this)
            {
                if (_sessions.ContainsKey(pRec.bstrSymbol) == false)
                {
                    SystemMonitor.OperationWarning("Quote received for session not found.");
                    return;
                }

                information = _sessions[pRec.bstrSymbol];
                if (information.Quote.HasValue == false)
                {
                    information.Quote = new Quote();
                }

                quote = information.Quote.Value;
            }

            ConvertQuoteRecord(ref quote, pRec);

            lock (this)
            {
                information.Quote = quote;
            }

            if (QuoteUpdateEvent != null)
            {
                QuoteUpdateEvent(this, information);
            }
        }
        void ConvertQuoteRecord(ref Quote quote, Commission? commission, QUOTERECORD pRec)
        {
            quote.Ask = (0 == pRec.dAsk) ? (decimal?)null : (decimal)pRec.dAsk;
            quote.Bid = (0 == pRec.dBid) ? (decimal?)null : (decimal)pRec.dBid;

            MBTradingConnectionManager manager = _manager;
            if (commission.HasValue && (manager != null && manager.Adapter != null && manager.Adapter.ApplyQuoteCommission))
            {
                commission.Value.ApplyCommissions(manager.Adapter, ref quote);
            }

            quote.High = (0 == pRec.dHigh) ? (decimal?)null : (decimal)pRec.dHigh;
            quote.Low = (0 == pRec.dLow) ? (decimal?)null : (decimal)pRec.dLow;

            quote.Open = (decimal)pRec.dOpen;
            quote.Volume = pRec.lVolume;
            quote.Time = pRec.UTCDateTime;
        }