public void DoesRequestMatchFilter_InvalidExpiryEndDateWithHyphen_ArgumentExceptionThrown()
 {
     // Act
     var test = new RequestForQuoteImpl()
     {
         ExpiryDate = new DateTime(2012, 12, 23)
     }.DoesRequestMatchFilter(new Dictionary
                              <string,
                               string>()
     {
         { RequestForQuoteConstants.EXPIRY_DATE_CRITERION, "-INVALID_DATE" }
     });
 }
 public void DoesRequestMatchFilter_InvalidTradeStartDateWithHyphen_ArgumentExceptionThrown()
 {
     // Act
     var test = new RequestForQuoteImpl()
     {
         TradeDate = new DateTime(2012, 12, 23)
     }.DoesRequestMatchFilter(new Dictionary
                              <string,
                               string>()
     {
         { RequestForQuoteConstants.TRADE_DATE_CRITERION, "INVALID_DATE-" }
     });
 }
示例#3
0
        public void HandlePublishedNewRequestEvent(NewRequestForQuoteEventPayload eventPayload)
        {
            if (eventPayload == null)
            {
                throw new ArgumentNullException("eventPayload");
            }

            IRequestForQuote request = new RequestForQuoteImpl();

            request.Legs       = optionRequestParser.ParseRequest(eventPayload.NewRequestText.ToUpper(), request);
            request.Request    = eventPayload.NewRequestText;
            request.Status     = StatusEnum.PENDING;
            request.Identifier = -1;
            request.Client     = eventPayload.NewRequestClient;
            request.TradeDate  = DateTime.Today;
            if (request.Legs != null)
            {
                request.ExpiryDate = request.Legs[0].MaturityDate;
            }
            request.LotSize                 = 100;
            request.Multiplier              = 10;
            request.Contracts               = 100;
            request.NotionalFXRate          = 1;
            request.NotionalMillions        = 1;
            request.BookCode                = eventPayload.NewRequestBookCode;
            request.DayCountConvention      = 250.0;
            request.PremiumSettlementFXRate = 1;
            request.SalesCreditFXRate       = 1;
            request.IsOTC = true;
            request.SalesCreditPercentage         = 2;
            request.PremiumSettlementDaysOverride = 1;
            request.PremiumSettlementDate         = DateTime.Today.AddDays(request.PremiumSettlementDaysOverride);
            request.CalculatePricing(optionRequestPricer);

            TodaysRequests.Add(request);
            Requests.Clear();
            Requests.AddRange(TodaysRequests);
            NotifyPropertyChanged("Requests");

            // TODO - add all fields with their defaults.

            if (log.IsDebugEnabled)
            {
                log.Debug("Received and prcoessed published new request for quote => " + request);
            }
        }
