Beispiel #1
0
        /// <summary>
        /// FIXME
        /// </summary>
        /// <returns></returns>
        protected bool GenerateLogon()
        {
            Message logon = msgFactory_.Create(this.SessionID.BeginString, Fields.MsgType.LOGON);

            logon.SetField(new Fields.EncryptMethod(0));
            logon.SetField(new Fields.HeartBtInt(state_.HeartBtInt));

            if (this.SessionID.IsFIXT)
            {
                logon.SetField(new Fields.DefaultApplVerID("FIXME"));
            }
            if (this.RefreshOnLogon)
            {
                Refresh();
            }
            if (this.ResetOnLogon)
            {
                state_.Reset();
            }
            if (ShouldSendReset())
            {
                logon.SetField(new Fields.ResetSeqNumFlag(true));
            }

            InitializeHeader(logon);
            state_.LastReceivedTimeTickCount = System.Environment.TickCount;
            state_.TestRequestCounter        = 0;
            state_.SentLogon = true;
            return(SendRaw(logon, 0));
        }
Beispiel #2
0
        protected bool GenerateResendRequest(string beginString, int msgSeqNum)
        {
            Message resendRequest = msgFactory_.Create(beginString, MsgType.RESEND_REQUEST);

            Fields.BeginSeqNo beginSeqNo = new Fields.BeginSeqNo(state_.GetNextTargetMsgSeqNum());
            Fields.EndSeqNo   endSeqNo;
            if (beginString.CompareTo(FixValues.BeginString.FIX42) >= 0)
            {
                endSeqNo = new Fields.EndSeqNo(0);
            }
            else if (beginString.CompareTo(FixValues.BeginString.FIX41) <= 0)
            {
                endSeqNo = new Fields.EndSeqNo(999999);
            }
            else
            {
                endSeqNo = new Fields.EndSeqNo(msgSeqNum - 1);
            }

            resendRequest.SetField(beginSeqNo);
            resendRequest.SetField(endSeqNo);
            InitializeHeader(resendRequest);
            if (SendRaw(resendRequest, 0))
            {
                this.Log.OnEvent("Sent ResendRequest FROM: " + beginSeqNo.Obj + " TO: " + endSeqNo.Obj);
                state_.SetResendRange(beginSeqNo.Obj, msgSeqNum - 1);
                return(true);
            }
            else
            {
                this.Log.OnEvent("Error sending ResendRequest (" + beginSeqNo.Obj + " ," + endSeqNo.Obj + ")");
                return(false);
            }
        }
