示例#1
0
        public bool RequestMarketData(IMarketDataRequest mdRequest)
        {
            var key         = new Tuple <string, string, string>(mdRequest.Symbol, mdRequest.Tier, mdRequest.Tenor);
            var unsubscribe = false;
            var requestId   = string.Empty;

            if (mdRequest.IsSubscribe)
            {
                if (_marketDataRequests.ContainsKey(key))
                {
                    _marketDataRequests[key] = new Tuple <string, int>(_marketDataRequests[key].Item1, _marketDataRequests[key].Item2 + 1);
                    return(true);
                }

                _marketDataRequests.Add(key, new Tuple <string, int>(mdRequest.ClientRequestId, 1));
                requestId = mdRequest.ClientRequestId;
            }
            else
            {
                if (!_marketDataRequests.ContainsKey(key))
                {
                    return(false);
                }

                _marketDataRequests[key] = new Tuple <string, int>(_marketDataRequests[key].Item1, _marketDataRequests[key].Item2 - 1);

                if (_marketDataRequests[key].Item2 <= 0)
                {
                    unsubscribe = true;
                    requestId   = _marketDataRequests[key].Item1;
                    _marketDataRequests.Remove(key);
                }
            }

            string tag6217 = "";

            if (mdRequest.Tenor == "SP")
            {
                tag6217 = "0";   // Spot
            }
            else
            {
                tag6217 = "2";  // FORWARD_POINT
            }

            try {
                var tags = new[] {
                    new Tuple <int, string>(35, "V"),
                    new Tuple <int, string>(34, SequenceId.ToString(CultureInfo.InvariantCulture)),
                    new Tuple <int, string>(49, SenderId),
                    new Tuple <int, string>(50, mdRequest.Tier),
                    new Tuple <int, string>(115, OnBehalfOf),
                    //new Tuple<int, string>(116, "Tan Quach"),
                    new Tuple <int, string>(56, TargetId),
                    new Tuple <int, string>(52, DateTime.Now.ToString("yyyyMMdd-HH:mm:ss.fff")),
                    new Tuple <int, string>(262, requestId),
                    new Tuple <int, string>(263, unsubscribe ? "2" : "1"),
                    new Tuple <int, string>(264, "0"),
                    new Tuple <int, string>(265, "0"),
                    new Tuple <int, string>(146, "1"),
                    new Tuple <int, string>(55, mdRequest.Symbol),
                    // new Tuple<int, string>(167, "FOR"),
                    new Tuple <int, string>(64, mdRequest.SettlementDate.ToString("yyyyMMdd")),
                    new Tuple <int, string>(6215, mdRequest.Tenor),
                    new Tuple <int, string>(6217, tag6217),
                    new Tuple <int, string>(267, "2"),
                    new Tuple <int, string>(269, "0"),
                    new Tuple <int, string>(269, "1")
                };

                SendFixMessage(tags);
            } catch (Exception ex) {
                _logger.WriteLine("{0:yyyy-MM-dd HH:mm:ss.fff} - Failed to send market data requests, {1}", DateTime.Now, ex.Message);
                return(false);
            }

            return(true);
        }
示例#2
0
 public PricingRequest(IMarketDataRequest request) : this(request.ClientRequestId, request.Symbol, request.Tier)
 {
     NearTenor          = request.Tenor;
     NearSettlementDate = request.SettlementDate;
     Side = "2-Way";
 }