static void CQG_var_InstrumentChanged(CQGInstrument cqgInstrument, CQGQuotes cqgQuotes, 
                                              CQGInstrumentProperties cqgInstrumentProperties)
        {
            double qtIndicativeOpen = -1;
                double qtSettlement = -1;
                double qtMarker = -1;
                double qtTodayMarker = -1;
                //var dailyValueModel=new DailyValueModel();
              // var prop=cqgInstrument.Properties[ep]
                var quote = cqgInstrument.Quotes[eQuoteType.qtIndicativeOpen];
                if (quote != null && quote.IsValid)
                    qtIndicativeOpen = quote.Price;
                quote = cqgInstrument.Quotes[eQuoteType.qtSettlement];
                if (quote != null && quote.IsValid)
                    qtSettlement = quote.Price;
                quote = cqgInstrument.Quotes[eQuoteType.qtMarker];
                if (quote != null && quote.IsValid)
                    qtMarker = quote.Price;
                quote = cqgInstrument.Quotes[eQuoteType.qtTodayMarker];
                if (quote != null && quote.IsValid)
                    qtTodayMarker = quote.Price;

                ClientDatabaseManager.AddDailyValue(qtIndicativeOpen, qtMarker, qtSettlement, qtTodayMarker, cqgInstrument.FullName, DateTime.Today,cqgInstrument.ExpirationDate);
            _cqgVar.RemoveInstrument(cqgInstrument);
            SubscribedSymbol.Remove(cqgInstrument.FullName);

            //To DB
        }
 public static String InsertData(String TableName,CQGInstrument instrument,int depth,uint groupID,bool isNew)
 {
     String symbol = instrument.FullName;
     String query = "INSERT INTO `" + TableName + "`";
     query += "(`symbol`,`depth`,`DOMBid`,`DOMAsk`,`DOMBidVol`,`DOMAskVol`,`Trade`,`TradeVol`,`IsNewTrade`,`ts`,GroupID)";
     String runQuery = "";
     int BalancedDepth = (instrument.DOMAsks.Count < instrument.DOMBids.Count)
                             ? instrument.DOMAsks.Count
                             : instrument.DOMBids.Count;
     for (int index = 0; ((index < BalancedDepth) && (index < depth)); index++)
     {
         //query += "(`symbol`,`depth`,`DOMBid`,`DOMAsk`,`DOMBidVol`,`DOMAskVol`,`Trade`,`TradeVol`,`ts`)";
         CQGQuote DOMAsk = instrument.DOMAsks[index];
         CQGQuote DOMBid = instrument.DOMBids[index];
         runQuery += query + " VALUES('" + symbol + "'," + Convert.ToString(index+1) + ",";
         runQuery += DOMBid.Price.ToString("G", CultureInfo.InvariantCulture) + ",";
         runQuery += DOMAsk.Price.ToString("G", CultureInfo.InvariantCulture) + ",";
         runQuery += DOMBid.Volume.ToString("G", CultureInfo.InvariantCulture) + ",";
         runQuery += DOMAsk.Volume.ToString("G", CultureInfo.InvariantCulture) + ",";
         runQuery += instrument.Trade.Price.ToString("G", CultureInfo.InvariantCulture) + ",";
         runQuery += instrument.Trade.Volume.ToString("G", CultureInfo.InvariantCulture) + ",";
         runQuery += "" + isNew + ",";
         runQuery += "'" + instrument.Timestamp.ToString("yyyy-MM-dd hh:mm:ss fff") + "',";
         runQuery += Convert.ToString(groupID) + ");";
     }
     //instrument.
     return runQuery;
 }
Beispiel #3
0
        private static void _cel_InstrumentSubscribed(string symbol, CQGInstrument cqgInstrument)
        {
            _FullNameSYmbol = cqgInstrument.FullName;
            SubscribedSymbol.Add(symbol);

            // foreach (var symbol in symbols)
            {
                // CQGInstrument instrument = _cqgVar.Instruments[symbol];
                CQGInstrumentProperties props = cqgInstrument.Properties;
                double   tickSize             = -1;
                double   tickValue            = -1;
                string   curency    = " ";
                DateTime expiration = DateTime.Today;
                var      properties = props[eInstrumentProperty.ipTickSize];
                if (props != null && _cqgVar.IsValid(properties.Value))
                {
                    tickSize = properties.Value;
                }
                properties = props[eInstrumentProperty.ipCurrency];
                if (props != null && _cqgVar.IsValid(properties.Value))
                {
                    curency = properties.Value;
                }
                // properties = props[eInstrumentProperty.ipExpirationDate];
                // if (props != null && _cqgVar.IsValid(properties.Value))
                //    expiration = properties.Value;
                properties = props[eInstrumentProperty.ipTickValue];
                if (props != null && _cqgVar.IsValid(properties.Value))
                {
                    tickValue = properties.Value;
                }

                ClientDatabaseManager.AddNotChangedValue(symbol, tickSize, curency, tickValue);
            }
        }
		private void SessionOnInstrumentSubscribed(string symbol, CQGInstrument cqgInstrument)
		{
			_instruments[symbol] = cqgInstrument;

			OptionTypes? optionType = null;

			if (cqgInstrument.InstrumentType == eInstrumentType.itOptionCall)
				optionType = OptionTypes.Call;
			else if (cqgInstrument.InstrumentType == eInstrumentType.itOptionPut)
				optionType = OptionTypes.Put;

			SendOutMessage(new SecurityMessage
			{
				SecurityId = new SecurityId
				{
					SecurityCode = cqgInstrument.Commodity,
					BoardCode = cqgInstrument.ExchangeAbbreviation,
					Native = cqgInstrument.InstrumentID,
				},
				Currency = cqgInstrument.Currency.To<CurrencyTypes>(),
				Name = cqgInstrument.FullName,
				ExpiryDate = cqgInstrument.ExpirationDate.ApplyTimeZone(TimeHelper.Est),
				SecurityType = cqgInstrument.InstrumentType.ToStockSharp(),
				Strike = cqgInstrument.Strike,
				UnderlyingSecurityCode = cqgInstrument.UnderlyingInstrumentName,
				OptionType = optionType,
				PriceStep = (decimal)cqgInstrument.TickSize,
				Decimals = cqgInstrument.Scale
			});

			SendLevel1Message(cqgInstrument);
		}
        private void SessionOnInstrumentSubscribed(string symbol, CQGInstrument cqgInstrument)
        {
            SessionHolder.Instruments[symbol] = cqgInstrument;

            OptionTypes?optionType = null;

            if (cqgInstrument.InstrumentType == eInstrumentType.itOptionCall)
            {
                optionType = OptionTypes.Call;
            }
            else if (cqgInstrument.InstrumentType == eInstrumentType.itOptionPut)
            {
                optionType = OptionTypes.Put;
            }

            SendOutMessage(new SecurityMessage
            {
                SecurityId = new SecurityId
                {
                    SecurityCode = cqgInstrument.Commodity,
                    BoardCode    = cqgInstrument.ExchangeAbbreviation,
                    Native       = cqgInstrument.InstrumentID,
                },
                Currency               = cqgInstrument.Currency.To <CurrencyTypes>(),
                Name                   = cqgInstrument.FullName,
                ExpiryDate             = cqgInstrument.ExpirationDate.ApplyTimeZone(TimeHelper.Est),
                SecurityType           = cqgInstrument.InstrumentType.ToStockSharp(),
                Strike                 = cqgInstrument.Strike,
                UnderlyingSecurityCode = cqgInstrument.UnderlyingInstrumentName,
                OptionType             = optionType,
            });

            SendLevel1Message(cqgInstrument);
        }
Beispiel #6
0
        public static String InsertData_dom(String tableName, CQGInstrument instrument, int depth, uint groupID, bool isNew, string userName, out double askPrice, out int askVol, out double bidPrice, out int bidVol, DateTime serverTime)
        {
            var newTable = "DM_" + tableName.Substring(3, tableName.Length - 3).ToUpper();

            String symbol = instrument.FullName;
            String query  = "INSERT IGNORE INTO `" + newTable + "`";

            query += "(`Symbol`,`Depth`,`DOMBid`,`DOMAsk`,`DOMBidVol`,`DOMAskVol`,`Trade`,`TradeVol`,`Time`, `TimeLocal`,GroupID, UserName)";
            String runQuery      = "";
            int    balancedDepth = (instrument.DOMAsks.Count < instrument.DOMBids.Count)
                                    ? instrument.DOMAsks.Count
                                    : instrument.DOMBids.Count;

            askPrice = 0;
            askVol   = 0;
            bidPrice = 0;
            bidVol   = 0;
            for (int index = 0; ((index < balancedDepth) && (index < depth)); index++)
            {
                //query += "(`symbol`,`depth`,`DOMBid`,`DOMAsk`,`DOMBidVol`,`DOMAskVol`,`Trade`,`TradeVol`,`ts`)";
                CQGQuote domAsk = instrument.DOMAsks[index];
                CQGQuote domBid = instrument.DOMBids[index];

                runQuery += query + " VALUES('" + symbol + "'," + Convert.ToString(index + 1) + ",";
                runQuery += domBid.Price.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += domAsk.Price.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += domBid.Volume.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += domAsk.Volume.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += instrument.Trade.Price.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += instrument.Trade.Volume.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += "'" + serverTime.ToString("yyyy/MM/dd H:mm:ss.fff", CultureInfo.InvariantCulture) + "',";
                runQuery += "'" + DateTime.Now.ToString("yyyy/MM/dd H:mm:ss.fff", CultureInfo.InvariantCulture) + "',";
                runQuery += Convert.ToString(groupID) + ",";
                runQuery += "'" + userName + "');";

                if (index == 0)
                {
                    askPrice = domAsk.Price;
                    askVol   = domAsk.Volume;
                    bidPrice = domBid.Price;
                    bidVol   = domBid.Volume;
                }
            }
            //instrument.
            return(runQuery);
        }
Beispiel #7
0
        static void _cel_InstrumentSubscribed(string symbol, CQGInstrument cqgInstrument)
        {
            if (_symbolsInProgress.Exists(oo => oo.Name == symbol))
            {
                var item = _symbolsInProgress.Find(oo => oo.Name == symbol);
                item.Description   = "Subscribed.";
                item.CqgInstrument = cqgInstrument;
                item.TickData      = new TickData(ClientDatabaseManager.GetTableTsName(symbol), symbol);
                item.DomData       = new DomDataModel(ClientDatabaseManager.GetTableTsName(symbol), symbol);

                ClientDatabaseManager.CreateLiveTableTs(symbol);
                ClientDatabaseManager.CreateLiveTableDm(symbol);

                OnSymbolSubscribed(item.Name, item.Depth);
                RefreshSubscribedSymbolOnUi();
            }
        }
        //private CQGInstrument Instrument = new CQGInstrument();
        /// <summary>
        /// This event is fired when a new instrument is resolved and subscribed.
        /// </summary>
        /// <param name="symbol">
        /// The commodity symbol that was requested by the user in the NewInstrument method.
        /// </param>
        /// <param name="Instrument">
        /// The resolved CQGInstrument object.
        /// </param>
        public void CEL_InstrumentSubscribed(string symbol, CQGInstrument instrument)
        {
            string p = instrument.FullName.ToString();  //.DOMAsks.ToString();

            MessageBox.Show(p );

            //if (m_InitializingCEL || instrument == null) return;

            //try
            //{
            //    if (m_reSubcriptionCount > 0)
            //    {
            //        m_reSubcriptionCount--;
            //        Debug.WriteLine("m_reSubcriptionCount: " + symbol);
            //        if (m_reSubcriptionCount == 0)
            //        {
            //            SetSubscriptionLevel();
            //        }
            //        return;
            //    }

            //    int index = lstInstruments.Items.IndexOf(instrument.FullName);
            //    if (index == -1)
            //    {
            //        lstInstruments.Items.Add(instrument.FullName);
            //        //Changing the selection triggers a call to DisplayQuotesAndDynamicProperties
            //        lstInstruments.SelectedIndex = lstInstruments.Items.Count - 1;
            //    }
            //    else
            //    {
            //        lstInstruments.SelectedIndex = index;
            //    }

            //    btnSubscribe.Enabled = false;
            //    txtSymbol.Text = "";
            //    txtSymbol.Focus();

            //    SetSubscriptionLevel();
            //}
            //catch (Exception ex)
            //{
            //    ErrorHandler.HandleError("frmInstrumentProperties", "CEL_InstrumentSubscribed -" + symbol, ex);
            //}
        }
