private void QueryMarketDataRequest()
        {
            QuickFix.FIX44.MarketDataRequest result = new QuickFix.FIX44.MarketDataRequest();
            result.SetField(new MDReqID(DateTime.Now.Millisecond.ToString()));

            var noContraBrokersGroup = new QuickFix.FIX44.ExecutionReport.NoContraBrokersGroup();

            noContraBrokersGroup.Set(QueryPool());
            result.AddGroup(noContraBrokersGroup);

            QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup symGroup = new QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup();
            symGroup.SetField(QuerySymbol());
            symGroup.SetField(new MDUpdateType(MDUpdateType.INCREMENTAL_REFRESH));
            symGroup.SetField(new MarketDepth(0));
            symGroup.SetField(new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES));

            QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup typesGroup = new QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup();
            typesGroup.SetField(new MDEntryType(MDEntryType.BID));
            result.AddGroup(typesGroup);

            typesGroup = new QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup();
            typesGroup.SetField(new MDEntryType(MDEntryType.OFFER));
            result.AddGroup(symGroup);

            Console.WriteLine(result);

            SendMessage(result, ".MD");
        }
示例#2
0
        private QuickFix.FIX44.NewOrderSingle QueryNewOrderSingle44()
        {
            QuickFix.FIX44.NewOrderSingle newOrderSingle = new QuickFix.FIX44.NewOrderSingle();
            newOrderSingle.ClOrdID = new ClOrdID(DateTime.Now.Millisecond.ToString());
            var noContraBrokersGroup = new QuickFix.FIX44.ExecutionReport.NoContraBrokersGroup();

            noContraBrokersGroup.Set(QueryPool());
            newOrderSingle.AddGroup(noContraBrokersGroup);
            newOrderSingle.Symbol  = QuerySymbol();
            newOrderSingle.Side    = QuerySide();
            newOrderSingle.OrdType = new OrdType(OrdType.MARKET);
            newOrderSingle.Set(QueryOrderQty());
            newOrderSingle.Set(new TimeInForce(TimeInForce.FILL_OR_KILL));
            return(newOrderSingle);
        }
示例#3
0
        public void OnMessage(QuickFix.FIX44.ExecutionReport m, SessionID s)
        {
            var utcNow = DateTime.UtcNow;

            var stringBuilder = new StringBuilder("***Execution report***:\r\n");

            stringBuilder.Append("================\r\n");
            for (int i = 1; i <= m.GetInt(QuickFix.Fields.Tags.NoContraBrokers); i++)
            {
                var group = new QuickFix.FIX44.ExecutionReport.NoContraBrokersGroup();
                m.GetGroup(i, group);
                stringBuilder.Append("LP:").Append(group.ContraBroker.getValue()).Append("\r\n");
            }
            stringBuilder.Append("Price:").Append(m.AvgPx.getValue()).Append("\r\n");
            stringBuilder.Append("Side:").Append(m.Side.getValue() == '1'?"Buy" :"Sell").Append("\r\n");
            stringBuilder.Append("Quantity:").Append(m.OrderQty.getValue()).Append("\r\n");

            var TimeIn        = default(DateTime);
            var TimeOut       = default(DateTime);
            var BrokerReceipt = default(DateTime);
            var BrokerExec    = default(DateTime);

            for (int i = 1; i <= m.GetInt(QuickFix.Fields.Tags.NoTrdRegTimestamps); i++)
            {
                var group = new QuickFix.FIX44.CollateralReport.NoTrdRegTimestampsGroup();
                m.GetGroup(i, group);
                switch (i)
                {
                case 1:
                    TimeIn = group.TrdRegTimestamp.getValue();
                    break;

                case 2:
                    TimeOut = group.TrdRegTimestamp.getValue();
                    break;

                case 3:
                    BrokerReceipt = group.TrdRegTimestamp.getValue();
                    break;

                case 4:
                    BrokerExec = group.TrdRegTimestamp.getValue();
                    break;
                }
            }
            var clientSentDate = this._orderClientTimestamp[m.ClOrdID.getValue()];


            stringBuilder.Append("TimeStamps:\r\n");
            stringBuilder.Append("Customer sent:").Append(clientSentDate.ToString("h:m:s.fff")).Append("\r\n");
            stringBuilder.Append("Time in:").Append(TimeIn.ToString("h:m:s.fff")).Append("\r\n");
            stringBuilder.Append("Broker receipt:").Append(BrokerReceipt.ToString("h:m:s.fff")).Append("\r\n");
            stringBuilder.Append("Broker exec:").Append(BrokerExec.ToString("h:m:s.fff")).Append("\r\n");
            stringBuilder.Append("Time out:").Append(TimeOut.ToString("h:m:s.fff")).Append("\r\n");
            stringBuilder.Append("Customer exec:").Append(utcNow.ToString("h:m:s.fff")).Append("\r\n");


            stringBuilder.Append("Customer       |  IdsRoot   |  LP\r\n").Append("\r\n");
            stringBuilder.Append("Customer sent->|            |\r\n").Append("\r\n");
            stringBuilder.Append("               |-> Time in  |\r\n").Append("\r\n");
            stringBuilder.Append("               |            |-> Broker Receipt\r\n").Append("\r\n");
            stringBuilder.Append("               |            |<- Broker exec\r\n").Append("\r\n");
            stringBuilder.Append("               |<- Time out |\r\n").Append("\r\n");
            stringBuilder.Append("Customer exec<-|            |\r\n").Append("\r\n");
            Console.WriteLine(stringBuilder.ToString());
        }