示例#4
0
        /// <summary>
        /// Converts web service formatted RFQ into the GUI format.
        /// </summary>
        /// <param name="serviceRequest"> the web service formatted RFQ to be converted.</param>
        /// <returns> the GUI formatted RFQ.</returns>
        /// <exception cref="ArgumentNullException"> thrown if the web service formatted RFQ is null.</exception>
        /// <exception cref="InvalidDataException"> thrown if status or notionalCurrency or salesCreditCurrency or premiumSettlementCurrency or
        /// hedgeType or tradeDate or expiryDate or premiumSettlementDate is invalid and cannot be converted from the string representation.</exception>
        private IRequestForQuote CreateRequestForQuoteFromServiceRequest(requestDetailImpl serviceRequest)
        {
            if (serviceRequest == null)
            {
                throw new ArgumentNullException("serviceRequest");
            }

            StatusEnum convertedStatus = StatusEnum.PENDING;

            if (serviceRequest.status != null)
            {
                if (!Enum.TryParse(serviceRequest.status, true, out convertedStatus))
                {
                    throw new InvalidDataException("status");
                }
            }

            CurrencyEnum convertedNotionalCurrency = CurrencyEnum.USD;

            if (serviceRequest.notionalCurrency != null)
            {
                if (!Enum.TryParse(serviceRequest.notionalCurrency, true, out convertedNotionalCurrency))
                {
                    throw new InvalidDataException("notionalCurrency");
                }
            }

            CurrencyEnum convertedSalesCreditCurrency = CurrencyEnum.USD;

            if (serviceRequest.salesCreditCurrency != null)
            {
                if (!Enum.TryParse(serviceRequest.salesCreditCurrency, true, out convertedSalesCreditCurrency))
                {
                    throw new InvalidDataException("salesCreditCurrency");
                }
            }

            CurrencyEnum convertedPremiumSettlementCurrency = CurrencyEnum.USD;

            if (serviceRequest.premiumSettlementCurrency != null)
            {
                if (!Enum.TryParse(serviceRequest.premiumSettlementCurrency, true, out convertedPremiumSettlementCurrency))
                {
                    throw new InvalidDataException("premiumSettlementCurrency");
                }
            }

            HedgeTypeEnum convertedHedgeType = HedgeTypeEnum.FUTURES;

            if (serviceRequest.hedgeType != null)
            {
                if (!Enum.TryParse(serviceRequest.hedgeType, true, out convertedHedgeType))
                {
                    throw new InvalidDataException("hedgeType");
                }
            }

            var convertedTradeDate = DateTime.Now;

            if (serviceRequest.tradeDate != null)
            {
                if (!DateTime.TryParse(serviceRequest.tradeDate, out convertedTradeDate))
                {
                    throw new InvalidDataException("tradeDate");
                }
            }

            var convertedExpiryDate = DateTime.Now;

            if (serviceRequest.expiryDate != null)
            {
                if (!DateTime.TryParse(serviceRequest.expiryDate, out convertedExpiryDate))
                {
                    throw new InvalidDataException("expiryDate");
                }
            }

            var convertedPremiumSettlementDate = DateTime.Now;

            if (serviceRequest.premiumSettlementDate != null)
            {
                if (!DateTime.TryParse(serviceRequest.premiumSettlementDate, out convertedPremiumSettlementDate))
                {
                    throw new InvalidDataException("premiumSettlementDate");
                }
            }

            var requestForQuoteToCreate = new RequestForQuoteImpl();

            if (serviceRequest.legs != null && serviceRequest.legs.optionDetailList != null)
            {
                if (serviceRequest.legs.optionDetailList.Length > 0)
                {
                    requestForQuoteToCreate.Legs = new List <OptionDetailImpl>();
                }

                foreach (var leg in serviceRequest.legs.optionDetailList)
                {
                    var optionLeg = CreateRequestForQuoteLegFromServiceOptionLeg(leg);
                    optionLeg.ParentRequest = requestForQuoteToCreate;
                    requestForQuoteToCreate.AddLeg(optionLeg);
                }
            }

            requestForQuoteToCreate.BookCode   = serviceRequest.bookCode;
            requestForQuoteToCreate.Request    = serviceRequest.request;
            requestForQuoteToCreate.Identifier = serviceRequest.identifier;
            requestForQuoteToCreate.Client     = clientManager.GetClientWithMatchingIdentifier(serviceRequest.clientId);
            requestForQuoteToCreate.IsOTC      = serviceRequest.isOTC;
            requestForQuoteToCreate.Status     = convertedStatus;         //6

            requestForQuoteToCreate.TradeDate          = convertedTradeDate;
            requestForQuoteToCreate.ExpiryDate         = convertedExpiryDate;      //8
            requestForQuoteToCreate.DayCountConvention = serviceRequest.dayCountConvention;

            requestForQuoteToCreate.LotSize    = serviceRequest.lotSize;
            requestForQuoteToCreate.Multiplier = serviceRequest.multiplier;
            requestForQuoteToCreate.Contracts  = serviceRequest.contracts;

            requestForQuoteToCreate.NotionalMillions = serviceRequest.notionalMillions;
            requestForQuoteToCreate.NotionalFXRate   = serviceRequest.notionalFXRate;
            requestForQuoteToCreate.NotionalCurrency = convertedNotionalCurrency;              //15

            requestForQuoteToCreate.Delta = serviceRequest.delta;
            requestForQuoteToCreate.Gamma = serviceRequest.gamma;
            requestForQuoteToCreate.Vega  = serviceRequest.vega;
            requestForQuoteToCreate.Theta = serviceRequest.theta;
            requestForQuoteToCreate.Rho   = serviceRequest.rho;           //20

            requestForQuoteToCreate.AskFinalAmount       = serviceRequest.askFinalAmount;
            requestForQuoteToCreate.AskFinalPercentage   = serviceRequest.askFinalPercentage;
            requestForQuoteToCreate.AskImpliedVol        = serviceRequest.askImpliedVol;
            requestForQuoteToCreate.AskPremiumAmount     = serviceRequest.askPremiumAmount;
            requestForQuoteToCreate.AskPremiumPercentage = serviceRequest.askPremiumPercentage;             //35

            requestForQuoteToCreate.BidFinalAmount       = serviceRequest.bidFinalAmount;
            requestForQuoteToCreate.BidFinalPercentage   = serviceRequest.bidFinalPercentage;
            requestForQuoteToCreate.BidImpliedVol        = serviceRequest.bidImpliedVol;
            requestForQuoteToCreate.BidPremiumAmount     = serviceRequest.bidPremiumAmount;
            requestForQuoteToCreate.BidPremiumPercentage = serviceRequest.bidPremiumPercentage;             //40

            requestForQuoteToCreate.PremiumAmount     = serviceRequest.premiumAmount;
            requestForQuoteToCreate.PremiumPercentage = serviceRequest.premiumPercentage;
            requestForQuoteToCreate.ImpliedVol        = serviceRequest.impliedVol;      //43

            requestForQuoteToCreate.SalesCreditAmount     = serviceRequest.salesCreditAmount;
            requestForQuoteToCreate.SalesCreditPercentage = serviceRequest.salesCreditPercentage;
            requestForQuoteToCreate.SalesCreditCurrency   = convertedSalesCreditCurrency;
            requestForQuoteToCreate.SalesCreditFXRate     = serviceRequest.salesCreditFXRate;         //47

            requestForQuoteToCreate.PremiumSettlementCurrency     = convertedPremiumSettlementCurrency;
            requestForQuoteToCreate.PremiumSettlementDate         = convertedPremiumSettlementDate;
            requestForQuoteToCreate.PremiumSettlementDaysOverride = serviceRequest.premiumSettlementDaysOverride;
            requestForQuoteToCreate.PremiumSettlementFXRate       = serviceRequest.premiumSettlementFXRate;       //51

            requestForQuoteToCreate.SalesComment  = serviceRequest.salesComment;
            requestForQuoteToCreate.TraderComment = serviceRequest.traderComment;
            requestForQuoteToCreate.ClientComment = serviceRequest.clientComment;             //54

            requestForQuoteToCreate.HedgePrice = serviceRequest.hedgePrice;
            requestForQuoteToCreate.HedgeType  = convertedHedgeType;
            requestForQuoteToCreate.PickedUpBy = serviceRequest.pickedUpBy;             //58

            return(requestForQuoteToCreate);
        }
 public void DoesRequestMatchFilter_NullCriteria_ArgumentNullExceptionThrown()
 {
     // Act
     var test = new RequestForQuoteImpl().DoesRequestMatchFilter(null);
 }