Beispiel #9
0
        static void _cel_InstrumentSubscribed(string symbol, CQGInstrument cqgInstrument)
        {
            //Check expired date
            DateTime d = cqgInstrument.ExpirationDate;

            Console.WriteLine("Symbol: '" + symbol + "' will be expired:" + d.ToShortDateString());

            if ((d - DateTime.Now).TotalHours < (Settings.Default.DaysToExpiration * 24))
            {
                if (!Settings.Default.EmailedSymbols.Contains(symbol))
                {
                    OnSendReport("Symbol: '" + symbol + "' will expired soon", "Hello. \n The symbol: '" + symbol + "' will be expired on less then " + Settings.Default.DaysToExpiration + " days. \nExpiration date: " + d.ToShortDateString() + "\n\nGood luck");
                    Settings.Default.EmailedSymbols += symbol;
                }
            }
            //Month
            MonthCharYearModel variable = new MonthCharYearModel();

            variable.MonthChar = "def";
            variable.Year      = "def";
            foreach (var monthCharYearModel in monthCharYearlList)
            {
                if (monthCharYearModel.Symbol == symbol)
                {
                    return;
                }
            }
            CQGInstrumentProperties props = cqgInstrument.Properties;
            var properties = props[eInstrumentProperty.ipMonthChar];

            if (props != null && Cel.IsValid(properties.Value))
            {
                variable.MonthChar = properties.Value.ToString();
            }
            properties = props[eInstrumentProperty.ipYear];
            if (props != null && Cel.IsValid(properties.Value))
            {
                variable.Year = properties.Value.ToString();
            }
            variable.Symbol = symbol;
            monthCharYearlList.Add(variable);
            Cel.RemoveInstrument(cqgInstrument);
        }
Beispiel #10
0
        static void CQG_var_InstrumentChanged(CQGInstrument cqgInstrument, CQGQuotes cqgQuotes, CQGInstrumentProperties cqgInstrumentProperties)
        {
            double qtIndicativeOpen = -1;
                double qtSettlement = -1;
                double qtMarker = -1;
                double qtTodayMarker = -1;
                //var dailyValueModel=new DailyValueModel();

                var quote = cqgInstrument.Quotes[eQuoteType.qtIndicativeOpen];
                if (quote != null && quote.IsValid) qtIndicativeOpen = quote.Price;
                quote = cqgInstrument.Quotes[eQuoteType.qtSettlement];
                if (quote != null && quote.IsValid) qtSettlement = quote.Price;
                quote = cqgInstrument.Quotes[eQuoteType.qtMarker];
                if (quote != null && quote.IsValid) qtMarker = quote.Price;
                quote = cqgInstrument.Quotes[eQuoteType.qtTodayMarker];
                if (quote != null && quote.IsValid) qtTodayMarker = quote.Price;

                DatabaseManager.AddDailyValue(qtIndicativeOpen, qtMarker, qtSettlement, qtTodayMarker, _SymbolNow, DateTime.Today);

            //To DB
        }
Beispiel #11
0
        static void CQG_var_InstrumentChanged(CQGInstrument cqgInstrument, CQGQuotes cqgQuotes,
                                              CQGInstrumentProperties cqgInstrumentProperties)
        {
            double qtIndicativeOpen = -1;
            double qtSettlement     = -1;
            double qtMarker         = -1;
            double qtTodayMarker    = -1;
            //var dailyValueModel=new DailyValueModel();
            // var prop=cqgInstrument.Properties[ep]
            var quote = cqgInstrument.Quotes[eQuoteType.qtIndicativeOpen];

            if (quote != null && quote.IsValid)
            {
                qtIndicativeOpen = quote.Price;
            }
            quote = cqgInstrument.Quotes[eQuoteType.qtSettlement];
            if (quote != null && quote.IsValid)
            {
                qtSettlement = quote.Price;
            }
            quote = cqgInstrument.Quotes[eQuoteType.qtMarker];
            if (quote != null && quote.IsValid)
            {
                qtMarker = quote.Price;
            }
            quote = cqgInstrument.Quotes[eQuoteType.qtTodayMarker];
            if (quote != null && quote.IsValid)
            {
                qtTodayMarker = quote.Price;
            }


            ClientDatabaseManager.AddDailyValue(qtIndicativeOpen, qtMarker, qtSettlement, qtTodayMarker, cqgInstrument.FullName, DateTime.Today, cqgInstrument.ExpirationDate);
            _cqgVar.RemoveInstrument(cqgInstrument);
            SubscribedSymbol.Remove(cqgInstrument.FullName);


            //To DB
        }
        private void SessionOnInstrumentDomChanged(CQGInstrument cqgInstrument, CQGDOMQuotes prevAsks, CQGDOMQuotes prevBids)
        {
            SendOutMessage(new QuoteChangeMessage
            {
                SecurityId = new SecurityId
                {
                    SecurityCode = cqgInstrument.Commodity,
                    BoardCode    = cqgInstrument.ExchangeAbbreviation,
                },

                ServerTime = cqgInstrument.ServerTimestamp.ApplyTimeZone(TimeHelper.Est),

                Bids = cqgInstrument.DOMBids
                       .Cast <CQGQuote>()
                       .Where(q => q.IsValid)
                       .Select(q => new QuoteChange(Sides.Buy, (decimal)q.Price, q.HasVolume ? q.Volume : 0)),

                Asks = cqgInstrument.DOMAsks
                       .Cast <CQGQuote>()
                       .Where(q => q.IsValid)
                       .Select(q => new QuoteChange(Sides.Sell, (decimal)q.Price, q.HasVolume ? q.Volume : 0)),
            });
        }
		private void SessionOnInstrumentDomChanged(CQGInstrument cqgInstrument, CQGDOMQuotes prevAsks, CQGDOMQuotes prevBids)
		{
			SendOutMessage(new QuoteChangeMessage
			{
				SecurityId = new SecurityId
				{
					SecurityCode = cqgInstrument.Commodity,
					BoardCode = cqgInstrument.ExchangeAbbreviation,
				},

				ServerTime = cqgInstrument.ServerTimestamp.ApplyTimeZone(TimeHelper.Est),

				Bids = cqgInstrument.DOMBids
							.Cast<CQGQuote>()
							.Where(q => q.IsValid)
							.Select(q => new QuoteChange(Sides.Buy, (decimal)q.Price, q.HasVolume ? q.Volume : 0)),
				
				Asks = cqgInstrument.DOMAsks
							.Cast<CQGQuote>()
							.Where(q => q.IsValid)
							.Select(q => new QuoteChange(Sides.Sell, (decimal)q.Price, q.HasVolume ? q.Volume : 0)),
			});
		}
Beispiel #14
0
        static void CQG_var_InstrumentChanged(CQGInstrument cqgInstrument, CQGQuotes cqgQuotes, CQGInstrumentProperties cqgInstrumentProperties)
        {
            double qtIndicativeOpen = -1;
            double qtSettlement     = -1;
            double qtMarker         = -1;
            double qtTodayMarker    = -1;
            //var dailyValueModel=new DailyValueModel();

            var quote = cqgInstrument.Quotes[eQuoteType.qtIndicativeOpen];

            if (quote != null && quote.IsValid)
            {
                qtIndicativeOpen = quote.Price;
            }
            quote = cqgInstrument.Quotes[eQuoteType.qtSettlement];
            if (quote != null && quote.IsValid)
            {
                qtSettlement = quote.Price;
            }
            quote = cqgInstrument.Quotes[eQuoteType.qtMarker];
            if (quote != null && quote.IsValid)
            {
                qtMarker = quote.Price;
            }
            quote = cqgInstrument.Quotes[eQuoteType.qtTodayMarker];
            if (quote != null && quote.IsValid)
            {
                qtTodayMarker = quote.Price;
            }


            DatabaseManager.AddDailyValue(qtIndicativeOpen, qtMarker, qtSettlement, qtTodayMarker, _SymbolNow, DateTime.Today);



            //To DB
        }
Beispiel #15
0
        /// <summary>
        /// Publish a quote from CQG
        /// </summary>
        /// <param name="instrument"></param>
        private void publishQuote(CQGInstrument instrument)
        {
            try
            {
                publishQuote(instrument.FullName, instrument);
            }
            catch (Exception myE)
            {

            }
        }
Beispiel #16
0
        private List<KaiTrade.Interfaces.IDOMSlot> ProcessDOM(CQGInstrument instrument, CQGDOMQuotes prev_asks, CQGDOMQuotes prev_bids)
        {
            List<KaiTrade.Interfaces.IDOMSlot> domSlots = new List<KaiTrade.Interfaces.IDOMSlot>();
            try
            {
                decimal? price;
                decimal? vol;
                CQGQuote bidQt;
                CQGQuote askQt;
                CQGQuote prevBidQt;
                CQGQuote prevAskQt;

                int prevBidQtIndex = 0;
                int prevAskQtIndex = 0;
                int qtBidIndex = 0;
                int qtAskIndex = 0;

                //dumpDOMUpdate(instrument, prev_asks, prev_bids);

                while ((qtBidIndex < instrument.DOMBids.Count) || (qtAskIndex < instrument.DOMAsks.Count))
                {
                    bidQt = instrument.DOMBids[9 - qtBidIndex];
                    askQt = instrument.DOMAsks[qtAskIndex];
                    prevBidQt = prev_bids[9 - prevBidQtIndex];
                    prevAskQt = prev_asks[prevBidQtIndex];
                    if (qtBidIndex < instrument.DOMAsks.Count)
                    {
                        // start at bottom of current bids
                        if (bidQt.Price < prevBidQt.Price)
                        {
                            // prices have dropped
                            //  ADD SLOT with BidZ = sz AskSz =null
                            domSlots.Add(new K2DataObjects.DOMSlot((decimal)bidQt.Price, (decimal)bidQt.Volume, null));
                            qtBidIndex++;
                        }
                        if (bidQt.Price == prevBidQt.Price)
                        {
                            // same price so just replace
                            if (bidQt.Volume != prevBidQt.Volume)
                            {
                                domSlots.Add(new K2DataObjects.DOMSlot((decimal)bidQt.Price, (decimal)bidQt.Volume, null));

                            }
                            prevBidQtIndex++;
                            qtBidIndex++;
                        }
                        if (bidQt.Price > prevBidQt.Price)
                        {
                            // prices moved up
                            if (prevBidQtIndex < prev_bids.Count)
                            {
                                domSlots.Add(new K2DataObjects.DOMSlot((decimal)prevBidQt.Price, null, null));
                                prevBidQtIndex++;
                            }
                            else
                            {
                                domSlots.Add(new K2DataObjects.DOMSlot((decimal)bidQt.Price, (decimal)bidQt.Volume, null));
                                qtBidIndex++;
                            }
                        }
                    }
                    else
                    {
                        // do the asks
                        if (askQt.Price < prevAskQt.Price)
                        {
                            // prices have dropped
                            domSlots.Add(new K2DataObjects.DOMSlot((decimal)askQt.Price, null, (decimal)askQt.Volume));
                            qtAskIndex++;
                        }
                        if (askQt.Price == prevAskQt.Price)
                        {
                            // same price so just replace
                            if (askQt.Volume != prevAskQt.Volume)
                            {
                                domSlots.Add(new K2DataObjects.DOMSlot((decimal)askQt.Price, null, (decimal)askQt.Volume));

                            }
                            prevAskQtIndex++;
                            qtAskIndex++;
                        }
                        if (askQt.Price > prevAskQt.Price)
                        {
                            // prices moved up
                            if (prevAskQtIndex < prev_asks.Count)
                            {
                                // this slot would have been done in the bid processing
                                //domSlots[slotIndex++] = new K2DataObjects.DOMSlot((decimal)prevAskQt.Price, null, null);
                                prevAskQtIndex++;
                            }
                            else
                            {
                                domSlots.Add(new K2DataObjects.DOMSlot((decimal)askQt.Price, null, (decimal)askQt.Volume));
                                qtAskIndex++;
                            }
                        }
                    }
                }
            }
            catch
            {
            }

            return domSlots;
        }
