Exemple #1
0
            public void SecurityListclassTest()
            {
                var assetPairs  = privateApi.Assets.GetAssetPairs().GetResponseObject().FindAll(a => a.IsDisabled == false);
                var validAssets = privateApi.Assets.GetAssets(false).GetResponseObject().
                                  FindAll(a => a.IsDisabled == false).FindAll(a => a.IsTradable == true);

                assetPairs = assetPairs.FindAll(a =>
                                                a.IsDisabled == false
                                                ).FindAll(a =>
                                                          validAssets.Any(va => va.Id == a.BaseAssetId)
                                                          ).FindAll(a =>
                                                                    validAssets.Any(va => va.Id == a.QuotingAssetId)
                                                                    );

                var m = new SecurityListRequest
                {
                    SecurityReqID           = new SecurityReqID("42"),
                    SecurityListRequestType = new SecurityListRequestType(SecurityListRequestType.SYMBOL)
                };

                fixClient.Send(m);

                var response = fixClient.GetResponse <SecurityList>();

                Assert.That(response, Is.Not.Null);

                var sList = response.ToString();

                Assert.Multiple(() =>
                {
                    assetPairs.ForEach(a => Assert.That(sList, Does.Contain(a.Id), $"Security list does not contain asset pair {a.Id}"));
                });
            }
Exemple #2
0
        /**
         * Envia a mensagem FIX de SecurityListRequest, solicitando a lista de
         * todos os instrumentos do sinal de difusão BM&F.
         *
         */
        private void solicitaListaInstrumentos()
        {
            SecurityListRequest mensagemFIX = new SecurityListRequest();

            mensagemFIX.setField(
                new SecurityReqID(sessao.getSenderCompID()));
            mensagemFIX.setField(
                new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES));
            mensagemFIX.setField(
                new SecurityListRequestType(SecurityListRequestType.ALL_SECURITIES));

            mensagemFIX.getHeader().setField(
                new SenderCompID(sessao.getSenderCompID()));
            mensagemFIX.getHeader().setField(
                new TargetCompID(sessao.getTargetCompID()));

            try
            {
                logger.Info("Requisita lista de todos os instrumentos");
                Session.sendToTarget(mensagemFIX, sessao);
            }
            catch (SessionNotFound e)
            {
                logger.Error("Sessao invalida: " + e.Message);
            }
        }
        public void CancelarAssinaturaSecurityListConflated(string securityType, string product, string cfiCode, string securityReqID)
        {
            try
            {
                logger.InfoFormat("Cancelando SecurityList Product [{0}] Type [{1}] CFI[{2}] ReqID [{3}]",
                                  product, securityType, cfiCode, securityReqID);

                QuickFix.FIX44.SecurityListRequest secListReq = new SecurityListRequest();

                if (!String.IsNullOrEmpty(product))
                {
                    secListReq.Product = new QuickFix.Fields.Product(Convert.ToInt32(product));
                }

                if (!String.IsNullOrEmpty(securityType))
                {
                    secListReq.SecurityType = new QuickFix.Fields.SecurityType(securityType);
                }

                if (!String.IsNullOrEmpty(cfiCode))
                {
                    secListReq.CFICode = new QuickFix.Fields.CFICode(cfiCode);
                }

                secListReq.SecurityReqID           = new QuickFix.Fields.SecurityReqID(securityReqID);
                secListReq.SubscriptionRequestType = new QuickFix.Fields.SubscriptionRequestType(QuickFix.Fields.SubscriptionRequestType.DISABLE_PREVIOUS); // unsubscribe

                Session.SendToTarget(secListReq, _session);
            }
            catch (Exception ex)
            {
                logger.Error("CancelarAssinaturaSecurityListConflated: " + ex.Message, ex);
            }
        }
        public void RequestSecurityList(object state)
        {
            try
            {
                // So pra teste, aguarda 5 segundo antes de enviar request
                Thread.Sleep(15000);
                if (_secListMarketRequested < _channelUmdfConfig.Markets.Count)
                {
                    QuickFix.SessionID session = (QuickFix.SessionID)state;

                    ConflatedSecurityList secList = _channelUmdfConfig.Markets[_secListMarketRequested];

                    logger.Info("Requisitando SecurityList Market [" + secList.Product + "] Type [" + secList.SecurityType + "]");

                    QuickFix.FIX44.SecurityListRequest secListReq = new SecurityListRequest();

                    secListReq.Product = new QuickFix.Fields.Product(Convert.ToInt32(secList.Product));    //EQUITIES
                    secListReq.SubscriptionRequestType = new QuickFix.Fields.SubscriptionRequestType('1'); // Subscribe + update
                    secListReq.SecurityReqID           = new QuickFix.Fields.SecurityReqID(secList.SecurityReqIDPrefix + DateTime.Now.ToString("yyyyMMddHHmmssfff"));
                    secListReq.SecurityType            = new QuickFix.Fields.SecurityType(secList.SecurityType);

                    Session.SendToTarget(secListReq, session);

                    _secListMarketRequested++;
                }
            }
            catch (Exception ex)
            {
                logger.Error("RequestSecurityList: " + ex.Message, ex);
            }
        }
        /// <summary>
        /// Creates and returns a new <see cref="SecurityListRequest"/> FIX message for all symbols.
        /// </summary>
        /// <param name="timeNow">The time now.</param>
        /// <param name="subscribe">The flag indicating whether updates should be subscribed to.</param>
        /// <returns>The FIX message.</returns>
        public static SecurityListRequest Create(ZonedDateTime timeNow, bool subscribe = true)
        {
            Debug.NotDefault(timeNow, nameof(timeNow));

            var message = new SecurityListRequest();

            message.SetField(new SecurityReqID($"SLR_{timeNow.TickOfDay.ToString()}"));
            message.SetField(new SecurityListRequestType(SecurityListRequestType.ALL_SECURITIES));
            message.SetField(subscribe is true
                ? new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES)
                : new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT));

            return(message);
        }
