Пример #1
0
 /// <summary>
 /// ���͸��Զ˵ĻỰ�㱨�ģ�ͨ��CONSOLE�����
 /// </summary>
 /// <param name="message"></param>
 /// <param name="pSessionID"></param>
 public void toAdmin(QuickFix.Message message, QuickFix.SessionID pSessionID)
 {
     if (message is QuickFix42 .Logon )//ȷ���ǵ�½����
     {
         string rawdata = option .Rawdata ;
         message.setString(96, rawdata);
     }
     else if (message is QuickFix42.Logout)
     {
         if (message.isSetField(58))
         {
             string note = message.getString(58);
             if (OnError != null)
             {
                 OnError(note, EventArgs.Empty);
             }
         }
     }
     //Console.WriteLine("Enter toAdmin");
     //Console.WriteLine(message.ToString());
     //Console.WriteLine("Exit toAdmin");
       //  MessageBox.Show("toAdmin"+message .ToString ());  //20091229
 }
Пример #2
0
        /// <summary>
        /// Process general purpose exec i.e. some type of order status change
        /// </summary>
        /// <param name="myOrder"></param>
        /// <param name="myExec"></param>
        private void processGeneralExecRep(ref KaiTrade.Interfaces.Order myOrder, QuickFix.Message myExec)
        {
            if (m_ORLog.IsInfoEnabled)
            {
                m_ORLog.Info("processGeneralExecRep:");
            }
            QuickFix.OrdStatus myOrdStatus = new QuickFix.OrdStatus();
            QuickFix.LeavesQty myLeavesQty = new QuickFix.LeavesQty();
            QuickFix.CumQty myCumQty = new QuickFix.CumQty();
            myExec.getField(myOrdStatus);
            myOrder.OrdStatus = myOrdStatus;

            switch (myOrdStatus.getValue())
            {
                case QuickFix.OrdStatus.CANCELED:
                    if (order.LastOrderCommand == KaiTrade.Interfaces.LastOrderCommand.cancel)
                    {
                        order.LastOrderCommand = KaiTrade.Interfaces.LastOrderCommand.none;
                    }

                    myLeavesQty = new QuickFix.LeavesQty(0.0);
                    myOrder.LeavesQty = myLeavesQty;
                    break;
                case QuickFix.OrdStatus.NEW:

                    if (order.LastOrderCommand == KaiTrade.Interfaces.LastOrderCommand.neworder)
                    {
                        order.LastOrderCommand = KaiTrade.Interfaces.LastOrderCommand.none;
                    }
                    else if (order.LastOrderCommand == KaiTrade.Interfaces.LastOrderCommand.replace)
                    {
                        order.LastOrderCommand = KaiTrade.Interfaces.LastOrderCommand.none;
                    }
                    else
                    {
                        m_Log.Error("HandleExecReport:OrderStatus new not expected");
                    }
                    myOrder.LeavesQty  = new QuickFix.LeavesQty(myOrder.OrderQty.getValue());
                    myOrder.CumQty = new QuickFix.CumQty(0.0);
                    break;
                case QuickFix.OrdStatus.REPLACED:
                    if (order.LastOrderCommand == KaiTrade.Interfaces.LastOrderCommand.replace)
                    {
                        order.LastOrderCommand = KaiTrade.Interfaces.LastOrderCommand.none;
                    }
                    if (myExec.isSetField(myLeavesQty))
                    {
                        myExec.getField(myLeavesQty);
                        myOrder.LeavesQty = myLeavesQty;
                    }
                    if (myExec.isSetField(myCumQty))
                    {
                        myExec.getField(myCumQty);
                        myOrder.CumQty = myCumQty;
                    }

                    break;
                case QuickFix.OrdStatus.PENDING_REPLACE:
                    if (order.LastOrderCommand == KaiTrade.Interfaces.LastOrderCommand.replace)
                    {
                        m_ORLog.Error("Pending replace received but last command is not replace");
                    }

                    break;
                case QuickFix.OrdStatus.REJECTED:
                    if (order.LastOrderCommand == KaiTrade.Interfaces.LastOrderCommand.cancel)
                    {
                        order.LastOrderCommand = KaiTrade.Interfaces.LastOrderCommand.none;
                    }
                    else if (order.LastOrderCommand == KaiTrade.Interfaces.LastOrderCommand.neworder)
                    {
                        order.LastOrderCommand = KaiTrade.Interfaces.LastOrderCommand.none;
                    }
                    else if (order.LastOrderCommand == KaiTrade.Interfaces.LastOrderCommand.replace)
                    {
                        order.LastOrderCommand = KaiTrade.Interfaces.LastOrderCommand.none;
                    }
                    break;
                default:
                    break;
            }
        }