Beispiel #17
0
        private List<KaiTrade.Interfaces.IDOMSlot> ProcessDOMasImage(CQGInstrument instrument, CQGDOMQuotes prev_asks, CQGDOMQuotes prev_bids)
        {
            List<KaiTrade.Interfaces.IDOMSlot> domSlots = new List<KaiTrade.Interfaces.IDOMSlot>();
            try
            {

                CQGQuote bidQt;
                CQGQuote askQt;
                int qtBidIndex = instrument.DOMBids.Count - 1;
                int qtAskIndex = 0;
                while (qtBidIndex >= 0)
                {
                    bidQt = instrument.DOMBids[qtBidIndex--];
                    domSlots.Add(new K2DataObjects.DOMSlot((decimal)bidQt.Price, (decimal)bidQt.Volume, null));
                }
                while (qtAskIndex < instrument.DOMAsks.Count)
                {
                    askQt = instrument.DOMAsks[qtAskIndex++];
                    domSlots.Add(new K2DataObjects.DOMSlot((decimal)askQt.Price, null, (decimal)askQt.Volume));
                }

            }
            catch
            {
            }

            return domSlots;
        }
Beispiel #18
0
        /// <summary>
        /// publish a quote for the given mnemonic
        /// </summary>
        /// <param name="myMnemonic">mnemonic/subject key</param>
        /// <param name="instrument">CQG instrument that has changed</param>
        private void publishTradeUpdate(string myMnemonic, CQGInstrument instrument, CQGQuote quote)
        {
            try
            {
                L1PriceSupport.PXUpdateBase pxupdate = new L1PriceSupport.PXUpdateBase(m_ID);
                pxupdate.Mnemonic = myMnemonic;
                pxupdate.DriverTag = "T";
                pxupdate.UpdateType = KaiTrade.Interfaces.PXUpdateType.trade;
                if (instrument.Bid.IsValid)
                {
                    pxupdate.BidSize = instrument.Bid.Volume;
                    pxupdate.BidPrice = (decimal)instrument.Bid.Price;
                    pxupdate.Ticks = instrument.Bid.ServerTimestamp.Ticks;
                }
                if (instrument.Ask.IsValid)
                {
                    pxupdate.OfferSize = instrument.Ask.Volume;
                    pxupdate.OfferPrice = (decimal)instrument.Ask.Price;
                    pxupdate.Ticks = instrument.Ask.ServerTimestamp.Ticks;
                }

                pxupdate.TradePrice = (decimal)quote.Price;
                pxupdate.ServerTicks = quote.ServerTimestamp.Ticks;

                if (quote.HasVolume)
                {
                    pxupdate.TradeVolume = quote.Volume;
                }

                ApplyPriceUpdate(pxupdate);
            }
            catch (Exception myE)
            {
                log.Error("publishTradeUpdate", myE);
            }
        }
Beispiel #19
0
        private void CEL_InstrumentDOMChanged(CQGInstrument instrument, CQGDOMQuotes prevAsks, CQGDOMQuotes prevBids)
        {
            if (!_symbolsTable.Keys.Contains(instrument.FullName))
            {
                return;
            }

            lock (_waitingLocker)
            {
                SymbolData symbolData = _symbolsTable[instrument.FullName];
                if (symbolData.IsCanceled)
                {
                    RemoveSymbol(instrument.FullName);
                    return;
                }
                if (!(_cel.IsValid(instrument.DOMBids) && _cel.IsValid(instrument.DOMAsks)))
                {
                    return;
                }
                if (!symbolData.FirstTride)
                {
                    const double epsilon = 0.0000001;
                    if ((Math.Abs(instrument.Trade.Price - symbolData.PrevTradePrice) > epsilon) ||
                        (Math.Abs(instrument.Trade.Volume - symbolData.PrevTradeVol) > epsilon))
                    {
                        symbolData.IsNewTrade = true;
                        if (_isMoreInfo)
                        {
                            if (symbolData.MsgObject.Parent.Parent != null)
                            {
                                symbolData.MsgObject.Parent.Parent.BeginInvoke(
                                    new Action(
                                        () =>
                                        symbolData.MsgObject.Text =
                                            @"DOMBids depth: " + instrument.DOMBids.Count + @" DOMAsks depth: " +
                                            instrument.DOMAsks.Count));
                            }
                        }
                    }
                    else
                    {
                        symbolData.IsNewTrade = false;
                    }
                    symbolData.PrevTradePrice = instrument.Trade.Price;
                    symbolData.PrevTradeVol   = instrument.Trade.Volume;
                    symbolData.PrevTradeTime  = instrument.Timestamp;
                }
                else
                {
                    symbolData.PrevTradePrice = instrument.Trade.Price;
                    symbolData.PrevTradeVol   = instrument.Trade.Volume;
                    symbolData.PrevTradeTime  = instrument.Timestamp;
                }
                symbolData.FirstTride = false;

                double askPrice;
                double bidPrice;
                int    askVol;
                int    bidVol;
                var    serverTimestamp = new DateTime(instrument.ServerTimestamp.Year,
                                                      instrument.ServerTimestamp.Month,
                                                      instrument.ServerTimestamp.Day,
                                                      instrument.ServerTimestamp.Hour,
                                                      instrument.ServerTimestamp.Minute,
                                                      instrument.ServerTimestamp.Second,
                                                      instrument.ServerTimestamp.Millisecond);

                var query = QueryBuilder.InsertData_dom(symbolData.TableName, instrument,
                                                        Convert.ToInt32(symbolData.Depth), ++symbolData.GroupId,
                                                        symbolData.IsNewTrade, _userName, out askPrice, out askVol, out bidPrice, out bidVol, serverTimestamp);
                if (instrument.ServerTimestamp < DateTime.Now.AddDays(-1))
                {
                    return;
                }

                var tickDomData = new TickData
                {
                    AskPrice   = askPrice,
                    AskVolume  = askVol,
                    BidPrice   = bidPrice,
                    BidVolume  = bidVol,
                    SymbolName = symbolData.SymbolName,
                    Timestamp  = serverTimestamp,
                    GroupID    = symbolData.GroupId
                };

                if (_onSymbolsList.Contains(instrument.FullName))
                {
                    DatabaseManager.AddToBuffer(query, true, tickDomData);

                    if (_allowedSymbols.ContainsKey(_symbolsTable[instrument.FullName].SymbolName) ||
                        !DatabaseManager.CurrentDbIsShared)
                    {
                        if (DatabaseManager.CurrentDbIsShared && serverTimestamp < _allowedSymbols[instrument.FullName])
                        {
                            return;
                        }
                        DatabaseManager.RunSQLLive(query, "InsertData", instrument.FullName);
                    }
                }


                _symbolsTable[instrument.FullName] = symbolData;
            }
        }
 private void SessionOnInstrumentChanged(CQGInstrument cqgInstrument, CQGQuotes cqgQuotes, CQGInstrumentProperties cqgInstrumentProperties)
 {
     SendLevel1Message(cqgInstrument);
 }
        static void _cel_InstrumentSubscribed(string symbol, CQGInstrument cqgInstrument)
        {
            //Check expired date
            DateTime d = cqgInstrument.ExpirationDate;

            Console.WriteLine("Symbol: '" + symbol + "' will be expired:" + d.ToShortDateString());

            if ((d - DateTime.Now).TotalHours < (Settings.Default.DaysToExpiration * 24))
            {
                if (!Settings.Default.EmailedSymbols.Contains(symbol))
                {
                    OnSendReport("Symbol: '" + symbol + "' will expired soon", "Hello. \n The symbol: '" + symbol + "' will be expired on less then " + Settings.Default.DaysToExpiration + " days. \nExpiration date: " + d.ToShortDateString() + "\n\nGood luck");
                    Settings.Default.EmailedSymbols += symbol;
                }
            }
            //Month
            MonthCharYearModel variable = new MonthCharYearModel();
            variable.MonthChar = "def";
            variable.Year = "def";
            foreach (var monthCharYearModel in monthCharYearlList)
            {
                if (monthCharYearModel.Symbol == symbol)
                    return;
            }
            CQGInstrumentProperties props = cqgInstrument.Properties;
            var properties = props[eInstrumentProperty.ipMonthChar];
            if (props != null && Cel.IsValid(properties.Value))
                variable.MonthChar = properties.Value.ToString();
            properties = props[eInstrumentProperty.ipYear];
            if (props != null && Cel.IsValid(properties.Value))
                variable.Year = properties.Value.ToString();
            variable.Symbol = symbol;
            monthCharYearlList.Add(variable);
            Cel.RemoveInstrument(cqgInstrument);
        }
        public void sendUpdateToContractSummaryLiveData(OptionRealtimeMonitor optionRealtimeMonitor)
        {
            DataGridView gridViewContractSummary = optionRealtimeMonitor.getGridViewContractSummary;

            try
            {
                for (int contractSummaryExpressionCnt = 0;
                     contractSummaryExpressionCnt < optionSpreadManager.contractSummaryExpressionListIdx.Count(); contractSummaryExpressionCnt++)
                {
                    CQGInstrument cqgInstrument =
                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]]
                        .cqgInstrument;

                    if (cqgInstrument != null)
                    {
                        statusAndConnectedUpdates.checkUpdateStatus(gridViewContractSummary, contractSummaryExpressionCnt,
                                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.TIME,
                                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]]);


                        //if (optionSpreadManager.realtimeMonitorSettings.eodAnalysis)
                        if (optionSpreadManager
                            .optionSpreadExpressionList
                            [optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]]
                            .instrument.eodAnalysisAtInstrument)
                        {
                            //gridViewContractSummary.Columns[(int)CONTRACTSUMMARY_DATA_COLUMNS.TIME].DefaultCellStyle.Font = new Font("Tahoma", 6);

                            fillContractSummaryLiveData(optionRealtimeMonitor,
                                                        contractSummaryExpressionCnt,
                                                        (int)CONTRACTSUMMARY_DATA_COLUMNS.TIME,
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]]
                                                        .lastTimeUpdated.ToString("yyyy-MM-dd HH:mm", DateTimeFormatInfo.InvariantInfo),
                                                        false, 0);
                        }
                        else
                        {
                            //gridViewContractSummary.Columns[(int)CONTRACTSUMMARY_DATA_COLUMNS.TIME].DefaultCellStyle.Font = new Font("Tahoma", 8);

                            fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                        (int)CONTRACTSUMMARY_DATA_COLUMNS.TIME,
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]]
                                                        .lastTimeUpdated.ToString("HH:mm", DateTimeFormatInfo.InvariantInfo),
                                                        false, 0);
                        }


                        //                gridViewContractSummary
                        //                            .Rows[heldLotsExpressionCnt].Cells[(int)CONTRACTSUMMARY_DATA_COLUMNS.TOTAL_QTY].Value =
                        //                            optionSpreadExpressionList[i].numberOfLotsHeldForContractSummary
                        //                            * optionSpreadManager.portfolioGroupTotalMultiple;



                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.ASK,
                                                    cqgInstrument.ToDisplayPrice(
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].ask),
                                                    false,
                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].ask);

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.BID,
                                                    cqgInstrument.ToDisplayPrice(
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].bid),
                                                    false,
                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].bid);

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.LAST,
                                                    cqgInstrument.ToDisplayPrice(
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].trade),
                                                    false,
                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].trade);

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.DFLT_PRICE,
                                                    cqgInstrument.ToDisplayPrice(
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].defaultPrice),
                                                    false,
                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].defaultPrice);

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.STTLE,
                                                    cqgInstrument.ToDisplayPrice(
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].settlement),
                                                    false,
                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].settlement);

                        if (optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]]
                            .settlementDateTime.Date.CompareTo(DateTime.Now.Date) >= 0)
                        {
                            fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                        (int)CONTRACTSUMMARY_DATA_COLUMNS.SETL_TIME,
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].settlementDateTime
                                                        .ToString("yyyy-MM-dd HH:mm", DateTimeFormatInfo.InvariantInfo),
                                                        true, 1);
                        }
                        else
                        {
                            fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                        (int)CONTRACTSUMMARY_DATA_COLUMNS.SETL_TIME,
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].settlementDateTime
                                                        .ToString("yyyy-MM-dd HH:mm", DateTimeFormatInfo.InvariantInfo),
                                                        true, -1);
                        }

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.YEST_STTLE,
                                                    cqgInstrument.ToDisplayPrice(
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].yesterdaySettlement),
                                                    false,
                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].yesterdaySettlement);



                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.IMPL_VOL,
                                                    cqgInstrument.ToDisplayPrice(
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].impliedVol),
                                                    false,
                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].impliedVol);

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.THEOR_PRICE,
                                                    cqgInstrument.ToDisplayPrice(
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].theoreticalOptionPrice),
                                                    false,
                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].theoreticalOptionPrice);

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.SPAN_IMPL_VOL,
                                                    Math.Round(
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].impliedVolFromSpan,
                                                        2).ToString(),
                                                    false,
                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].impliedVolFromSpan);

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.SETL_IMPL_VOL,
                                                    Math.Round(
                                                        optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].settlementImpliedVol,
                                                        2).ToString(),
                                                    false,
                                                    optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].settlementImpliedVol);


                        int lots = optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]]
                                   .numberOfLotsHeldForContractSummary
                                   * optionSpreadManager.portfolioGroupTotalMultiple;

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.TOTAL_QTY,
                                                    lots.ToString(),
                                                    false,
                                                    lots);


                        double delta = Math.Round(
                            optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].deltaChgForContractSummary
                            * optionSpreadManager.portfolioGroupTotalMultiple, 2);

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.DELTA,
                                                    delta.ToString(),
                                                    true,
                                                    delta);


                        double plChg = Math.Round(
                            optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].plChgForContractSummary
                            * optionSpreadManager.portfolioGroupTotalMultiple, 2);

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.PL_DAY_CHG,
                                                    plChg.ToString(),
                                                    true,
                                                    plChg);


                        int numberOfOrderContracts =
                            optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].numberOfOrderContracts
                            * optionSpreadManager.portfolioGroupTotalMultiple;

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.ORDER_QTY,
                                                    numberOfOrderContracts.ToString(),
                                                    false,
                                                    numberOfOrderContracts);


                        double plChgOrders = Math.Round(
                            optionSpreadManager.optionSpreadExpressionList[optionSpreadManager.contractSummaryExpressionListIdx[contractSummaryExpressionCnt]].plChgOrders
                            * optionSpreadManager.portfolioGroupTotalMultiple, 2);

                        fillContractSummaryLiveData(optionRealtimeMonitor, contractSummaryExpressionCnt,
                                                    (int)CONTRACTSUMMARY_DATA_COLUMNS.ORDER_PL_CHG,
                                                    plChgOrders.ToString(),
                                                    true,
                                                    plChgOrders);
                    }
                }
            }
            catch (Exception ex)
            {
                TSErrorCatch.errorCatchOut(Convert.ToString(this), ex);
            }
        }
