Exemplo n.º 1
0
 private unsafe void OnMarketSnapshotHandler(MarketDepthSocket socket, ref MarketSnapshotLevel3 marketSnapshot)
 {
     _marketSnapshotBuilder.ReBuild(ref marketSnapshot);
     if (AddMessageToFileLog != null)
     {
         StringBuilder log = new StringBuilder($"----- IN  MS - {DateTime.Now.ToString("hh:mm:ss.fff")}{Environment.NewLine}");
         for (int i = 0; i < MarketSnapshotLevel3.MaxDepth; i++)
         {
             log.AppendLine($"     BP={marketSnapshot.BidPrices[i].ToString("F11")} BV={marketSnapshot.BidVolumes[i].ToString("F11")}");
             log.AppendLine($"     SP={marketSnapshot.AskPrices[i].ToString("F11")} SV={marketSnapshot.AskVolumes[i].ToString("F11")}{Environment.NewLine}");
         }
         log.AppendLine($"----- OUT  MS");
         AddMessageToFileLog?.Invoke(log.ToString());
     }
 }
Exemplo n.º 2
0
        public void Run(IPAddress serverAddress, int serverPort,
                        ref CancellationTokenSource cancellationTokenSource,
                        ref ManualResetEventSlim enviromentExitWait)
        {
            _enviromentExitWait      = enviromentExitWait;
            _cancellationTokenSource = cancellationTokenSource;
            _marketSnapshotBuilder   = new MarketSnapshotBuilder();

            var socket = new MarketDepthSocket();

            _marketDepthSocket             = socket;
            socket.OnError                += OnErrorHandler;
            socket.OnDisconnected         += OnDisconnectedHandler;
            socket.OnConnected            += OnConnectedHandler;
            socket.OnException            += OnExceptionHandler;
            socket.OnMarketChange         += OnMarketChangeHandler;
            socket.OnMarketSnapshotLevel3 += OnMarketSnapshotHandler;

            void RunSocket()
            {
                try
                {
                    socket.Connect(new IPEndPoint(serverAddress.MapToIPv4(), serverPort));
                    socket.WaitResponses(_cancellationTokenSource.Token);
                }
                catch
                {
                    try
                    {
                        socket.Dispose();
                    }
                    catch { }
                }
                finally
                {
                    Dispose();
                }
            }

            Task.Factory.StartNew(
                () => RunSocket(),
                TaskCreationOptions.LongRunning);
        }
Exemplo n.º 3
0
        private void OnMarketChangeHandler(MarketDepthSocket marketDepthSocket, MarketChange marketChange)
        {
            _marketSnapshotBuilder.Build(ref marketChange);
            Interlocked.Increment(ref _countOfDimensions);

            if (AddMessageToFileLog != null)
            {
                string marketChangeType = "??";
                switch (marketChange.MarketChangeType)
                {
                case MarketChangeTypeCode.AskPriceByAddedOrder:
                    marketChangeType = "AA";
                    break;

                case MarketChangeTypeCode.AskPriceByCanceledOrder:
                    marketChangeType = "AC";
                    break;

                case MarketChangeTypeCode.AskPriceByExecutedOrder:
                    marketChangeType = "AE";
                    break;

                case MarketChangeTypeCode.BidPriceByAddedOrder:
                    marketChangeType = "BA";
                    break;

                case MarketChangeTypeCode.BidPriceByCanceledOrder:
                    marketChangeType = "BC";
                    break;

                case MarketChangeTypeCode.BidPriceByExecutedOrder:
                    marketChangeType = "BE";
                    break;

                case MarketChangeTypeCode.BidVolumeByAddedOrder:
                case MarketChangeTypeCode.BuyingVolumeByAddedOrder:
                    marketChangeType = "VABuy";
                    break;

                case MarketChangeTypeCode.BidVolumeByCanceledOrder:
                case MarketChangeTypeCode.BuyingVolumeByCanceledOrder:
                    marketChangeType = "VCB";
                    break;

                case MarketChangeTypeCode.BidVolumeByExecutedOrder:
                    marketChangeType = "VEB";
                    break;

                case MarketChangeTypeCode.BuyingVolumeInfoAdded:
                    marketChangeType = "IVB";
                    break;

                case MarketChangeTypeCode.AskVolumeByAddedOrder:
                case MarketChangeTypeCode.SellingVolumeByAddedOrder:
                    marketChangeType = "VAS";
                    break;

                case MarketChangeTypeCode.AskVolumeByCanceledOrder:
                case MarketChangeTypeCode.SellingVolumeByCanceledOrder:
                    marketChangeType = "VCS";
                    break;

                case MarketChangeTypeCode.AskVolumeByExecutedOrder:
                    marketChangeType = "VEA";
                    break;

                case MarketChangeTypeCode.SellingVolumeInfoAdded:
                    marketChangeType = "IVS";
                    break;
                }
                AddMessageToFileLog?.Invoke($"{DateTime.Now.ToString("mm:ss.fff")} P={marketChange.Price.ToString("F11")} V={marketChange.Volume.ToString("F11")} {marketChangeType}{Environment.NewLine}");
            }
        }