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; }
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); }
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_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); //} }
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); }
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 }
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)), }); }
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 }
/// <summary> /// Publish a quote from CQG /// </summary> /// <param name="instrument"></param> private void publishQuote(CQGInstrument instrument) { try { publishQuote(instrument.FullName, instrument); } catch (Exception myE) { } }
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; }
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; }
/// <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); } }
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); } }
/// <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 { } }
/// <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 { } }
void CEL_InstrumentSubscribed(string symbol, CQGInstrument cqg_instrument) { _dataCollector.SessionAdd(cqg_instrument.Sessions, symbol); }
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); } }
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); } }
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 static void _cel_InstrumentSubscribed(string symbol, CQGInstrument cqgInstrument) { }
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; } }
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; } }
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; } }
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) { }
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; } }
/// <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; } }
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(); } }
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; } }
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) { } }