Beispiel #23
0
        /// <summary>
        /// This event is fired when a new instrument is resolved and subscribed.
        /// </summary>
        /// <param name="symbol">The commodity symbol that was requested by user in NewInstrument method.</param>
        /// <param name="instrument">Subscribed CQGInstrument object.</param>
        private void cel_InstrumentSubscribed(string symbol, CQGInstrument instrument)
        {
            try
            {
                driverLog.Info("cel_InstrumentSubscribed:Pre" + symbol);
                lock (m_InstrSubscribed)
                {
                    try
                    {
                        driverLog.Info("cel_InstrumentSubscribed" + symbol);
                        KaiTrade.Interfaces.IProduct myProduct = null;
                        if (_productRegister.ContainsKey(symbol))
                        {
                            myProduct = _productRegister[symbol];
                            if (symbol != instrument.FullName)
                            {
                                if (_productGenericNameRegister.ContainsKey(instrument.FullName))
                                {
                                    _productGenericNameRegister[instrument.FullName] = symbol;
                                }
                                else
                                {
                                    _productGenericNameRegister.Add(instrument.FullName, symbol);
                                }
                            }
                            if (instrument.FullName.StartsWith("SPREAD"))
                            {
                                DefineCQGStrategy(instrument.FullName);
                            }
                        }
                        else
                        {
                            // Use the product manager directly to add a product
                            myProduct = Facade.GetProductManager().CreateProductWithSecID(instrument.FullName, Name, instrument.ExchangeAbbreviation, instrument.FullName, Name);
                            _productRegister.Add(symbol, myProduct);

                        }
                        setProductValues(myProduct, symbol, instrument);
                        // This will case a register update to be sent to subscribers of the product manager - e.g. like the rabbit publisher
                        Facade.GetProductManager().RegisterProduct(myProduct);
                    }
                    catch (Exception myE)
                    {
                        log.Error("cel_InstrumentSubscribed", myE);
                    }
                }
            }
            catch
            {
            }
        }
Beispiel #24
0
        /// <summary>
        /// This event is fired when any of the instrument quotes or dynamic instrument properties are changed.
        /// </summary>
        /// <param name="instrument">Changed instrument.</param>
        /// <param name="quotes">Collection of changed quotes.</param>
        /// <param name="props">Collection of changed dynamic properties. </param>
        private void cel_InstrumentChanged(CQGInstrument instrument, CQGQuotes quotes, CQGInstrumentProperties props)
        {
            try
            {
                lock (m_InstrToken1)
                {
                    try
                    {
                        if (!_publisherRegister.ContainsKey(instrument.FullName))
                        {
                            return;
                        }
                        if (!_pXContexts.ContainsKey(instrument.FullName))
                        {
                            _pXContexts.Add(instrument.FullName, new DriverBase.PXUpdateContext(instrument.FullName));
                        }
                        L1PriceSupport.PXUpdateBase pxupdate = null;
                        if (quotes.Count > 0)
                        {
                            foreach (CQGQuote quote in quotes)
                            {
                                switch (quote.Type)
                                {
                                    case eQuoteType.qtTrade:
                                        pxupdate = new L1PriceSupport.PXUpdateBase(m_ID);
                                        pxupdate.Mnemonic = instrument.FullName;
                                        pxupdate.UpdateType = KaiTrade.Interfaces.PXUpdateType.trade;
                                        pxupdate.DriverTag = "Q";
                                        if (quote.HasVolume)
                                        {
                                            pxupdate.TradeVolume = quote.Volume;
                                        }
                                        else
                                        {
                                            pxupdate.TradeVolume = 0;
                                        }
                                        pxupdate.TradePrice = (decimal)quote.Price;
                                        pxupdate.ServerTicks = quote.ServerTimestamp.Ticks;
                                        if (_pXContexts[instrument.FullName].IsUpdatedTrade(pxupdate))
                                        {
                                            ApplyPriceUpdate(pxupdate);
                                        }
                                        break;
                                    case eQuoteType.qtAsk:
                                        pxupdate = new L1PriceSupport.PXUpdateBase(m_ID);
                                        pxupdate.Mnemonic = instrument.FullName;
                                        pxupdate.UpdateType = KaiTrade.Interfaces.PXUpdateType.ask;
                                        pxupdate.DriverTag = "Q";
                                        if (quote.HasVolume)
                                        {
                                            pxupdate.OfferSize = quote.Volume;
                                        }
                                        else
                                        {
                                            pxupdate.OfferSize = 0;
                                        }
                                        pxupdate.OfferPrice = (decimal)quote.Price;
                                        pxupdate.ServerTicks = quote.ServerTimestamp.Ticks;
                                        if (_pXContexts[instrument.FullName].IsUpdatedOffer(pxupdate))
                                        {
                                            ApplyPriceUpdate(pxupdate);
                                        }

                                        break;
                                    case eQuoteType.qtBid:
                                        pxupdate = new L1PriceSupport.PXUpdateBase(m_ID);
                                        pxupdate.Mnemonic = instrument.FullName;
                                        pxupdate.UpdateType = KaiTrade.Interfaces.PXUpdateType.bid;
                                        pxupdate.DriverTag = "Q";
                                        if (quote.HasVolume)
                                        {
                                            pxupdate.BidSize = quote.Volume;
                                        }
                                        else
                                        {
                                            pxupdate.BidSize = 0;
                                        }

                                        pxupdate.BidPrice = (decimal)quote.Price;
                                        pxupdate.ServerTicks = quote.ServerTimestamp.Ticks;
                                        if (_pXContexts[instrument.FullName].IsUpdatedBid(pxupdate))
                                        {
                                            ApplyPriceUpdate(pxupdate);
                                        }
                                        break;
                                    default:
                                        pxupdate = new L1PriceSupport.PXUpdateBase(m_ID);
                                        pxupdate.Mnemonic = instrument.FullName;
                                        pxupdate.UpdateType = KaiTrade.Interfaces.PXUpdateType.none;
                                        pxupdate.DriverTag = "Q";

                                        if (instrument.Bid.IsValid)
                                        {
                                            pxupdate.BidSize = instrument.Bid.Volume;
                                            pxupdate.BidPrice = (decimal)instrument.Bid.Price;
                                            pxupdate.Ticks = instrument.Bid.ServerTimestamp.Ticks;
                                        }
                                        if (instrument.Ask.IsValid)
                                        {
                                            pxupdate.OfferSize = instrument.Ask.Volume;
                                            pxupdate.OfferPrice = (decimal)instrument.Ask.Price;
                                            pxupdate.Ticks = instrument.Ask.ServerTimestamp.Ticks;
                                        }

                                        pxupdate.TradePrice = (decimal)instrument.Trade.Price;
                                        pxupdate.ServerTicks = instrument.ServerTimestamp.Ticks;

                                        if (instrument.Trade.HasVolume)
                                        {
                                            pxupdate.TradeVolume = instrument.Trade.Volume;
                                        }

                                        ApplyPriceUpdate(pxupdate);

                                        //publishQuote(instrument);
                                        break;
                                }
                            }
                        }
                        else
                        {
                        }
                        // there were no quotes

                        pxupdate = new L1PriceSupport.PXUpdateBase(m_ID);
                        pxupdate.Mnemonic = instrument.FullName;
                        pxupdate.UpdateType = KaiTrade.Interfaces.PXUpdateType.none;
                        pxupdate.DriverTag = "I";

                        if (instrument.Bid.IsValid)
                        {
                            pxupdate.BidSize = instrument.Bid.Volume;
                            pxupdate.BidPrice = (decimal)instrument.Bid.Price;
                            pxupdate.Ticks = instrument.Bid.ServerTimestamp.Ticks;
                        }
                        if (instrument.Ask.IsValid)
                        {
                            pxupdate.OfferSize = instrument.Ask.Volume;
                            pxupdate.OfferPrice = (decimal)instrument.Ask.Price;
                            pxupdate.Ticks = instrument.Ask.ServerTimestamp.Ticks;
                        }
                        if (instrument.Trade.IsValid)
                        {
                            pxupdate.TradePrice = (decimal)instrument.Trade.Price;
                            pxupdate.ServerTicks = instrument.Ask.ServerTimestamp.Ticks;

                            if (instrument.Trade.HasVolume)
                            {
                                pxupdate.TradeVolume = instrument.Trade.Volume;
                            }
                        }

                        ApplyPriceUpdate(pxupdate);

                        //publishQuote(instrument);
                    }
                    catch (Exception ex)
                    {
                        log.Error("cel_InstrumentChanged", ex);
                    }
                }
            }
            catch
            {
            }
        }