Пример #3
0
        /// <summary>
        /// Create a synthetic order
        /// </summary>
        /// <param name="myMsg"></param>
        /// <returns>n order</returns>
        public KaiTrade.Interfaces.Order CreateSyntheticOrder(QuickFix.Message myFixMsg)
        {
            KaiTrade.Interfaces.Order myOrder = null;
            try
            {
                if (m_Log.IsInfoEnabled)
                {
                    m_Log.Info("exec report recd:" + myFixMsg.ToString());
                }

                // Get order manager
                KaiTrade.Interfaces.OrderManager myOM = KTAFacade.Instance().Factory.GetOrderManager();

                // these fields must be present
                QuickFix.OrderID myOrderID = new QuickFix.OrderID();
                myFixMsg.getField(myOrderID);

                QuickFix.ExecType myExecType = new QuickFix.ExecType();
                myFixMsg.getField(myExecType);

                QuickFix.ExecID myExecID = new QuickFix.ExecID();
                myFixMsg.getField(myExecID);

                QuickFix.OrdStatus myOrdStatus = new QuickFix.OrdStatus();
                myFixMsg.getField(myOrdStatus);

                // Create the order
                myOrder = myOM.CreateOrder();

                // we need the clordid to update an existing order - if
                // it is not present or unknow we create a synthetic order
                QuickFix.ClOrdID myClOrdID = new QuickFix.ClOrdID();
                if (myFixMsg.isSetField(myClOrdID))
                {
                    myOrder.ClOrdID = myClOrdID;
                }
            }
            catch (Exception myE)
            {
                m_Log.Error("CreateSyntheticOrder", myE);
            }
            return myOrder;
        }
Пример #4
0
        /// <summary>
        /// Process partial or fully filled
        /// </summary>
        /// <param name="myOrder"></param>
        /// <param name="myExec"></param>
        private void processFill(ref KaiTrade.Interfaces.Order myOrder, QuickFix.Message myExec)
        {
            K2ServiceInterface.ITransaction myTrn = null;
            try
            {
                // if the object supports transactions do the update as a trn
                myTrn = myOrder as K2ServiceInterface.ITransaction;
                if (myTrn != null)
                {
                    myTrn.StartUpdate();
                }
                // Get the currently executed quantity for chain of orders.
                QuickFix.CumQty myCumQty = new QuickFix.CumQty();
                myExec.getField(myCumQty);
                myOrder.CumQty = myCumQty;

                // Get quantity open for further execution (order qty - cum qty)
                QuickFix.LeavesQty myLeavesQty = new QuickFix.LeavesQty();
                myExec.getField(myLeavesQty);
                myOrder.LeavesQty = myLeavesQty;

                QuickFix.LastPx myLastPx = new QuickFix.LastPx();
                if (myExec.isSetField(myLastPx))
                {
                    myExec.getField(myLastPx);
                    myOrder.LastPx = myLastPx;
                }

                QuickFix.AvgPx myAvgPx = new QuickFix.AvgPx();
                if (myExec.isSetField(myAvgPx))
                {
                    myExec.getField(myAvgPx);
                    myOrder.AvgPx = myAvgPx;
                }

                QuickFix.LastQty myLastQty = new QuickFix.LastQty();
                if (myExec.isSetField(myLastQty))
                {
                    myExec.getField(myLastQty);
                    myOrder.LastQty = myLastQty;
                }

                QuickFix.OrdStatus myOrdStatus = new QuickFix.OrdStatus();
                myExec.getField(myOrdStatus);
                myOrder.OrdStatus = myOrdStatus;
                // always signal the end of the update
                if (myTrn != null)
                {
                    myTrn.EndUpdate();
                }
            }
            catch (Exception myE)
            {
                m_Log.Error("processFill", myE);
                // always signal the end of the update
                if (myTrn != null)
                {
                    myTrn.EndUpdate();
                }
            }
        }