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}")); }); }
/** * 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); }
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); }
public virtual void onMessage(SecurityListRequest message, QuickFix.SessionID session) { throw new QuickFix.UnsupportedMessageType(); }
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(); }