Beispiel #3
0
        public void ToAdmin(Message msg, SessionID sessionID)
        {
            var msgType = msg.Header.GetString(Tags.MsgType);

            Console.WriteLine("ToAdmin: " + msgType);
            if (msgType == "A")
            {
                var settings = this.settings;
                msg.SetField(new Username(settings.Account), true);
                msg.SetField(new Password(settings.Password), true);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Called when admin messages are sent from the application.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="sessionId">The session id.</param>
        public void ToAdmin(Message message, SessionID sessionId)
        {
            if (message is Logon)
            {
                message.SetField(new Username(this.credentials.Username));
                message.SetField(new Password(this.credentials.Password));

                this.Logger.LogDebug(LogId.Network, "Authorizing session...");
            }

            if (this.sendAccountTag)
            {
                message.SetField(this.accountField);
            }
        }
Beispiel #5
0
        private void GenerateSequenceReset(int beginSeqNo, int endSeqNo)
        {
            string  beginString   = this.SessionID.BeginString;
            Message sequenceReset = msgFactory_.Create(beginString, Fields.MsgType.SEQUENCE_RESET);

            InitializeHeader(sequenceReset);
            int newSeqNo = endSeqNo;

            sequenceReset.Header.SetField(new PossDupFlag(true));
            InsertOrigSendingTime(sequenceReset.Header, sequenceReset.Header.GetDateTime(Tags.SendingTime));

            sequenceReset.Header.SetField(new MsgSeqNum(beginSeqNo));
            sequenceReset.SetField(new NewSeqNo(newSeqNo));
            sequenceReset.SetField(new GapFillFlag(true));
            SendRaw(sequenceReset, beginSeqNo);
            this.Log.OnEvent("Sent SequenceReset TO: " + newSeqNo);
        }
Beispiel #6
0
        public bool GenerateTestRequest(string id)
        {
            Message testRequest = msgFactory_.Create(this.SessionID.BeginString, Fields.MsgType.TEST_REQUEST);

            InitializeHeader(testRequest);
            testRequest.SetField(new Fields.TestReqID(id));
            return(SendRaw(testRequest, 0));
        }
Beispiel #7
0
        /// <summary>
        /// FIXME don't do so much operator new here
        /// </summary>
        /// <param name="heartBtInt"></param>
        /// <returns></returns>
        protected bool GenerateLogon(int heartBtInt)
        {
            Message logon = msgFactory_.Create(this.SessionID.BeginString, Fields.MsgType.LOGON);

            logon.SetField(new Fields.EncryptMethod(0));
            if (this.SessionID.IsFIXT)
            {
                logon.SetField(new Fields.DefaultApplVerID("FIXME"));
            }
            if (state_.ReceivedReset)
            {
                logon.SetField(new Fields.ResetSeqNumFlag(true));
            }
            logon.SetField(new Fields.HeartBtInt(heartBtInt));
            InitializeHeader(logon);
            state_.SentLogon = SendRaw(logon, 0);
            return(state_.SentLogon);
        }
Beispiel #8
0
 protected void PopulateSessionRejectReason(Message reject, int field, string text, bool includeFieldInfo)
 {
     if (this.SessionID.BeginString.CompareTo(FixValues.BeginString.FIX42) >= 0)
     {
         reject.SetField(new Fields.RefTagID(field));
         reject.SetField(new Fields.Text(text));
     }
     else
     {
         if (includeFieldInfo)
         {
             reject.SetField(new Fields.Text(text + " (" + field + ")"));
         }
         else
         {
             reject.SetField(new Fields.Text(text));
         }
     }
 }
Beispiel #9
0
        public bool GenerateLogout(string text)
        {
            Message logout = msgFactory_.Create(this.SessionID.BeginString, Fields.MsgType.LOGOUT);

            InitializeHeader(logout);
            if (text.Length > 0)
            {
                logout.SetField(new Fields.Text(text));
            }
            state_.SentLogout = SendRaw(logout, 0);
            return(state_.SentLogout);
        }
Beispiel #10
0
        public bool GenerateHeartbeat(Message testRequest)
        {
            Message heartbeat = msgFactory_.Create(this.SessionID.BeginString, Fields.MsgType.HEARTBEAT);

            InitializeHeader(heartbeat);
            try
            {
                heartbeat.SetField(new Fields.TestReqID(testRequest.GetField(Fields.Tags.TestReqID)));
            }
            catch (FieldNotFoundException)
            { }
            return(SendRaw(heartbeat, 0));
        }
Beispiel #11
0
        /// <summary>
        /// Called before messages are sent from the application.
        /// </summary>
        /// <param name="message">The message.</param>
        /// <param name="sessionId">The session identifier.</param>
        /// <exception cref="DoNotSend">If possible duplication flag is true.</exception>
        public void ToApp(Message message, SessionID sessionId)
        {
            if (this.sendAccountTag)
            {
                message.SetField(this.accountField);
            }

            var possibleDuplication = false;

            if (message.Header.IsSetField(Tags.PossDupFlag))
            {
                possibleDuplication =
                    QuickFix.Fields.Converters.BoolConverter.Convert(
                        message.Header.GetField(Tags.PossDupFlag));
            }

            if (possibleDuplication)
            {
                throw new DoNotSend();
            }
        }
Beispiel #12
0
        private void _sendMessageBBGIntegration(string msgType, QuickFix.Message msgQF, TOMessage to, int account)
        {
            try
            {
                this.Send2DropCopy(msgQF); // Envio de mensagem 4.4 para a sessao drop copy
                // Validar se deve efetuar o cast da conta para mnemonico
                if (this.Config.ParseAccount)
                {
                    string mnemonic = this.ParentAcceptor.GetMnemonicFromAccount(account);
                    if (!string.IsNullOrEmpty(mnemonic))
                    {
                        msgQF.SetField(new Account(mnemonic), true);
                    }
                }
                QuickFix.Message msgQF42 = null;
                if (msgType == MsgType.EXECUTION_REPORT)
                {
                    msgQF42 = Fix42TranslatorBBG.Fix44ER_2_Fix42ER((QuickFix.FIX44.ExecutionReport)msgQF);
                }
                if (msgType == MsgType.ORDER_CANCEL_REJECT)
                {
                    msgQF42 = Fix42TranslatorBBG.Fix44OCR_2_Fix42OCR((QuickFix.FIX44.OrderCancelReject)msgQF);
                }

                Session.SendToTarget(msgQF42, to.Sessao);

                msgQF.Clear();
                msgQF = null;
                if (null != msgQF42)
                {
                    msgQF42.Clear();
                }
                msgQF42 = null;
            }
            catch (Exception ex)
            {
                logger.Error("Problemas no envio de mensagem de integração BBG: " + ex.Message, ex);
            }
        }
Beispiel #13
0
        private void _sendDefaultMessageIntegration(QuickFix.Message msgQF, TOMessage to, int account)
        {
            try
            {
                this.Send2DropCopy(msgQF);
                // Validar se deve efetuar o cast da conta para mnemonico
                if (this.Config.ParseAccount)
                {
                    string mnemonic = this.ParentAcceptor.GetMnemonicFromAccount(account);
                    if (!string.IsNullOrEmpty(mnemonic))
                    {
                        msgQF.SetField(new Account(mnemonic), true);
                    }
                }
                Session.SendToTarget(msgQF, to.Sessao);

                msgQF.Clear();
                msgQF = null;
            }
            catch (Exception ex)
            {
                logger.Error("Problemas no envio da mensagem de integracao default: " + ex.Message, ex);
            }
        }
Beispiel #14
0
 protected void PopulateRejectReason(Message reject, string text)
 {
     reject.SetField(new Fields.Text(text));
 }
Beispiel #15
0
        public bool GenerateReject(Message message, FixValues.SessionRejectReason reason, int field)
        {
            string beginString = this.SessionID.BeginString;

            Message reject = msgFactory_.Create(beginString, Fields.MsgType.REJECT);

            reject.ReverseRoute(message.Header);
            InitializeHeader(reject);

            string msgType;

            if (message.Header.IsSetField(Fields.Tags.MsgType))
            {
                msgType = message.Header.GetField(Fields.Tags.MsgType);
            }
            else
            {
                msgType = "";
            }

            int msgSeqNum = 0;

            if (message.Header.IsSetField(Fields.Tags.MsgSeqNum))
            {
                try
                {
                    msgSeqNum = message.Header.GetInt(Fields.Tags.MsgSeqNum);
                    reject.SetField(new Fields.RefSeqNum(msgSeqNum));
                }
                catch (System.Exception)
                { }
            }

            if (beginString.CompareTo(FixValues.BeginString.FIX42) >= 0)
            {
                if (msgType.Length > 0)
                {
                    reject.SetField(new Fields.RefMsgType(msgType));
                }
                if ((FixValues.BeginString.FIX42.Equals(beginString) && reason.Value <= FixValues.SessionRejectReason.INVALID_MSGTYPE.Value) || (beginString.CompareTo(FixValues.BeginString.FIX42) > 0))
                {
                    reject.SetField(new Fields.SessionRejectReason(reason.Value));
                }
            }
            if (!MsgType.LOGON.Equals(msgType) &&
                !MsgType.SEQUENCE_RESET.Equals(msgType) &&
                (msgSeqNum == state_.GetNextTargetMsgSeqNum()))
            {
                state_.IncrNextTargetMsgSeqNum();
            }

            if ((0 != field) || FixValues.SessionRejectReason.INVALID_TAG_NUMBER.Equals(reason))
            {
                if (FixValues.SessionRejectReason.INVALID_MSGTYPE.Equals(reason))
                {
                    if (this.SessionID.BeginString.CompareTo(FixValues.BeginString.FIX43) >= 0)
                    {
                        PopulateRejectReason(reject, reason.Description);
                    }
                    else
                    {
                        PopulateSessionRejectReason(reject, field, reason.Description, false);
                    }
                }
                else
                {
                    PopulateSessionRejectReason(reject, field, reason.Description, true);
                }

                this.Log.OnEvent("Message " + msgSeqNum + " Rejected: " + reason.Description + " (Field=" + field + ")");
            }
            else
            {
                PopulateRejectReason(reject, reason.Description);
                this.Log.OnEvent("Message " + msgSeqNum + " Rejected: " + reason.Value);
            }

            if (!state_.ReceivedLogon)
            {
                throw new QuickFIXException("Tried to send a reject while not logged on");
            }

            return(SendRaw(reject, 0));
        }
 public void ToAdmin(Message message, SessionID sessionID)
 {
     if (message.Header.GetField(Tags.MsgType) == MsgType.LOGON)
     {
         message.SetField(new QuickFix.Fields.Username("batman"));
         message.SetField(new QuickFix.Fields.Password("gotham123"));
     }
 }
Beispiel #17
0
 public void ToAdmin(Message msg, SessionID sessionID)
 {
     msg.SetField(new StringField(553, AccountUtil.apiKey));
     msg.SetField(new StringField(554, AccountUtil.sercretKey));
 }
Beispiel #18
0
 protected void PopulateRejectReason(Message reject, string text)
 {
     reject.SetField(new Fields.Text(text));
 }
Beispiel #19
0
 protected void PopulateSessionRejectReason(Message reject, int field, string text, bool includeFieldInfo)
 {
     if (this.SessionID.BeginString.CompareTo(FixValues.BeginString.FIX42) >= 0)
     {
         reject.SetField(new Fields.RefTagID(field));
         reject.SetField(new Fields.Text(text));
     }
     else
     {
         if(includeFieldInfo)
             reject.SetField(new Fields.Text(text + " (" + field + ")"));
         else
             reject.SetField(new Fields.Text(text));
     }
 }
Beispiel #20
0
        public void FromApp(QuickFix.Message msg, SessionID sessionID)
        {
            logMe("\r\n \r\n" + "FromApp :" + msg.ToString());

            try
            {
                if (msg is QuickFix.FIX42.OrderCancelReject)
                {
                    Console.WriteLine("Order Cancel Reject event raised");
                    QuickFix.FIX42.OrderCancelReject er = (QuickFix.FIX42.OrderCancelReject)msg;

                    if (er.IsSetClOrdID())
                    {
                        Console.WriteLine("ClOrdID : " + er.ClOrdID);
                    }
                    if (er.IsSetOrigClOrdID())
                    {
                        Console.WriteLine("OrigClOrdID : " + er.OrigClOrdID);
                    }
                    if (er.IsSetOrdStatus())
                    {
                        Console.WriteLine("OrderStatus : " + er.OrdStatus);
                    }
                    if (er.IsSetCxlRejResponseTo())
                    {
                        Console.WriteLine("CxlRejResponseTo : " + er.CxlRejResponseTo);
                    }
                    if (er.IsSetCxlRejReason())
                    {
                        Console.WriteLine("CxlRejReason : " + er.CxlRejReason);
                    }
                    if (er.IsSetOrderID())
                    {
                        Console.WriteLine("OrderID : " + er.OrderID);
                    }

                    if (er.CxlRejResponseTo.getValue() == CxlRejResponseTo.ORDER_CANCEL_REQUEST)
                    {
                        // Order Cancel Rejected reason
                        // 1= UNKNOWN_ORDER, 2 = Broker Option, 3 = Order already in Pending Cancel or Pending Replace status

                        string orderDetails = "CANCEL_REJECTED";
                        Int32  origOrderID  = -1;
                        if (er.IsSetOrigClOrdID())
                        {
                            origOrderID = Convert.ToInt32(er.OrigClOrdID.getValue());
                        }
                        Orders o = new Orders();
                        if (er.IsSetEncodedText())
                        {
                            orderDetails += " : " + er.EncodedText.getValue();
                        }
                        o.FIXResponseCanModRejectHandler(Convert.ToInt32(er.ClOrdID.getValue()), er.OrderID.getValue(), origOrderID, er.CxlRejResponseTo.getValue(), "CANCEL_" + getRejectType(er.CxlRejReason), orderDetails);
                    }
                    else if (er.CxlRejResponseTo.getValue() == CxlRejResponseTo.ORDER_CANCEL_REPLACE_REQUEST)
                    {
                        // Order modification Rejected reason
                        // 1 = Broker Option
                        // 3 = Order already in Pending Cancel or Pending Replace status

                        string orderDetails = "MODIFY_REJECTED";
                        Int32  origOrderID  = -1;
                        if (er.IsSetOrigClOrdID())
                        {
                            origOrderID = Convert.ToInt32(er.OrigClOrdID.getValue());
                        }
                        Orders o = new Orders();
                        if (er.IsSetEncodedText())
                        {
                            orderDetails += " : " + er.EncodedText.getValue();
                        }
                        o.FIXResponseCanModRejectHandler(Convert.ToInt32(er.ClOrdID.getValue()), er.OrderID.getValue(), origOrderID, er.CxlRejResponseTo.getValue(), "MODIFY_" + getRejectType(er.CxlRejReason), orderDetails);
                    }
                }
                else if (msg is QuickFix.FIX42.ExecutionReport)
                {
                    string ordTypeField = msg.GetField(40);
                    if (ordTypeField == "1")
                    {
                        IField field = new DecimalField(44, 0);
                        msg.SetField(field);
                    }

                    QuickFix.FIX42.ExecutionReport er = (QuickFix.FIX42.ExecutionReport)msg;
                    string orderDetails = Convert.ToString(er.ExecType.getValue()) + "|" + er.OrderQty.getValue() + "|" + er.Price.getValue() + "|" + er.LastShares.getValue() + "|" + er.LastPx.getValue() + "|" + er.CumQty.getValue() + "|" + er.AvgPx.getValue() + "|" + er.OrdType.getValue() + "|";
                    if (er.IsSetText())
                    {
                        orderDetails = orderDetails + er.Text + "|";
                    }
                    else
                    {
                        orderDetails = orderDetails + "NULL|";
                    }

                    logMe("\r\n \r\n" + "Got execution Report - ExecType = " + orderDetails);
                    Console.WriteLine("\r\n \r\n" + "Got execution Report - ExecType = " + orderDetails);
                    Orders o = new Orders();
                    if (er.ExecType.getValue() == ExecType.FILL || er.ExecType.getValue() == ExecType.PARTIAL_FILL)
                    {
                        o.FIXResponseHandlerForFill(Convert.ToInt32(er.ClOrdID.getValue()), er.OrderID.getValue(), (float)Convert.ToDouble(er.OrderQty.getValue()), (float)Convert.ToDouble(er.LastPx.getValue()), (float)Convert.ToDouble(er.LastShares.getValue()), getExecType(er.ExecType), er.ExecType.getValue());
                    }
                    else
                    {
                        Int32 origOrderID = -1;
                        float price       = -1;
                        char  orderType   = '2';
                        if (er.IsSetOrigClOrdID())
                        {
                            origOrderID = Convert.ToInt32(er.OrigClOrdID.getValue());
                        }
                        if (er.IsSetPrice())
                        {
                            price = (float)Convert.ToDouble(er.Price.getValue());
                        }
                        if (er.IsSetOrdType())
                        {
                            orderType = er.OrdType.getValue();
                        }

                        //orderid is string since value is too large for int variable
                        o.FIXResponseHandler(Convert.ToInt32(er.ClOrdID.getValue()), er.OrderID.getValue(), origOrderID, er.ExecType.getValue(), getExecType(er.ExecType), orderDetails, price, orderType);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("exception(FixClient FromAPP) " + e.Message);
            }
        }