private async Task Subscribe() { var request = new MarketDataRequest { MDReqID = new MDReqID(DateTime.UtcNow.Ticks.ToString()), SubscriptionRequestType = new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES), MarketDepth = new MarketDepth(50), MDUpdateType = new MDUpdateType(MDUpdateType.FULL_REFRESH), NoMDEntryTypes = new NoMDEntryTypes(2), NoRelatedSym = new NoRelatedSym(_configuration.SupportedCurrencySymbols.Count) }; var bidGroup = new MarketDataRequest.NoMDEntryTypesGroup { MDEntryType = new MDEntryType(MDEntryType.BID) }; var askGroup = new MarketDataRequest.NoMDEntryTypesGroup { MDEntryType = new MDEntryType(MDEntryType.OFFER) }; foreach (var mapping in _configuration.SupportedCurrencySymbols) { var noRelatedSymGroup = new MarketDataRequest.NoRelatedSymGroup { Symbol = _modelConverter.ConvertLykkeSymbol(mapping.LykkeSymbol) }; request.AddGroup(noRelatedSymGroup); } request.AddGroup(bidGroup); request.AddGroup(askGroup); await Messenger.SendRequestAsync(request, CancellationToken); }
public static MarketDataRequest MakeMarketDataRequest() { //let ms = System.DateTimeOffset.Now.ToUnixTimeMilliseconds() //let mdr = MkMarketDataRequest( // MDReqID(sprintf "MDRQ-%d" ms), // SubscriptionRequestType.SnapshotPlusUpdates, // MarketDepth 1, // [MDEntryType.Bid; MDEntryType.Offer] |> List.map MkNoMDEntryTypesGrp, // [MkInstrument(Fix44.Fields.Symbol "EUR/USD")] |> List.map MkMarketDataRequestNoRelatedSymGrp // ) var msg = new MarketDataRequest(); //var ms = System.DateTimeOffset.Now.ToUnixTimeMilliseconds(); var ms = 1489416392996; msg.MDReqID = new MDReqID($"MDRQ-{ms}"); msg.SubscriptionRequestType = new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES); msg.MarketDepth = new MarketDepth(1); var entryTypesGroup = new MarketDataRequest.NoMDEntryTypesGroup(); entryTypesGroup.MDEntryType = new MDEntryType(MDEntryType.BID); msg.AddGroup(entryTypesGroup); entryTypesGroup.MDEntryType = new MDEntryType(MDEntryType.OFFER); msg.AddGroup(entryTypesGroup); var symGroup = new MarketDataRequest.NoRelatedSymGroup(); symGroup.Symbol = new Symbol("EUR/USD"); msg.AddGroup(symGroup); return(msg); }
/// <summary> /// Creates and returns a new <see cref="MarketDataRequest"/> FIX message. /// </summary> /// <param name="symbol">The symbol.</param> /// <param name="marketDepth">The market depth.</param> /// <param name="timeNow">The time now.</param> /// <returns>The FIX message.</returns> public static MarketDataRequest Create(string symbol, int marketDepth, ZonedDateTime timeNow) { Debug.NotEmptyOrWhiteSpace(symbol, nameof(symbol)); Debug.NotNegativeInt32(marketDepth, nameof(marketDepth)); Debug.NotDefault(timeNow, nameof(timeNow)); var marketDataEntryGroup1 = new MarketDataRequest.NoMDEntryTypesGroup(); marketDataEntryGroup1.Set(new MDEntryType(MDEntryType.BID)); var marketDataEntryGroup2 = new MarketDataRequest.NoMDEntryTypesGroup(); marketDataEntryGroup2.Set(new MDEntryType(MDEntryType.OFFER)); var symbolGroup = new MarketDataRequest.NoRelatedSymGroup(); symbolGroup.SetField(new Symbol(symbol)); var message = new MarketDataRequest( new MDReqID($"MD_{timeNow.TickOfDay.ToString()}"), new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES), new MarketDepth(marketDepth)); message.Set(new MDUpdateType(0)); // val:1 to receive shortened message message.AddGroup(marketDataEntryGroup1); message.AddGroup(marketDataEntryGroup2); message.Set(new NoRelatedSym(1)); message.AddGroup(symbolGroup); return(message); }
public async Task ShouldReceiveOrderBooks() { await _connector.ConnectAsync(CancellationToken.None); WaitForState(FixConnectorState.Connected, 30); var symbols = new[] { "USDCHF", "EURUSD" }; var request = new MarketDataRequest() { MDReqID = new MDReqID(DateTime.UtcNow.Ticks.ToString()), SubscriptionRequestType = new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES), MarketDepth = new MarketDepth(50), MDUpdateType = new MDUpdateType(MDUpdateType.FULL_REFRESH), NoMDEntryTypes = new NoMDEntryTypes(2), NoRelatedSym = new NoRelatedSym(symbols.Length) }; var bidGroup = new MarketDataRequest.NoMDEntryTypesGroup { MDEntryType = new MDEntryType(MDEntryType.BID) }; var askGroup = new MarketDataRequest.NoMDEntryTypesGroup { MDEntryType = new MDEntryType(MDEntryType.OFFER) }; foreach (var symb in symbols) { var noRelatedSymGroup = new MarketDataRequest.NoRelatedSymGroup { Symbol = new Symbol(symb) }; request.AddGroup(noRelatedSymGroup); } request.AddGroup(bidGroup); request.AddGroup(askGroup); await _connector.SendRequestAsync(request, CancellationToken.None); for (int i = 0; i < symbols.Length; i++) { var resp = await _connector.GetResponseAsync(CancellationToken.None); if (resp is MarketDataSnapshotFullRefresh snapshot) { var symbol = snapshot.Symbol.Obj; for (int j = 1; j <= snapshot.NoMDEntries.Obj; j++) { var ob = resp.GetGroup(j, new MarketDataSnapshotFullRefresh.NoMDEntriesGroup()); var dir = ob.GetField(new MDEntryType()).Obj; var price = ob.GetField(new MDEntryPx()).Obj; var size = ob.GetField(new MDEntrySize()).Obj; await _output.WriteInfoAsync("", "", $"Sym:{symbol} side:{dir} price:{price} size:{size}"); } } } }
public void Subscribe(string symbol, SessionID sessionId) { var marketDataRequest = new MarketDataRequest { MDReqID = new MDReqID(symbol), SubscriptionRequestType = new SubscriptionRequestType('1'), //incremental refresh MarketDepth = new MarketDepth(1), //yes market depth need MDUpdateType = new MDUpdateType(1) // }; var relatedSymbol = new MarketDataRequest.NoRelatedSymGroup { Symbol = new Symbol(symbol) }; marketDataRequest.AddGroup(relatedSymbol); var noMdEntryTypes = new MarketDataRequest.NoMDEntryTypesGroup(); var mdEntryTypeBid = new MDEntryType('0'); noMdEntryTypes.MDEntryType = mdEntryTypeBid; marketDataRequest.AddGroup(noMdEntryTypes); noMdEntryTypes = new MarketDataRequest.NoMDEntryTypesGroup(); var mdEntryTypeOffer = new MDEntryType('1'); noMdEntryTypes.MDEntryType = mdEntryTypeOffer; marketDataRequest.AddGroup(noMdEntryTypes); //Send message Session.SendToTarget(marketDataRequest, sessionId); }
private static void addMDType(MarketDataRequest tickerRequest, char type) { MarketDataRequest.NoMDEntryTypesGroup g0 = new MarketDataRequest.NoMDEntryTypesGroup(); g0.Set(new MDEntryType(type)); tickerRequest.AddGroup(g0); }
private static void addMDType(MarketDataRequest tickerRequest, char type) { MarketDataRequest.NoMDEntryTypesGroup g0 = new MarketDataRequest.NoMDEntryTypesGroup(); g0.Set(new MDEntryType(type)); tickerRequest.AddGroup(g0); }
public void Subscribe(string symbol, SessionID sessionId) { var marketDataRequest = new MarketDataRequest { MDReqID = new MDReqID(symbol), SubscriptionRequestType = new SubscriptionRequestType('1'), //incremental refresh MarketDepth = new MarketDepth(1), //yes market depth need MDUpdateType = new MDUpdateType(1) // }; var relatedSymbol = new MarketDataRequest.NoRelatedSymGroup { Symbol = new Symbol(symbol) }; marketDataRequest.AddGroup(relatedSymbol); var noMdEntryTypes = new MarketDataRequest.NoMDEntryTypesGroup(); var mdEntryTypeBid = new MDEntryType('0'); noMdEntryTypes.MDEntryType = mdEntryTypeBid; marketDataRequest.AddGroup(noMdEntryTypes); noMdEntryTypes = new MarketDataRequest.NoMDEntryTypesGroup(); var mdEntryTypeOffer = new MDEntryType('1'); noMdEntryTypes.MDEntryType = mdEntryTypeOffer; marketDataRequest.AddGroup(noMdEntryTypes); //Send message Session.SendToTarget(marketDataRequest, sessionId); }
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(); }