Exemple #6
0
        private void PublishSecurityListRequest()
        {
            using (IConnection connection = queueConnectionFactory.CreateConnection())
            {
                using (IModel channel = connection.CreateModel())
                {
                    channel.CreateQueueIfNotExists(Queues.SecurityListRequestQueue);

                    var message = new SecurityListRequest()
                    {
                        RequestDate = DateTime.Today, MessageId = Guid.NewGuid().ToString()
                    };

                    channel.PublishMessageOnQueue(message, Queues.SecurityListRequestQueue);

                    logger.Log(LogLevel.Info, $"SecurityListRequest has been sent: RequestDate {message.RequestDate.Date}, MessageId {message.MessageId}");
                }
            }
        }
        public string EnviarAssinaturaSecurityListConflated(string securityType, string product, string cfiCode)
        {
            string seqlistReqID = "SECLST";

            try
            {
                logger.InfoFormat("Requisitando SecurityList Product [{0}] Type [{1}] CFI[{2}]",
                                  product, securityType, cfiCode);

                QuickFix.FIX44.SecurityListRequest secListReq = new SecurityListRequest();

                if (!String.IsNullOrEmpty(product) && !product.Equals("0"))
                {
                    secListReq.Product = new QuickFix.Fields.Product(Convert.ToInt32(product));
                    seqlistReqID      += "-" + product;
                }

                if (!String.IsNullOrEmpty(securityType))
                {
                    secListReq.SecurityType = new QuickFix.Fields.SecurityType(securityType);
                    seqlistReqID           += "-" + securityType;
                }

                if (!String.IsNullOrEmpty(cfiCode))
                {
                    secListReq.CFICode = new QuickFix.Fields.CFICode(cfiCode);
                    seqlistReqID      += "-" + cfiCode;
                }

                seqlistReqID            += "-" + DateTime.Now.ToString("yyyyMMddHHmmssfff");
                secListReq.SecurityReqID = new QuickFix.Fields.SecurityReqID(seqlistReqID);

                secListReq.SubscriptionRequestType = new QuickFix.Fields.SubscriptionRequestType('1'); // Subscribe + update

                Session.SendToTarget(secListReq, _session);
            }
            catch (Exception ex)
            {
                logger.Error("EnviarAssinaturaSecurityListConflated: " + ex.Message, ex);
            }

            return(seqlistReqID);
        }
Exemple #8
0
 public virtual void onMessage(SecurityListRequest message, QuickFix.SessionID session)
 {
     throw new QuickFix.UnsupportedMessageType();
 }