Beispiel #25
0
 void CEL_InstrumentSubscribed(string symbol, CQGInstrument cqg_instrument)
 {
     _dataCollector.SessionAdd(cqg_instrument.Sessions, symbol);
 }
Beispiel #26
0
        void CQGApp_InstrumentDOMChanged(CQGInstrument cqg_instrument, CQGDOMQuotes prev_asks, CQGDOMQuotes prev_bids)
        {
            try
            {
                int prevAskCount = prev_asks.Count;
                int prevBidCount = prev_bids.Count;
                int x = cqg_instrument.DOMAsks.Count;
                int y = cqg_instrument.DOMBids.Count;

                if (_publisherRegister.ContainsKey(cqg_instrument.FullName))
                {
                    //List<KaiTrade.Interfaces.IDOMSlot> slots = ProcessDOM(cqg_instrument,prev_asks, prev_bids);
                    List<KaiTrade.Interfaces.IDOMSlot> slots = ProcessDOMasImage(cqg_instrument, prev_asks, prev_bids);
                    base.ApplyDOMUpdate(cqg_instrument.FullName, slots.ToArray());
                    return;
                }

            }
            catch (Exception myE)
            {
                log.Error("CQGApp_InstrumentDOMChanged", myE);
            }
        }
Beispiel #27
0
        private void setProductValues(KaiTrade.Interfaces.IProduct myProduct, string symbol, CQGInstrument instrument)
        {
            try
            {

                myProduct.TradeVenue = Name;
                myProduct.Commodity = instrument.Commodity;
                myProduct.Exchange = instrument.ExchangeAbbreviation;
                myProduct.SecurityID = instrument.FullName;
                myProduct.IDSource = Name;
                myProduct.GenericName = symbol;
                myProduct.Symbol = instrument.Commodity;
                myProduct.TickSize = (decimal)instrument.TickSize;
                myProduct.TickValue = (decimal)instrument.TickValue;
                myProduct.LongName = instrument.FullName;
                myProduct.CFICode = "FXXXXX";

            }
            catch (Exception myE)
            {
                log.Error("setProductValues", myE);
            }
        }
Beispiel #28
0
        private void CEL_InstrumentDOMChanged(CQGInstrument instrument, CQGDOMQuotes prevAsks, CQGDOMQuotes prevBids)
        {
            if (!_symbolsTable.Keys.Contains(instrument.FullName)) return;

            lock (_waitingLocker)
            {
                SymbolData symbolData = _symbolsTable[instrument.FullName];
                if (symbolData.IsCanceled)
                {
                    RemoveSymbol(instrument.FullName);
                    return;
                }
                if (!(_cel.IsValid(instrument.DOMBids) && _cel.IsValid(instrument.DOMAsks))) return;
                if (!symbolData.FirstTride)
                {
                    const double epsilon = 0.0000001;
                    if ((Math.Abs(instrument.Trade.Price - symbolData.PrevTradePrice) > epsilon) ||
                        (Math.Abs(instrument.Trade.Volume - symbolData.PrevTradeVol) > epsilon))
                    {
                        symbolData.IsNewTrade = true;
                        if (_isMoreInfo)
                        {
                            if (symbolData.MsgObject.Parent.Parent != null)
                                symbolData.MsgObject.Parent.Parent.BeginInvoke(
                                    new Action(
                                        () =>
                                        symbolData.MsgObject.Text =
                                        @"DOMBids depth: " + instrument.DOMBids.Count + @" DOMAsks depth: " +
                                        instrument.DOMAsks.Count));
                        }
                    }
                    else
                    {
                        symbolData.IsNewTrade = false;
                    }
                    symbolData.PrevTradePrice = instrument.Trade.Price;
                    symbolData.PrevTradeVol = instrument.Trade.Volume;
                    symbolData.PrevTradeTime = instrument.Timestamp;
                }
                else
                {
                    symbolData.PrevTradePrice = instrument.Trade.Price;
                    symbolData.PrevTradeVol = instrument.Trade.Volume;
                    symbolData.PrevTradeTime = instrument.Timestamp;
                }
                symbolData.FirstTride = false;

                double askPrice;
                double bidPrice;
                int askVol;
                int bidVol;
                var serverTimestamp = new DateTime(instrument.ServerTimestamp.Year,
                    instrument.ServerTimestamp.Month,
                    instrument.ServerTimestamp.Day,
                    instrument.ServerTimestamp.Hour,
                    instrument.ServerTimestamp.Minute,
                    instrument.ServerTimestamp.Second,
                    instrument.ServerTimestamp.Millisecond);

                var query = QueryBuilder.InsertData_dom(symbolData.TableName, instrument,
                                                        Convert.ToInt32(symbolData.Depth), ++symbolData.GroupId,
                                                        symbolData.IsNewTrade, _userName, out askPrice, out askVol, out bidPrice, out bidVol, serverTimestamp);
                if (instrument.ServerTimestamp < DateTime.Now.AddDays(-1))
                    return;

                var tickDomData = new TickData
                                      {
                                          AskPrice = askPrice,
                                          AskVolume = askVol,
                                          BidPrice = bidPrice,
                                          BidVolume = bidVol,
                                          SymbolName = symbolData.SymbolName,
                                          Timestamp = serverTimestamp,
                                          GroupID =  symbolData.GroupId
                                      };

                if (_onSymbolsList.Contains(instrument.FullName))
                {
                    DatabaseManager.AddToBuffer(query, true, tickDomData);

                    if (_allowedSymbols.ContainsKey(_symbolsTable[instrument.FullName].SymbolName) ||
                    !DatabaseManager.CurrentDbIsShared)
                    {
                        if (DatabaseManager.CurrentDbIsShared && serverTimestamp < _allowedSymbols[instrument.FullName])
                            return;
                        DatabaseManager.RunSQLLive(query, "InsertData", instrument.FullName);
                    }
                }

                _symbolsTable[instrument.FullName] = symbolData;
            }
        }
Beispiel #29
0
 private static void _cel_InstrumentSubscribed(string symbol, CQGInstrument cqgInstrument)
 {
 }
Beispiel #30
0
        private void CQG_InstrumentChanged(CQGInstrument instrument, CQGQuotes quotes,
                                           CQGInstrumentProperties instrumentProperties)
        {
            if (!_tickTable.ContainsKey(instrument.FullName)) return;

            lock (_waitingLocker)
            {

                if (_subscribedSymbols.Exists(oo => oo == instrument.FullName))
                {
                    _subscribedSymbols.Remove(instrument.FullName);
                    if (SymbolSubscribed != null)
                        SymbolSubscribed(new List<string> { instrument.FullName }, GetDepthForSymbol(instrument.FullName));
                }

                var tickData = _tickTable[instrument.FullName];

                if (!tickData.IsCanceled)
                {
                    tickData.TickCount = 0;
                    foreach (CQGQuote item in quotes)
                    {
                        CQGQuote tick = item;

                        tickData.IsNewTrade = tick.Name == "Trade";
                        switch (tick.Name)
                        {
                            case "Ask":
                                {
                                    tickData.AskPrice = tick.Price;
                                    tickData.AskVolume = tick.Volume;
                                    tickData.TradePrice = 0;
                                    tickData.TradeVolume = 0;
                                    break;
                                }
                            case "Bid":
                                {
                                    tickData.BidPrice = tick.Price;
                                    tickData.BidVolume = tick.Volume;
                                    tickData.TradePrice = 0;
                                    tickData.TradeVolume = 0;
                                    break;
                                }
                            case "Trade":
                                {
                                    tickData.TradePrice = tick.Price;
                                    tickData.TradeVolume = tick.Volume;
                                    break;
                                }

                        }
                        tickData.TickCount++;
                    }

                    if (tickData.TickCount > 0)
                    {
                        var quoteList = (from CQGQuote item in quotes
                                         where item.Name == "Ask" ||
                                               item.Name == "Bid" ||
                                               item.Name == "Trade"
                                         select item).ToList();
                        quoteList.OrderBy(quote => quote.ServerTimestamp);
                        if (quoteList.Any())
                        {
                            tickData.Timestamp = quoteList.Last().ServerTimestamp;
                            tickData.TickType = quoteList.Last().Name;
                        }
                        else
                            tickData.Timestamp = instrument.ServerTimestamp;

                        if (tickData.Timestamp < DateTime.Now.AddDays(-1))
                            return;
                        if (_onSymbolsList.Contains(instrument.FullName))
                        {
                            //DatabaseManager.AddToBuffer(query, false, tickData);
                            if (_allowedSymbols.ContainsKey(tickData.SymbolName) ||
                                !DatabaseManager.CurrentDbIsShared)
                            {
                                if (DatabaseManager.CurrentDbIsShared && tickData.Timestamp < _allowedSymbols[tickData.SymbolName])
                                    return;
                                DatabaseManager.InsertTickts(tickData.TableName, tickData.SymbolName,
                                                            tickData.BidPrice,
                                                            tickData.BidVolume,
                                                            tickData.AskPrice, tickData.AskVolume,
                                                            tickData.TradePrice,
                                                            tickData.TradeVolume,
                                                            tickData.IsNewTrade, tickData.Timestamp,
                                                            ++tickData.GroupID,
                                                            _userName, tickData.TickType);
                            }
                        }

                    }
                }
                else
                {
                    RemoveSymbol(instrument.FullName);
                    return;
                }
                _tickTable[instrument.FullName] = tickData;
            }
        }
