Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        /// <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}");
                    }
                }
            }
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 private static void addMDType(MarketDataRequest tickerRequest, char type)
 {
     MarketDataRequest.NoMDEntryTypesGroup g0 = new MarketDataRequest.NoMDEntryTypesGroup();
     g0.Set(new MDEntryType(type));
     tickerRequest.AddGroup(g0);
 }
Ejemplo n.º 7
0
 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);
        }
Ejemplo n.º 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();
        }