/// <summary> /// Retrieve ticker information from FIX message /// </summary> /// <param name="group"></param> public void AddDefaults(EASYROUTERCOMCLIENTLib.IFIXGroup group) { EASYROUTERCOMCLIENTLib.IFIXGroup defaultGroup = group.GetGroupByTag(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESNoDefaultFields, null); int nDefaultCount = defaultGroup.get_NumberOfGroups(null); for (int j = 0; j < nDefaultCount; j++) { EASYROUTERCOMCLIENTLib.IFIXGroup singleDefaultGroup = defaultGroup.GetGroupByIndex(j); //get the defaults //ESDefaultFieldFIXTag=1 //ESDefaultFieldName=Account //ESDefaultFieldValue=xxx //ESDefaultFieldEdit=Y //ESDefaultFieldDisplay=Account Code //ESDefaultFieldInputStyle=String string sTag = singleDefaultGroup.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESDefaultFieldFIXTag); int nTag = int.Parse(sTag); string sValue = singleDefaultGroup.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESDefaultFieldValue); Add(nTag, sValue); System.Diagnostics.Debug.Print("TICKER DEFAULTS [{0}] = [{1}] [{2}]", m_sExchange, nTag, sValue); } }
/// <summary> /// Get Market mode from FIX Message /// </summary> /// <param name="FIXMsg"></param> /// <returns></returns> public bool DecodeFIX(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { bool bRetVal = false; m_sSymbol = FIXMsg.get_AsString(VDMFIXTagConstants.esFIXTagESTickerMnemonic); EASYROUTERCOMCLIENTLib.IFIXGroup group = FIXMsg.GetGroupByTag(VDMFIXTagConstants.esFIXTagESNoTradingStatus, null); if (group != null) { int nCount = group.get_NumberOfGroups(null); for (int i = 0; i < nCount; i++) { EASYROUTERCOMCLIENTLib.IFIXGroup singleGroup = group.GetGroupByIndex(i); int nStatus = singleGroup.get_AsNumber(VDMFIXTagConstants.esFIXTagSecurityTradingStatus); VDMFIXSecurityTradingStatusConstants constant = (VDMFIXSecurityTradingStatusConstants)nStatus; m_status.Add(constant); } if(m_status.Count > 0) bRetVal = true; } return bRetVal; }
/// <summary> /// handle component status events /// </summary> /// <param name="FIXMsg"></param> void UpdateComponentStatus(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { string sModule = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESComponentModule); int nModule = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESComponentChannel); string sCategory = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESComponentCategory); if (sModule != RouterModule && nModule != RouterChannel) { SecurityExchange exchange = m_InstrumentManager.GetSecurityExchange(sModule); if (exchange != null) { string strExchangeDesc = exchange.ExchangeDesc; if ((sCategory == MESSAGEFIX3Lib.FIXComponentCategoryConstants.esFIXComponentCategoryOrders) || (sCategory == MESSAGEFIX3Lib.FIXComponentCategoryConstants.esFIXComponentCategoryPricesDepth) || (sCategory == MESSAGEFIX3Lib.FIXComponentCategoryConstants.esFIXComponentCategoryPricesBest) || (sCategory == MESSAGEFIX3Lib.FIXComponentCategoryConstants.esFIXComponentCategoryStructure)) { int nTotalActive = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESComponentTotalActive); int nTotalWaiting = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESComponentTotalActive); int nTotalInactive = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESComponentTotalWaiting); int nTotalStale = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESComponentTotalStale); ComponentStatusArgs args = new ComponentStatusArgs(sCategory,sModule,exchange.ExchangeDesc); args.SetStatus(nTotalActive, nTotalWaiting, nTotalInactive); if(RecvExchangeStatusMsgEvent!=null) { RecvExchangeStatusMsgEvent(this, args); } } } } }
/// <summary> /// handle structre data /// </summary> /// <param name="FIXMsg"></param> void m_Router_RecvStructureMsg(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { string sType = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSecurityResponseType); if (sType == MESSAGEFIX3Lib.FIXSecurityResponseTypeConstants.esFIXSecurityResponseTypeReturnESExchanges) { ESExchange esexchange = m_InstrumentManager.HandleESExchangeUpdate(FIXMsg); string sExchange = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSecurityExchange); string sESExchange = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESExchange); System.Diagnostics.Debug.WriteLine("SEC DEF V EXCHANGE = " + sExchange + " ESEXCHANGE = " + sESExchange); if (RecvStructuredMsgEvent != null && esexchange != null) RecvStructuredMsgEvent(this, esexchange); if (esexchange != null) { if (m_bEnableAutoSubcription) { if (esexchange.Subscribed == false) { RequestStructure(sExchange, sESExchange); m_subscriptionMap.Add(sExchange + sESExchange, null); esexchange.Subscribed = true; } } } } else if (sType == MESSAGEFIX3Lib.FIXSecurityResponseTypeConstants.esFIXSecurityResponseTypeReturnSecurityExchanges) { //Security SecurityExchange exchange = m_InstrumentManager.HandleSecurityUpdate(FIXMsg); //string sExchange = FIXMsg.get_AsString(FIXTagConstants.esFIXTagSecurityExchange); //string sExchangeDesc = FIXMsg.get_AsString(FIXTagConstants.esFIXTagESSecurityExchangeDesc); //System.Diagnostics.Debug.WriteLine("SEC DEF U MESSAGE EXCHANGE = " + sExchange + " DESCRIPTION = " + sExchangeDesc); if (RecvStructuredMsgEvent != null && exchange != null) RecvStructuredMsgEvent(this, exchange); return; } else if (sType == MESSAGEFIX3Lib.FIXSecurityResponseTypeConstants.esFIXSecurityResponseTypeEndOfSecurityResponses) { //Completion m_InstrumentManager.HandleCompletionUpdate(FIXMsg); if (RecvStructuredMsgEvent != null) RecvStructuredMsgEvent(this, new StructureDataEventArg(StructureDataType.EndOfResponses)); //string sExchange = FIXMsg.get_AsString(FIXTagConstants.esFIXTagSecurityExchange); //System.Diagnostics.Debug.WriteLine("SEC DEF X MESSAGE COMPLETION EXCHANGE = " + sExchange); return; } else if (sType == MESSAGEFIX3Lib.FIXSecurityResponseTypeConstants.esFIXSecurityResponseTypeReturnSymbols) { CommoditySymbol commodity = m_InstrumentManager.HandleCommodityUpdate(FIXMsg); //string sExchange = FIXMsg.get_AsString(FIXTagConstants.esFIXTagSecurityExchange); //string sESExchange = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESExchange); //string sSymbol = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSymbol); //string sSecurityType = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSecurityType); //System.Diagnostics.Debug.WriteLine("SEC DEF W MESSAGE COMPLETION EXCHANGE = " + sExchange + " Es Exchange = " + sESExchange + " Symbol = " + sSymbol); if (RecvStructuredMsgEvent != null && commodity != null) RecvStructuredMsgEvent(this, commodity); //hack for OPT //if (commodity.CommodityObj.CommodityCode == "OPT") if (m_bEnableAutoSubcription) { if (commodity != null) { string sKey = commodity.ToString();//sExchange + sESExchange + sSymbol + sSecurityType; if (commodity.Subscribed != true) { //RequestStructure(sExchange, sESExchange, sSymbol, sSecurityType); RequestStructure(commodity.Exchange, commodity.ESExchange, commodity.CommoditySymbolCode, commodity.CommodityObj.CommodityCode); commodity.Subscribed = true; } } } } else if (sType == MESSAGEFIX3Lib.FIXSecurityResponseTypeConstants.esFIXSecurityResponseTypeReturnSecurities) { TEInstrument instrument = m_InstrumentManager.HandleTEInstrumentUpdate(FIXMsg); if (instrument != null) { if (RecvStructuredMsgEvent != null) RecvStructuredMsgEvent(this, instrument); //Get price if (instrument.SubscribedAdditional == false) instrument.RequestStructure(this); //request price if(m_bEnableAutoPriceSubcription == true) m_Router.SendMarketDataRequest(instrument.SecurityExchange, instrument.ESTickerMnemonic, EFIXValueSubscriptionRequestType.eSubscriptionSubscribe, SubscribeAll); } } string sTicker = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESTickerMnemonic); if (sTicker != null) { if (sTicker.Length > 0) { System.Diagnostics.Debug.WriteLine("SEC DEF MESSAGE TE = " + sTicker); string sSecurityType = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSecurityResponseType); if (sSecurityType != null) { if (sSecurityType == MESSAGEFIX3Lib.FIXSecurityResponseTypeConstants.esFIXSecurityResponseTypeRelationshipUpdate) { //update System.Diagnostics.Debug.WriteLine("SEC DEF MESSAGE TE = " + sTicker); string sESTickerMnemonic = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESTickerMnemonic); TEInstrument instrument = m_InstrumentManager.GetDirectTE(sESTickerMnemonic); if (instrument != null) { instrument.ReceiveStructureUpdate(FIXMsg); } } } } } }
/// <summary> /// Recieves Account Message /// </summary> /// <param name="FIXMsg"></param> void m_Router_RecvOrderMsg(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { EASYROUTERCOMCLIENTLib.FIXMsgConstants type = FIXMsg.MsgType; switch (type) { case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgESAccount: //System.Diagnostics.Debug.WriteLine(EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgESAccount.ToString()); //m_ERUser.ProcessAccount(FIXMsg); m_AccountManagement.DecodeFIX((MESSAGEFIX3Lib.IFIXMessage)FIXMsg); break; case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgOrderCancelReject: { //System.Diagnostics.Debug.WriteLine(EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgOrderCancelReject.ToString()); OrderInfo order = m_OrderManagement.ProcessOrderCancelReject(FIXMsg); if (order != null && RecvOrderMsgEvent != null) RecvOrderMsgEvent(this, order); break; } case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgExecutionReport: { //System.Diagnostics.Debug.WriteLine(EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgExecutionReport.ToString()); OrderInfo order = m_OrderManagement.ProcessExecutionReport(FIXMsg); if (order != null && RecvOrderMsgEvent != null) RecvOrderMsgEvent(this, order); break; } case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgESRiskAccount: { //System.Diagnostics.Debug.WriteLine(EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgESRiskAccount.ToString()); m_AccountManagement.DecodeFIX((MESSAGEFIX3Lib.IFIXMessage)FIXMsg); if (RecvRiskMsgEvent != null) { foreach (KeyValuePair<long, Account> kvp in m_AccountManagement) { Account theAccount = kvp.Value; if (theAccount.IsDirty) { RecvRiskMsgEvent(this, theAccount); theAccount.IsDirty = false; } foreach (KeyValuePair<string, Position> kvp2 in theAccount.Positions) { Position thePosition = kvp2.Value; if (thePosition.IsDirty) { RecvRiskMsgEvent(this, thePosition); theAccount.IsDirty = false; } } } } break; } case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgESPosition: { //System.Diagnostics.Debug.WriteLine(EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgESPosition.ToString()); m_AccountManagement.DecodeFIX((MESSAGEFIX3Lib.IFIXMessage)FIXMsg); if (RecvRiskMsgEvent != null) { foreach (KeyValuePair<long, Account> kvp in m_AccountManagement) { Account theAccount = kvp.Value; if (theAccount.IsDirty) { RecvRiskMsgEvent(this, theAccount); theAccount.IsDirty = false; } foreach (KeyValuePair<string, Position> kvp2 in theAccount.Positions) { Position thePosition = kvp2.Value; if (thePosition.IsDirty) { RecvRiskMsgEvent(this, thePosition); theAccount.IsDirty = false; } } } } break; } default: System.Diagnostics.Debug.WriteLine(EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgESAccount.ToString()); break; } }
/// <summary> /// recieve market update /// </summary> /// <param name="FIXMsg"></param> void m_Router_RecvMarketDataMsg(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { EASYROUTERCOMCLIENTLib.FIXMsgConstants type = FIXMsg.MsgType; switch(type) { case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgMarketDataSnapFull: { TradeData data = m_PriceManagement.ProcessPrice(FIXMsg, true); if (RecvPriceMsgEvent != null) RecvPriceMsgEvent(this, data); data = null; break; } case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgMarketDataSnapInc: { TradeData data = m_PriceManagement.ProcessPrice(FIXMsg, true); if (RecvPriceMsgEvent != null) RecvPriceMsgEvent(this, data); data = null; break; } case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgSecuritySts: { SecurityStatus data = new SecurityStatus(); if (data.DecodeFIX(FIXMsg)) { TEInstrument instrument = m_InstrumentManager.GetDirectTE(data.Symbol); if(instrument != null) { instrument.SecurityStatus = null; instrument.SecurityStatus = data; } if (RecvPriceMsgEvent != null) { RecvPriceMsgEvent(this, data); } } data = null; } break; default: break; } }
/// <summary> /// Recieve account and logon message /// </summary> /// <param name="FIXMsg"></param> void m_Router_RecvGeneralMsg(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { EASYROUTERCOMCLIENTLib.FIXMsgConstants type = FIXMsg.MsgType; switch (type) { case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgESAccount: System.Diagnostics.Debug.WriteLine(type.ToString()); break; case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgLogon: { Logon logon = new Logon(); if(FIXMsg.HasGroup(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagText)) { string sMessage = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagText); string[] split = sMessage.Split('|'); if (split.Length > 0) logon.Error = split[0]; else logon.Error = "Logon Error Undefined"; logon.ErrorCode = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESLogonFailureCode); logon.LoggedOn = false; } else { System.Diagnostics.Trace.WriteLine(type.ToString()); RequestStructure("0"); logon.LoggedOn = true; LoadSystemSettings(); } logon.ConnectionType = (Logon.ConnectionTypes)FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESEasyRouterType); logon.ConnectionDescription = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESEasyRouterDesc); if (RecvGeneralMsgEvent != null) RecvGeneralMsgEvent(this, logon); break; } case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgEHControl: break; case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgESComponentStatus: UpdateComponentStatus(FIXMsg); break; case EASYROUTERCOMCLIENTLib.FIXMsgConstants.esFIXMsgLogout: { Logon logoff = new Logon(); logoff.Error = "Successfully Logged Out"; logoff.LoggedOn = false; logoff.LoggedOff = true; if (RecvGeneralMsgEvent != null) RecvGeneralMsgEvent(this, logoff); break; } default: System.Diagnostics.Debug.WriteLine(type.ToString()); break; } }
//TODO: [15/04/07] YKC - Renable when decide what to do with completions //int m_nSecurityCompletion = 0; //int m_nESExchangeCompletion = 0; //int m_nTEInstrumentCompletion = 0; //int m_nCommodityCompletion = 0; /// <summary> /// /// </summary> /// <returns></returns> public bool HandleCompletionUpdate(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { //TODO: [15/04/07] YKC - Renable when decide what to do with completions //m_nSecurityCompletion = 0; //m_nESExchangeCompletion = 0; //m_nTEInstrumentCompletion = 0; //m_nCommodityCompletion = 0; string sExchange = string.Empty; if (FIXMsg.GetString(out sExchange,FIXTagConstants.esFIXTagSecurityExchange)) { //has security string sESExchange = string.Empty; if (FIXMsg.GetString(out sESExchange,FIXTagConstants.esFIXTagESExchange)) { //has esexchange string sSecurityType = string.Empty; if(FIXMsg.GetString(out sSecurityType,FIXTagConstants.esFIXTagSecurityType)) { string sSymbol = string.Empty; if (FIXMsg.GetString(out sSymbol, FIXTagConstants.esFIXTagSymbol)) { string sESTickerMnemonic = string.Empty; if (FIXMsg.GetString(out sESTickerMnemonic, FIXTagConstants.esFIXTagESTickerMnemonic)) { System.Diagnostics.Debug.WriteLine(string.Format("COMPLETION [{0}][{1}][{2}][{3}][{4}]", sExchange, sESExchange, sSecurityType, sSymbol, sESTickerMnemonic)); } else { System.Diagnostics.Debug.WriteLine(string.Format("COMPLETION [{0}][{1}][{2}][{3}]", sExchange, sESExchange, sSecurityType,sSymbol )); } } else { System.Diagnostics.Debug.WriteLine(string.Format("COMPLETION [{0}][{1}][{2}]", sExchange, sESExchange, sSecurityType)); } } else { System.Diagnostics.Debug.WriteLine(string.Format("COMPLETION [{0}][{1}]",sExchange,sESExchange)); } } else { System.Diagnostics.Debug.WriteLine(string.Format("COMPLETION [{0}]",sExchange)); } } else { //Completion System.Diagnostics.Debug.WriteLine("COMPLETION [Unknown]"); } return true; }
/// <summary> /// handle structure update /// </summary> /// <param name="FIXMsg"></param> public void ReceiveStructureUpdate(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { m_bSubscribedAdditionalInfo = true; int nNumber = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESDecimalPlaces); int nPrefRiskValue = 0; if (FIXMsg.GetNumber(out nPrefRiskValue, EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESPreferredRiskArrayType)) m_nFIXTagESPreferredRiskArrayType = nPrefRiskValue; if(nNumber != 0) m_nESDecimalPlaces = nNumber; double dPriceMovement = 0.0; if (FIXMsg.GetDouble(out dPriceMovement, EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESPriceMovement )) m_nFIXTagESPreferredRiskArrayType = nPrefRiskValue; if (dPriceMovement != 0) m_dPriceMovement = dPriceMovement; string sStrategyCode = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESStrategyCode); if (sStrategyCode != string.Empty) m_sStrategyCode = sStrategyCode; string sSecurityID = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSecurityID); if (sSecurityID != string.Empty) m_sSecurityID = sSecurityID; string sIDSource = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagIDSource); if (sIDSource != string.Empty) m_sIDSource = sIDSource; string sCombinedCommodityCode = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESCombinedCommodityCode); if (sCombinedCommodityCode != string.Empty) m_sCombinedCommodityCode = sCombinedCommodityCode; string sClearingHouse = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESClearingHouse); if (sClearingHouse != string.Empty) { m_sClearingHouse = sClearingHouse; System.Diagnostics.Debug.WriteLine(this.ESTickerMnemonic + " " + m_sClearingHouse); } int nOptionType = 0; if (FIXMsg.GetNumber(out nOptionType, EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagPutOrCall)) { //defaults to 1 - call if never here m_nOptionType = nOptionType; } //RISK ARRAYS string sRiskArray = string.Empty; int nRiskArrayType = 0; if (FIXMsg.HasGroup(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESNoRiskArrays)) { EASYROUTERCOMCLIENTLib.IFIXGroup defaultGroup = FIXMsg.GetGroupByTag(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESNoRiskArrays, null); if (defaultGroup != null) { int nDefaultCount = defaultGroup.get_NumberOfGroups(null); for (int j = 0; j < nDefaultCount; j++) { EASYROUTERCOMCLIENTLib.IFIXGroup singleDefaultGroup = defaultGroup.GetGroupByIndex(j); int nValue = singleDefaultGroup.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESRiskArrayType); if (nValue != nRiskArrayType) { CreateRiskArray(nValue, sRiskArray); nRiskArrayType = nValue; } string sValue = singleDefaultGroup.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESRiskArrayValue); if (sValue != null) { sRiskArray = sRiskArray + sValue + "\\"; } } } } CreateRiskArray(nRiskArrayType, sRiskArray); }
/// <summary> /// Parse msg for instrument data /// </summary> /// <param name="FIXMsg"></param> /// <returns></returns> public bool ParseFIX(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { try { //exchaange string sExchange = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSecurityExchange); //Esexchange string sESExchange = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESExchange); //type of instrument string sSecurityType = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSecurityType); //commodity symbol string sSymbol = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSymbol); //easyscreen TE symbol string sESTickerMnemonic = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESTickerMnemonic); string sESTickerDesc = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESTickerDesc); //exchange code string sTickerSymbol = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESTickerSymbol); int nESOrderType = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESSupportPriceType); int nESTimeType = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESSupportTimeType); bool bESSupportEdit = FIXMsg.get_AsBoolean(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESSupportEdit); int lESPriceFormatCode = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESPriceFormatCode); m_sSymbol = sSymbol; m_sESTickerMnemonic = sESTickerMnemonic; m_sESTickerDesc = sESTickerDesc; m_sESTickerSymbol = sTickerSymbol; m_eOrderType = (OrderType)nESOrderType; m_eTimeType = (TimeInForce)nESTimeType; m_bESSupportEdit = bESSupportEdit; m_lESPriceFormatCode = lESPriceFormatCode; int nOptionType = 0; if(FIXMsg.GetNumber(out nOptionType,EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagPutOrCall)) { //defaults to 1 - call if never here m_nOptionType = nOptionType; } m_sCFICode = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagCFICode); m_sCurrency = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagCurrency); m_dUnitTickValue = FIXMsg.get_AsDouble(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESUnitTickValue); m_dCompositeDelta = FIXMsg.get_AsDouble(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESCompositeDelta); m_dESShortOptAdjust = FIXMsg.get_AsDouble(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESShortOptAdjust); m_nESDecimalPlaces = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESDecimalPlaces); AdditonalUpdates(FIXMsg); } catch(Exception) { return false; } return true; }
/// <summary> /// Additional instrument data /// </summary> /// <param name="FIXMsg"></param> public void AdditonalUpdates(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { EASYROUTERCOMCLIENTLib.IFIXGroup defaultGroup = FIXMsg.GetGroupByTag(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagNoRelatedSym, null); string sSecurityID = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSecurityID); if (sSecurityID != string.Empty) m_sSecurityID = sSecurityID; string sIDSource = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagIDSource); if (sSecurityID != string.Empty) m_sSecurityID = sSecurityID; string sMDExchange = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESMarketDataSecurityExchange); if (sMDExchange != string.Empty) m_sMDExchange = sMDExchange; if (defaultGroup != null) { int nDefaultCount = defaultGroup.get_NumberOfGroups(null); int nEarliestYearMonth = 0; string sUnderlyingMnemonic = string.Empty; string sUnderlyingCFICode = string.Empty; string sUnderlyingSymbol = string.Empty; string sUnderlyingCurrency = string.Empty; string sUnderlyingOppCurrency = string.Empty; double dUnderlyingUnitTickValue = 0.0; int nYearMonth = 0; int nOptionType = -1; for (int j = 0; j < nDefaultCount; j++) { EASYROUTERCOMCLIENTLib.IFIXGroup singleDefaultGroup = defaultGroup.GetGroupByIndex(j); if (singleDefaultGroup.HasGroup(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESUnderlyingExpiryYearMonth)) { string sYearMonth = singleDefaultGroup.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESUnderlyingExpiryYearMonth); nYearMonth = int.Parse(sYearMonth); if ((nEarliestYearMonth == 0) || (nYearMonth < nEarliestYearMonth)) { nEarliestYearMonth = nYearMonth; sUnderlyingMnemonic = singleDefaultGroup.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESUnderlyingLegTickerMnemonic); sUnderlyingCFICode = singleDefaultGroup.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagCFICode); sUnderlyingSymbol = singleDefaultGroup.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagUnderlyingSymbol); sUnderlyingCurrency = singleDefaultGroup.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagUnderlyingCurrency); sUnderlyingOppCurrency = singleDefaultGroup.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESUnderlyingOppCurrency); dUnderlyingUnitTickValue = singleDefaultGroup.get_AsDouble(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESUnitTickValue); nOptionType = singleDefaultGroup.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagUnderlyingPutOrCall); //Get Month m_nMonth = int.Parse(sYearMonth.Substring(4,2)); //Get Year m_nYear = int.Parse(sYearMonth.Substring(0,4)); } } } //if(sUnderlyingMnemonic != string.Empty) if (sUnderlyingCFICode != string.Empty) m_sCFICode = sUnderlyingCFICode; //if(sUnderlyingSymbol != string.Empty) if (sUnderlyingCurrency != string.Empty) m_sCurrency = sUnderlyingCurrency; //if(sUnderlyingOppCurrency != string.Empty) if (dUnderlyingUnitTickValue != 0.0) m_dUnitTickValue = dUnderlyingUnitTickValue; if (nOptionType != -1) m_nOptionType = nOptionType; } }
/// <summary> /// Get Process Account Details from FIX message /// </summary> /// <param name="FIXMsg"></param> public void ProcessAccount(EASYROUTERCOMCLIENTLib.IFIXMessage FIXMsg) { //repeats ESNoSecurityExchanges=2 m_nAccountID = FIXMsg.get_AsNumber(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESAccountID); m_sAccountName = FIXMsg.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESAccountName); bool bHasGroup = FIXMsg.HasGroup(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESNoSecurityExchanges); //note pass null EASYROUTERCOMCLIENTLib.IFIXGroup group = FIXMsg.GetGroupByTag(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagESNoSecurityExchanges, null); if (group != null) { int nCount = group.get_NumberOfGroups(null); for(int i = 0; i < nCount; i++) { EASYROUTERCOMCLIENTLib.IFIXGroup singleGroup = group.GetGroupByIndex(i); string sExchange = singleGroup.get_AsString(EASYROUTERCOMCLIENTLib.FIXTagConstants.esFIXTagSecurityExchange); AddTicker(sExchange, singleGroup); } } }
/// <summary> /// Add Ticker defaults for this account /// </summary> /// <param name="sExchange"></param> /// <param name="group"></param> public void AddTicker(string sExchange, EASYROUTERCOMCLIENTLib.IFIXGroup group) { if(!m_TickerMap.ContainsKey(sExchange)) { TickerDefaults temp = new TickerDefaults(sExchange); temp.AddDefaults(group); m_TickerMap.Add(sExchange,temp); } }