Beispiel #31
0
        static void Cel_InstrumentDOMChanged(CQGInstrument instrument, CQGDOMQuotes prev_asks, CQGDOMQuotes prev_bids)
        {
            var symbolData = _symbolsInProgress.Find(oo => oo.Name == instrument.FullName);

            if (symbolData == null)
            {
                return;
            }

            lock (_waitingLocker)
            {
                var domData = symbolData.DomData;


                if (!(Cel.IsValid(instrument.DOMBids) && Cel.IsValid(instrument.DOMAsks)))
                {
                    return;
                }
                if (!domData.FirstTride)
                {
                    const double epsilon = 0.0000001;
                    if ((Math.Abs(instrument.Trade.Price - domData.PrevTradePrice) > epsilon) ||
                        (Math.Abs(instrument.Trade.Volume - domData.PrevTradeVol) > epsilon))
                    {
                        domData.IsNewTrade = true;
                        //if (_isMoreInfo)
                        //{
                        //    if (symbolData.MsgObject.Parent.Parent != null)
                        //        symbolData.MsgObject.Parent.Parent.BeginInvoke(
                        //            new Action(
                        //                () =>
                        //                symbolData.MsgObject.Text =
                        //                @"DOMBids depth: " + instrument.DOMBids.Count + @" DOMAsks depth: " +
                        //                instrument.DOMAsks.Count));
                        //}
                    }
                    else
                    {
                        domData.IsNewTrade = false;
                    }
                    domData.PrevTradePrice = instrument.Trade.Price;
                    domData.PrevTradeVol   = instrument.Trade.Volume;
                    domData.PrevTradeTime  = instrument.Timestamp;
                }
                else
                {
                    domData.PrevTradePrice = instrument.Trade.Price;
                    domData.PrevTradeVol   = instrument.Trade.Volume;
                    domData.PrevTradeTime  = instrument.Timestamp;
                }
                domData.FirstTride = false;

                double askPrice;
                double bidPrice;
                int    askVol;
                int    bidVol;
                var    serverTimestamp = new DateTime(instrument.ServerTimestamp.Year,
                                                      instrument.ServerTimestamp.Month,
                                                      instrument.ServerTimestamp.Day,
                                                      instrument.ServerTimestamp.Hour,
                                                      instrument.ServerTimestamp.Minute,
                                                      instrument.ServerTimestamp.Second,
                                                      instrument.ServerTimestamp.Millisecond);

                var query = QueryBuilder.InsertData_dom(domData.TableName, instrument,
                                                        Convert.ToInt32(symbolData.Depth), ++domData.GroupId,
                                                        domData.IsNewTrade, _userName, out askPrice, out askVol, out bidPrice, out bidVol, serverTimestamp);
                if (instrument.ServerTimestamp < DateTime.Now.AddDays(-1))
                {
                    return;
                }

                var tickDomData = new TickData
                {
                    AskPrice   = askPrice,
                    AskVolume  = askVol,
                    BidPrice   = bidPrice,
                    BidVolume  = bidVol,
                    SymbolName = domData.SymbolName,
                    Timestamp  = serverTimestamp,
                    GroupID    = domData.GroupId
                };


                ClientDatabaseManager.AddToBuffer(query, true, tickDomData);

                if (!ClientDatabaseManager.CurrentDbIsShared || symbolData.CanInsert)
                {
                    //if (DatabaseManager.CurrentDbIsShared && serverTimestamp < _allowedSymbols[instrument.FullName])return;
                    ClientDatabaseManager.RunSQLLive(query, "InsertData", instrument.FullName);
                }


                symbolData.DomData = domData;
            }
        }
        private void CEL_InstrumentDOMChanged(CQGInstrument instrument, CQGDOMQuotes prevAsks, CQGDOMQuotes prevBids)
        {
            ticks += 1;
            if (!isCanceled)
            {
                tsAskDpth.Text = Convert.ToString(instrument.DOMAsks.Count);
                tsBidDpth.Text = Convert.ToString(instrument.DOMBids.Count);

                if (!firstTride)
                {

                    if ((instrument.Trade.Price != PrevTradePrice) || (instrument.Trade.Volume != PrevTradeVol) || (instrument.Timestamp != PrevTradeTime))
                    {
                        isNewTrade = true;
                    }
                    else
                    {
                        isNewTrade = false;
                    }
                    PrevTradePrice = instrument.Trade.Price;
                    PrevTradeVol = instrument.Trade.Volume;
                    PrevTradeTime = instrument.Timestamp;
                }
                else
                {
                    PrevTradePrice = instrument.Trade.Price;
                    PrevTradeVol = instrument.Trade.Volume;
                    PrevTradeTime = instrument.Timestamp;
                }
                firstTride = false;
                String _query = QueryBuilder.InsertData(m_tableName, instrument, Convert.ToInt32(nudDOMDepth.Value), m_qroup_ID,isNewTrade);
                RunSQL(_query, "InsertData");
                m_qroup_ID +=1;
            }
            else
            {
                RunSQL("DROP TABLE IF EXISTS " + m_tableName, "flush");
                //m_CEL.Shutdown();
                connector.CQG_Stop();
                //isCanceled = false;
            }
        }
Beispiel #33
0
        private void CQG_InstrumentChanged(CQGInstrument instrument, CQGQuotes quotes,
                                           CQGInstrumentProperties instrumentProperties)
        {
            if (!_tickTable.ContainsKey(instrument.FullName))
            {
                return;
            }

            lock (_waitingLocker)
            {
                if (_subscribedSymbols.Exists(oo => oo == instrument.FullName))
                {
                    _subscribedSymbols.Remove(instrument.FullName);
                    if (SymbolSubscribed != null)
                    {
                        SymbolSubscribed(new List <string> {
                            instrument.FullName
                        }, GetDepthForSymbol(instrument.FullName));
                    }
                }

                var tickData = _tickTable[instrument.FullName];

                if (!tickData.IsCanceled)
                {
                    tickData.TickCount = 0;
                    foreach (CQGQuote item in quotes)
                    {
                        CQGQuote tick = item;

                        tickData.IsNewTrade = tick.Name == "Trade";
                        switch (tick.Name)
                        {
                        case "Ask":
                        {
                            tickData.AskPrice    = tick.Price;
                            tickData.AskVolume   = tick.Volume;
                            tickData.TradePrice  = 0;
                            tickData.TradeVolume = 0;
                            break;
                        }

                        case "Bid":
                        {
                            tickData.BidPrice    = tick.Price;
                            tickData.BidVolume   = tick.Volume;
                            tickData.TradePrice  = 0;
                            tickData.TradeVolume = 0;
                            break;
                        }

                        case "Trade":
                        {
                            tickData.TradePrice  = tick.Price;
                            tickData.TradeVolume = tick.Volume;
                            break;
                        }
                        }
                        tickData.TickCount++;
                    }

                    if (tickData.TickCount > 0)
                    {
                        var quoteList = (from CQGQuote item in quotes
                                         where item.Name == "Ask" ||
                                         item.Name == "Bid" ||
                                         item.Name == "Trade"
                                         select item).ToList();
                        quoteList.OrderBy(quote => quote.ServerTimestamp);
                        if (quoteList.Any())
                        {
                            tickData.Timestamp = quoteList.Last().ServerTimestamp;
                            tickData.TickType  = quoteList.Last().Name;
                        }
                        else
                        {
                            tickData.Timestamp = instrument.ServerTimestamp;
                        }

                        if (tickData.Timestamp < DateTime.Now.AddDays(-1))
                        {
                            return;
                        }
                        if (_onSymbolsList.Contains(instrument.FullName))
                        {
                            //DatabaseManager.AddToBuffer(query, false, tickData);
                            if (_allowedSymbols.ContainsKey(tickData.SymbolName) ||
                                !DatabaseManager.CurrentDbIsShared)
                            {
                                if (DatabaseManager.CurrentDbIsShared && tickData.Timestamp < _allowedSymbols[tickData.SymbolName])
                                {
                                    return;
                                }
                                DatabaseManager.InsertTickts(tickData.TableName, tickData.SymbolName,
                                                             tickData.BidPrice,
                                                             tickData.BidVolume,
                                                             tickData.AskPrice, tickData.AskVolume,
                                                             tickData.TradePrice,
                                                             tickData.TradeVolume,
                                                             tickData.IsNewTrade, tickData.Timestamp,
                                                             ++tickData.GroupID,
                                                             _userName, tickData.TickType);
                            }
                        }
                    }
                }
                else
                {
                    RemoveSymbol(instrument.FullName);
                    return;
                }
                _tickTable[instrument.FullName] = tickData;
            }
        }