Exemple #9
0
        static void Main(string[] args)
        {
            TestFixApp testFixApp = new TestFixApp(args.FirstOrDefault());

            testFixApp.Start();

            Account account = new Account("54b97c9e-202b-11b2-be90-529049f1f1bb");
            ClOrdID clOrdId = new ClOrdID(Guid.NewGuid().ToString());
            Symbol  symbol  = new Symbol("BTC/USD");
            Side    side    = new Side(Side.BUY);

            #region SecurityListRequest
            SecurityListRequest securityListRequest = new SecurityListRequest(
                new SecurityReqID(Guid.NewGuid().ToString()),
                new SecurityListRequestType(SecurityListRequestType.SYMBOL)
                )
            {
                Symbol = symbol
            };
            Console.WriteLine("Press enter to next comand");
            Console.ReadLine();
            testFixApp.Send(securityListRequest);
            testFixApp.WaitResponces(1);
            #endregion SecurityListRequest

            #region MarketDataRequest
            MarketDataRequest marketDataRequest = new MarketDataRequest(
                new MDReqID(Guid.NewGuid().ToString()),
                new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT),
                new MarketDepth(5))
            {
                MDUpdateType = new MDUpdateType(MDUpdateType.FULL_REFRESH),
            };

            var bid = new MarketDataRequest.NoMDEntryTypesGroup()
            {
                MDEntryType = new MDEntryType(MDEntryType.BID)
            };
            var ask = new MarketDataRequest.NoMDEntryTypesGroup()
            {
                MDEntryType = new MDEntryType(MDEntryType.OFFER)
            };

            var symGroup = new MarketDataRequest.NoRelatedSymGroup
            {
                Symbol = symbol
            };

            marketDataRequest.AddGroup(bid);
            marketDataRequest.AddGroup(ask);
            marketDataRequest.AddGroup(symGroup);


            Console.WriteLine("Press enter to next comand");
            Console.ReadLine();
            testFixApp.Send(marketDataRequest);
            testFixApp.WaitResponces(1);
            #endregion MarketDataRequest

            #region NewOrderSingle
            NewOrderSingle newOrderSingle = new NewOrderSingle(
                clOrdId,
                symbol,
                side,
                new TransactTime(DateTime.Now),
                new OrdType(OrdType.LIMIT))
            {
                OrderQty     = new OrderQty(0.1m),
                Price        = new Price(1m),
                Account      = account,
                AcctIDSource = new AcctIDSource(AcctIDSource.OTHER)
            };

            Console.WriteLine("Press enter to next comand");
            Console.ReadLine();
            testFixApp.Send(newOrderSingle);
            testFixApp.WaitResponces(2);
            #endregion NewOrderSingle

            #region OrderCancelReplaceRequest
            OrderCancelReplaceRequest orderCancelReplaceRequest = new OrderCancelReplaceRequest(
                new OrigClOrdID(clOrdId.ToString()),
                clOrdId = new ClOrdID(Guid.NewGuid().ToString()),
                symbol,
                side,
                new TransactTime(DateTime.Now),
                new OrdType(OrdType.LIMIT))
            {
                Price    = new Price(2m),
                OrderQty = new OrderQty(0.2m)
            };

            Console.WriteLine("Press enter to next comand");
            Console.ReadLine();
            testFixApp.Send(orderCancelReplaceRequest);
            testFixApp.WaitResponces(2);
            #endregion OrderCancelReplaceRequest

            #region OrderStatusRequest
            OrderStatusRequest orderStatusRequest = new OrderStatusRequest(
                clOrdId,
                symbol,
                side
                );
            Console.WriteLine("Press enter to next comand");
            Console.ReadLine();
            testFixApp.Send(orderStatusRequest);
            testFixApp.WaitResponces(1);
            #endregion OrderStatusRequest

            #region OrderCancelRequest
            OrderCancelRequest orderCancelRequest = new OrderCancelRequest(
                new OrigClOrdID(clOrdId.ToString()),
                new ClOrdID(Guid.NewGuid().ToString()),
                symbol,
                side,
                new TransactTime(DateTime.Now)
                )
            {
                OrderQty = new OrderQty(0.1m)
            };

            Console.WriteLine("Press enter to next comand");
            Console.ReadLine();
            testFixApp.Send(orderCancelRequest);
            testFixApp.WaitResponces(3);
            #endregion region OrderCancelRequest

            #region OrderMassStatusRequest
            OrderMassStatusRequest orderMassStatusRequest = new OrderMassStatusRequest(
                new MassStatusReqID(Guid.NewGuid().ToString()),
                new MassStatusReqType(MassStatusReqType.STATUS_FOR_ALL_ORDERS))
            {
                Side   = side,
                Symbol = symbol
            };
            Console.WriteLine("Press enter to next comand");
            Console.ReadLine();
            testFixApp.Send(orderMassStatusRequest);
            #endregion OrderMassStatusRequest

            Console.WriteLine("Press enter to exit");
            Console.ReadLine();
            testFixApp.Stop();
        }