Beispiel #34
0
        public void sendUpdateToADMPositionsGrid(OptionRealtimeMonitor optionRealtimeMonitor)  //*eQuoteType cqgQuoteType,*/ int spreadExpressionIdx /*int colIdx*/)
        {
            //CQGQuote quote = optionSpreadExpressionList[spreadExpressionIdx].cqgInstrument.Quotes[cqgQuoteType];

            DataGridView gridLiveFCMData = optionRealtimeMonitor.getGridLiveFCMData;

            try
            {
                List <ADMPositionImportWeb> admPositionImportWeb = optionSpreadManager.admPositionImportWeb;

                //int optionSpreadCounter = 0;

                //List<LiveADMStrategyInfo> liveADMStrategyInfoList = optionSpreadManager.liveADMStrategyInfoList;

                for (int admWebPositionCounter = 0; admWebPositionCounter < admPositionImportWeb.Count; admWebPositionCounter++)
                {
                    //    int totalLegs = liveADMStrategyInfoList[optionSpreadCounter].admLegInfo.Count;

                    //    //if (optionSpreadExpressionList[spreadExpressionIdx].cqgInstrument != null)
                    //    for (int legCounter = 0; legCounter < totalLegs; legCounter++)
                    //    {
                    if (admPositionImportWeb[admWebPositionCounter].contractData.optionSpreadExpression != null)
                    {
                        CQGInstrument cqgInstrument = admPositionImportWeb[admWebPositionCounter].contractData.optionSpreadExpression.cqgInstrument;

                        if (cqgInstrument != null)  // && CQG. cqgInstrument)
                        {
                            OptionSpreadExpression optionSpreadExpressionList =
                                admPositionImportWeb[admWebPositionCounter].contractData.optionSpreadExpression;

                            //checkUpdateStatus(admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                            //    optionSpreadExpressionList, true);

                            optionSpreadManager.statusAndConnectedUpdates.checkUpdateStatus(gridLiveFCMData, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                                                            (int)OPTION_LIVE_ADM_DATA_COLUMNS.TIME,
                                                                                            optionSpreadExpressionList);

                            //if (optionSpreadManager.realtimeMonitorSettings.eodAnalysis)
                            if (optionSpreadExpressionList.instrument.eodAnalysisAtInstrument)
                            {
                                gridLiveFCMData.Columns[(int)OPTION_LIVE_ADM_DATA_COLUMNS.TIME].DefaultCellStyle.Font = new Font("Tahoma", 6);

                                fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                    (int)OPTION_LIVE_ADM_DATA_COLUMNS.TIME,
                                                    optionSpreadExpressionList.lastTimeUpdated.ToString("yyyy-MM-dd HH:mm", DateTimeFormatInfo.InvariantInfo),
                                                    false, 0);
                            }
                            else
                            {
                                gridLiveFCMData.Columns[(int)OPTION_LIVE_ADM_DATA_COLUMNS.TIME].DefaultCellStyle.Font = new Font("Tahoma", 8);

                                fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                    (int)OPTION_LIVE_ADM_DATA_COLUMNS.TIME,
                                                    optionSpreadExpressionList.lastTimeUpdated.ToString("HH:mm", DateTimeFormatInfo.InvariantInfo),
                                                    false, 0);
                            }

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.ASK,
                                                cqgInstrument.ToDisplayPrice(optionSpreadExpressionList.ask), false, optionSpreadExpressionList.ask);

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.BID,
                                                cqgInstrument.ToDisplayPrice(optionSpreadExpressionList.bid), false, optionSpreadExpressionList.bid);

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.LAST,
                                                cqgInstrument.ToDisplayPrice(optionSpreadExpressionList.trade), false, optionSpreadExpressionList.trade);

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.DFLT_PRICE,
                                                cqgInstrument.ToDisplayPrice(optionSpreadExpressionList.defaultPrice),
                                                false, optionSpreadExpressionList.defaultPrice);

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.STTLE,
                                                cqgInstrument.ToDisplayPrice(optionSpreadExpressionList.settlement),
                                                false, optionSpreadExpressionList.settlement);

                            if (optionSpreadExpressionList.settlementDateTime.Date.CompareTo(DateTime.Now.Date) >= 0)
                            {
                                fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                    (int)OPTION_LIVE_ADM_DATA_COLUMNS.SETL_TIME,
                                                    optionSpreadExpressionList.settlementDateTime.ToString("yyyy-MM-dd HH:mm", DateTimeFormatInfo.InvariantInfo),
                                                    true, 1);
                            }
                            else
                            {
                                fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                    (int)OPTION_LIVE_ADM_DATA_COLUMNS.SETL_TIME,
                                                    optionSpreadExpressionList.settlementDateTime.ToString("yyyy-MM-dd HH:mm", DateTimeFormatInfo.InvariantInfo),
                                                    true, -1);
                            }

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.YEST_STTLE,
                                                cqgInstrument.ToDisplayPrice(optionSpreadExpressionList.yesterdaySettlement),
                                                false, optionSpreadExpressionList.yesterdaySettlement);

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.IMPL_VOL,
                                                Math.Round(optionSpreadExpressionList.impliedVol, 2).ToString(),
                                                false, optionSpreadExpressionList.impliedVol);

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.THEOR_PRICE,
                                                cqgInstrument.ToDisplayPrice(
                                                    optionSpreadExpressionList.theoreticalOptionPrice),
                                                false, optionSpreadExpressionList.theoreticalOptionPrice);

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.SPAN_IMPL_VOL,
                                                Math.Round(optionSpreadExpressionList.impliedVolFromSpan, 2).ToString(),
                                                false, optionSpreadExpressionList.impliedVolFromSpan);

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.SETL_IMPL_VOL,
                                                Math.Round(optionSpreadExpressionList.settlementImpliedVol, 2).ToString(),
                                                false, optionSpreadExpressionList.settlementImpliedVol);

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.RFR,
                                                optionSpreadExpressionList.riskFreeRate.ToString(),
                                                false, optionSpreadExpressionList.riskFreeRate);


                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.PL_DAY_CHG,
                                                Math.Round(admPositionImportWeb[admWebPositionCounter].contractData.pAndLDay, 2).ToString(),
                                                true, admPositionImportWeb[admWebPositionCounter].contractData.pAndLDay);

                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.PL_TRANS,
                                                Math.Round(admPositionImportWeb[admWebPositionCounter].contractData.pAndLDayOrders, 2).ToString(),
                                                true, admPositionImportWeb[admWebPositionCounter].contractData.pAndLDayOrders);

                            //fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                            //            (int)OPTION_LIVE_ADM_DATA_COLUMNS.PL_DAY_CHG,
                            //                Math.Round(admPositionImportWeb[admWebPositionCounter].contractData.pAndLDay, 2).ToString(),
                            //                true, admPositionImportWeb[admWebPositionCounter].contractData.pAndLDay);


                            fillLiveADMDataPage(optionRealtimeMonitor, admPositionImportWeb[admWebPositionCounter].liveADMRowIdx,
                                                (int)OPTION_LIVE_ADM_DATA_COLUMNS.DELTA,
                                                Math.Round(admPositionImportWeb[admWebPositionCounter].contractData.delta, 2).ToString(),
                                                true, admPositionImportWeb[admWebPositionCounter].contractData.delta);



                            //            //int numberOfContracts = (int)optionStrategies[optionSpreadCounter].optionStrategyParameters[
                            //            //                    (int)TBL_STRATEGY_STATE_FIELDS.currentPosition].stateValueParsed[legCounter];

                            //            //fillLiveADMDataPage(liveADMStrategyInfoList[optionSpreadCounter].admLegInfo[legCounter].rowIndex,
                            //            //            (int)OPTION_LIVE_ADM_DATA_COLUMNS.SPREAD_QTY,
                            //            //                numberOfContracts.ToString(), true, numberOfContracts);
                            //        }
                        }
                    }

                    //    fillLiveADMDataPage(liveADMStrategyInfoList[optionSpreadCounter].summaryRowIdx,
                    //                (int)OPTION_LIVE_ADM_DATA_COLUMNS.PL_DAY_CHG,
                    //                    Math.Round(liveADMStrategyInfoList[optionSpreadCounter].liveSpreadADMTotals.pAndLDay, 2).ToString(),
                    //                    true, liveADMStrategyInfoList[optionSpreadCounter].liveSpreadADMTotals.pAndLDay);

                    //    fillLiveADMDataPage(liveADMStrategyInfoList[optionSpreadCounter].summaryRowIdx,
                    //                (int)OPTION_LIVE_ADM_DATA_COLUMNS.DELTA,
                    //                    Math.Round(liveADMStrategyInfoList[optionSpreadCounter].liveSpreadADMTotals.delta, 2).ToString(),
                    //                    true, liveADMStrategyInfoList[optionSpreadCounter].liveSpreadADMTotals.delta);

                    //    optionSpreadCounter++;
                }
            }
            catch (Exception ex)
            {
                TSErrorCatch.errorCatchOut(Convert.ToString(this), ex);
            }
        }
 static void _cel_InstrumentSubscribed(string symbol, CQGInstrument cqgInstrument)
 {
     MonthCharYearModel variable = new MonthCharYearModel();
     variable.MonthChar = "def";
     variable.Year = "def";
     foreach (var monthCharYearModel in monthCharYearlList)
     {
         if (monthCharYearModel.Symbol == symbol)
             return;
     }
     CQGInstrumentProperties props = cqgInstrument.Properties;
     var properties = props[eInstrumentProperty.ipMonthChar];
     if (props != null && Cel.IsValid(properties.Value))
         variable.MonthChar = properties.Value.ToString();
     properties = props[eInstrumentProperty.ipYear];
     if (props != null && Cel.IsValid(properties.Value))
         variable.Year = properties.Value.ToString();
     variable.Symbol = symbol;
     monthCharYearlList.Add(variable);
     Cel.RemoveInstrument(cqgInstrument);
 }
 private void SendLevel1Message(CQGInstrument cqgInstrument)
 {
 }
		private void SendLevel1Message(CQGInstrument cqgInstrument)
		{
			
		}
        static void Cel_InstrumentChanged(CQGInstrument instrument, CQGQuotes quotes, CQGInstrumentProperties cqg_instrument_properties)
        {
            var symbolData = _symbolsInProgress.Find(oo => oo.Name == instrument.FullName);
            if (symbolData == null) return;

            lock (_waitingLocker)
            {

                var tickData = symbolData.TickData;

                tickData.TickCount = 0;
                foreach (CQGQuote item in quotes)
                {
                    CQGQuote tick = item;

                    tickData.IsNewTrade = tick.Name == "Trade";
                    switch (tick.Name)
                    {
                        case "Ask":
                            {
                                tickData.AskPrice = tick.Price;
                                tickData.AskVolume = tick.Volume;
                                tickData.TradePrice = 0;
                                tickData.TradeVolume = 0;
                                break;
                            }
                        case "Bid":
                            {
                                tickData.BidPrice = tick.Price;
                                tickData.BidVolume = tick.Volume;
                                tickData.TradePrice = 0;
                                tickData.TradeVolume = 0;
                                break;
                            }
                        case "Trade":
                            {
                                tickData.TradePrice = tick.Price;
                                tickData.TradeVolume = tick.Volume;
                                break;
                            }

                    }
                    tickData.TickCount++;
                }

                if (tickData.TickCount > 0)
                {
                    var quoteList = (from CQGQuote item in quotes
                                        where item.Name == "Ask" ||
                                            item.Name == "Bid" ||
                                            item.Name == "Trade"
                                        select item).ToList();
                    quoteList.OrderBy(quote => quote.ServerTimestamp);
                    if (quoteList.Any())
                    {
                        tickData.Timestamp = quoteList.Last().ServerTimestamp;
                        tickData.TickType = quoteList.Last().Name;
                    }
                    else
                        tickData.Timestamp = instrument.ServerTimestamp;
                    var query = QueryBuilder.InsertData(tickData.TableName, tickData.SymbolName,
                                                        tickData.BidPrice,
                                                        tickData.BidVolume,
                                                        tickData.AskPrice, tickData.AskVolume,
                                                        tickData.TradePrice,
                                                        tickData.TradeVolume,
                                                        tickData.IsNewTrade, tickData.Timestamp,
                                                        ++tickData.GroupID,
                                                        _userName, tickData.TickType);
                    if (tickData.Timestamp < DateTime.Now.AddDays(-1))
                        return;

                        ClientDatabaseManager.AddToBuffer(query, false, tickData);
                        if (!ClientDatabaseManager.CurrentDbIsShared || symbolData.CanInsert)
                        {
                            //todo if (DatabaseManager.CurrentDbIsShared && tickData.Timestamp < _allowedSymbols[tickData.SymbolName])return;
                            ClientDatabaseManager.RunSQLLive(query, "InsertData", instrument.FullName);
                        }

                }

                symbolData.TickData = tickData;
            }
        }
Beispiel #39
0
        /// <summary>
        /// publish a quote for the given mnemonic
        /// </summary>
        /// <param name="myMnemonic">mnemonic/subject key</param>
        /// <param name="instrument">CQG instrument that has changed</param>
        private void publishQuote(string myMnemonic, CQGInstrument instrument)
        {
            try
            {
                L1PriceSupport.PXUpdateBase pxupdate = new L1PriceSupport.PXUpdateBase(m_ID);
                pxupdate.Mnemonic = myMnemonic;

                if (instrument.Bid.IsValid)
                {
                    pxupdate.BidSize = instrument.Bid.Volume;
                    pxupdate.BidPrice = (decimal)instrument.Bid.Price;
                    pxupdate.Ticks = instrument.Bid.ServerTimestamp.Ticks;
                }
                if (instrument.Ask.IsValid)
                {
                    pxupdate.OfferSize = instrument.Ask.Volume;
                    pxupdate.OfferPrice = (decimal)instrument.Ask.Price;
                    pxupdate.Ticks = instrument.Ask.ServerTimestamp.Ticks;
                }
                if (instrument.Trade.IsValid)
                {
                    switch (instrument.Trade.Type)
                    {
                        /*
                    case eQuoteType.qtTrade:
                        pxupdate.TradePrice = (decimal)instrument.Trade.Price;
                        pxupdate.TradeVolume = instrument.Trade.Volume;
                        pxupdate.LastTradeTicks = instrument.Trade.ServerTimestamp.Ticks;

                        break;
                         */
                        case eQuoteType.qtDayHigh:
                            pxupdate.DayHigh = (decimal)instrument.Trade.Price;
                            pxupdate.TradePrice = 0;
                            pxupdate.TradeVolume = 0;
                            break;
                        case eQuoteType.qtDayLow:
                            pxupdate.DayLow = (decimal)instrument.Trade.Price;
                            pxupdate.TradePrice = 0;
                            pxupdate.TradeVolume = 0;
                            break;
                        case eQuoteType.qtDayOpen:
                            //myPub.Open = instrument.Trade.Price.ToString();
                            break;
                        default:
                            pxupdate.TradePrice = null;
                            pxupdate.TradeVolume = null;
                            break;
                    }
                    pxupdate.Ticks = instrument.Timestamp.Ticks;
                }
                else
                {
                    pxupdate.TradePrice = 0;
                    pxupdate.TradeVolume = 0;
                }

                ApplyPriceUpdate(pxupdate);
            }
            catch (Exception myE)
            {
                log.Error("publishQuote", myE);
            }
        }
        public static String InsertData_dom(String tableName, CQGInstrument instrument, int depth, uint groupID, bool isNew, string userName, out double askPrice, out int askVol, out double bidPrice, out int bidVol, DateTime serverTime)
        {
            var newTable = "DM_" + tableName.Substring(3, tableName.Length - 3).ToUpper();

            String symbol = instrument.FullName;
            String query = "INSERT IGNORE INTO `" + newTable + "`";
            query += "(`Symbol`,`Depth`,`DOMBid`,`DOMAsk`,`DOMBidVol`,`DOMAskVol`,`Trade`,`TradeVol`,`Time`, `TimeLocal`,GroupID, UserName)";
            String runQuery = "";
            int balancedDepth = (instrument.DOMAsks.Count < instrument.DOMBids.Count)
                                    ? instrument.DOMAsks.Count
                                    : instrument.DOMBids.Count;
            askPrice = 0;
            askVol = 0;
            bidPrice = 0;
            bidVol = 0;
            for (int index = 0; ((index < balancedDepth) && (index < depth)); index++)
            {
                //query += "(`symbol`,`depth`,`DOMBid`,`DOMAsk`,`DOMBidVol`,`DOMAskVol`,`Trade`,`TradeVol`,`ts`)";
                CQGQuote domAsk = instrument.DOMAsks[index];
                CQGQuote domBid = instrument.DOMBids[index];

                runQuery += query + " VALUES('" + symbol + "'," + Convert.ToString(index + 1) + ",";
                runQuery += domBid.Price.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += domAsk.Price.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += domBid.Volume.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += domAsk.Volume.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += instrument.Trade.Price.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += instrument.Trade.Volume.ToString("G", CultureInfo.InvariantCulture) + ",";
                runQuery += "'" + serverTime.ToString("yyyy/MM/dd H:mm:ss.fff", CultureInfo.InvariantCulture) + "',";
                runQuery += "'" + DateTime.Now.ToString("yyyy/MM/dd H:mm:ss.fff", CultureInfo.InvariantCulture) + "',";
                runQuery += Convert.ToString(groupID) + ",";
                runQuery += "'" + userName + "');";

                if (index == 0)
                {
                    askPrice = domAsk.Price;
                    askVol = domAsk.Volume;
                    bidPrice = domBid.Price;
                    bidVol = domBid.Volume;
                }
            }
            //instrument.
            return runQuery;
        }
        static void Cel_InstrumentDOMChanged(CQGInstrument instrument, CQGDOMQuotes prev_asks, CQGDOMQuotes prev_bids)
        {
            var symbolData = _symbolsInProgress.Find(oo => oo.Name == instrument.FullName);
            if (symbolData == null) return;

            lock (_waitingLocker)
            {
                var domData = symbolData.DomData;

                if (!(Cel.IsValid(instrument.DOMBids) && Cel.IsValid(instrument.DOMAsks))) return;
                if (!domData.FirstTride)
                {
                    const double epsilon = 0.0000001;
                    if ((Math.Abs(instrument.Trade.Price - domData.PrevTradePrice) > epsilon) ||
                        (Math.Abs(instrument.Trade.Volume - domData.PrevTradeVol) > epsilon))
                    {
                        domData.IsNewTrade = true;
                        //if (_isMoreInfo)
                        //{
                        //    if (symbolData.MsgObject.Parent.Parent != null)
                        //        symbolData.MsgObject.Parent.Parent.BeginInvoke(
                        //            new Action(
                        //                () =>
                        //                symbolData.MsgObject.Text =
                        //                @"DOMBids depth: " + instrument.DOMBids.Count + @" DOMAsks depth: " +
                        //                instrument.DOMAsks.Count));
                        //}
                    }
                    else
                    {
                        domData.IsNewTrade = false;
                    }
                    domData.PrevTradePrice = instrument.Trade.Price;
                    domData.PrevTradeVol = instrument.Trade.Volume;
                    domData.PrevTradeTime = instrument.Timestamp;
                }
                else
                {
                    domData.PrevTradePrice = instrument.Trade.Price;
                    domData.PrevTradeVol = instrument.Trade.Volume;
                    domData.PrevTradeTime = instrument.Timestamp;
                }
                domData.FirstTride = false;

                double askPrice;
                double bidPrice;
                int askVol;
                int bidVol;
                var serverTimestamp = new DateTime(instrument.ServerTimestamp.Year,
                    instrument.ServerTimestamp.Month,
                    instrument.ServerTimestamp.Day,
                    instrument.ServerTimestamp.Hour,
                    instrument.ServerTimestamp.Minute,
                    instrument.ServerTimestamp.Second,
                    instrument.ServerTimestamp.Millisecond);

                var query = QueryBuilder.InsertData_dom(domData.TableName, instrument,
                                                        Convert.ToInt32(symbolData.Depth), ++domData.GroupId,
                                                        domData.IsNewTrade, _userName, out askPrice, out askVol, out bidPrice, out bidVol, serverTimestamp);
                if (instrument.ServerTimestamp < DateTime.Now.AddDays(-1))
                    return;

                var tickDomData = new TickData
                {
                    AskPrice = askPrice,
                    AskVolume = askVol,
                    BidPrice = bidPrice,
                    BidVolume = bidVol,
                    SymbolName = domData.SymbolName,
                    Timestamp = serverTimestamp,
                    GroupID = domData.GroupId
                };

                    ClientDatabaseManager.AddToBuffer(query, true, tickDomData);

                    if (!ClientDatabaseManager.CurrentDbIsShared || symbolData.CanInsert)
                    {
                        //if (DatabaseManager.CurrentDbIsShared && serverTimestamp < _allowedSymbols[instrument.FullName])return;
                        ClientDatabaseManager.RunSQLLive(query, "InsertData", instrument.FullName);
                    }

                    symbolData.DomData = domData;
            }
        }
Beispiel #42
0
 private void CEL_InstrumentSubscribed(string symbol, CQGInstrument cqg_instrument)
 {
     _missingBarManager.SessionAdd(cqg_instrument.Sessions, symbol);
 }
        static void _cel_InstrumentSubscribed(string symbol, CQGInstrument cqgInstrument)
        {
            if (_symbolsInProgress.Exists(oo => oo.Name == symbol))
            {
                var item = _symbolsInProgress.Find(oo => oo.Name == symbol);
                item.Description = "Subscribed.";
                item.CqgInstrument = cqgInstrument;
                item.TickData = new TickData(ClientDatabaseManager.GetTableTsName(symbol), symbol);
                item.DomData= new DomDataModel(ClientDatabaseManager.GetTableTsName(symbol),symbol);

                ClientDatabaseManager.CreateLiveTableTs(symbol);
                ClientDatabaseManager.CreateLiveTableDm(symbol);

                OnSymbolSubscribed(item.Name, item.Depth);
                RefreshSubscribedSymbolOnUi();
            }
        }
Beispiel #44
0
        static void Cel_InstrumentChanged(CQGInstrument instrument, CQGQuotes quotes, CQGInstrumentProperties cqg_instrument_properties)
        {
            var symbolData = _symbolsInProgress.Find(oo => oo.Name == instrument.FullName);

            if (symbolData == null)
            {
                return;
            }


            lock (_waitingLocker)
            {
                var tickData = symbolData.TickData;

                tickData.TickCount = 0;
                foreach (CQGQuote item in quotes)
                {
                    CQGQuote tick = item;

                    tickData.IsNewTrade = tick.Name == "Trade";
                    switch (tick.Name)
                    {
                    case "Ask":
                    {
                        tickData.AskPrice    = tick.Price;
                        tickData.AskVolume   = tick.Volume;
                        tickData.TradePrice  = 0;
                        tickData.TradeVolume = 0;
                        break;
                    }

                    case "Bid":
                    {
                        tickData.BidPrice    = tick.Price;
                        tickData.BidVolume   = tick.Volume;
                        tickData.TradePrice  = 0;
                        tickData.TradeVolume = 0;
                        break;
                    }

                    case "Trade":
                    {
                        tickData.TradePrice  = tick.Price;
                        tickData.TradeVolume = tick.Volume;
                        break;
                    }
                    }
                    tickData.TickCount++;
                }

                if (tickData.TickCount > 0)
                {
                    var quoteList = (from CQGQuote item in quotes
                                     where item.Name == "Ask" ||
                                     item.Name == "Bid" ||
                                     item.Name == "Trade"
                                     select item).ToList();
                    quoteList.OrderBy(quote => quote.ServerTimestamp);
                    if (quoteList.Any())
                    {
                        tickData.Timestamp = quoteList.Last().ServerTimestamp;
                        tickData.TickType  = quoteList.Last().Name;
                    }
                    else
                    {
                        tickData.Timestamp = instrument.ServerTimestamp;
                    }
                    var query = QueryBuilder.InsertData(tickData.TableName, tickData.SymbolName,
                                                        tickData.BidPrice,
                                                        tickData.BidVolume,
                                                        tickData.AskPrice, tickData.AskVolume,
                                                        tickData.TradePrice,
                                                        tickData.TradeVolume,
                                                        tickData.IsNewTrade, tickData.Timestamp,
                                                        ++tickData.GroupID,
                                                        _userName, tickData.TickType);
                    if (tickData.Timestamp < DateTime.Now.AddDays(-1))
                    {
                        return;
                    }

                    ClientDatabaseManager.AddToBuffer(query, false, tickData);
                    if (!ClientDatabaseManager.CurrentDbIsShared || symbolData.CanInsert)
                    {
                        //todo if (DatabaseManager.CurrentDbIsShared && tickData.Timestamp < _allowedSymbols[tickData.SymbolName])return;
                        ClientDatabaseManager.RunSQLLive(query, "InsertData", instrument.FullName);
                    }
                }

                symbolData.TickData = tickData;
            }
        }
Beispiel #45
0
 private static void _cel_InstrumentSubscribed(string symbol, CQGInstrument cqgInstrument)
 {
 }
		private void SessionOnInstrumentChanged(CQGInstrument cqgInstrument, CQGQuotes cqgQuotes, CQGInstrumentProperties cqgInstrumentProperties)
		{
			SendLevel1Message(cqgInstrument);
		}
Beispiel #47
0
 private void dumpDOMUpdate(CQGInstrument instrument, CQGDOMQuotes prev_asks, CQGDOMQuotes prev_bids)
 {
     try
     {
         for (int i = 0; i < prev_bids.Count; i++)
         {
             string temp = string.Format("BID px {0} sz {1} prev: px {2} sz {3}", instrument.DOMBids[i].Price, instrument.DOMBids[i].Volume, prev_bids[i].Price, prev_bids[i].Volume);
             log.Error(temp);
         }
         for (int i = 0; i < prev_asks.Count; i++)
         {
             string temp = string.Format("ASK px {0} sz {1} prev: px {2} sz {3}", instrument.DOMAsks[i].Price, instrument.DOMAsks[i].Volume, prev_asks[i].Price, prev_asks[i].Volume);
             log.Error(temp);
         }
     }
     catch (Exception myE)
     {
     }
 }