public void BeginEdit()
        {
            if (log.IsDebugEnabled)
            {
                log.Debug("Beginning edit, creating from backup of currently selected request.");
            }

            backupOfRequestForQuote = SelectedRequestForQuote.Clone(SelectedRequestForQuote.Identifier);
        }
コード例 #2
0
        public List <OptionDetailImpl> ParseOptionTypes(string request, IRequestForQuote parent)
        {
            if (String.IsNullOrEmpty(request))
            {
                throw new ArgumentException("request");
            }

            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            var optionTypes     = new List <OptionDetailImpl>();
            var optionDetailReg = new Regex(@"^(?<side>[+-])?(?<quantity>[1-9])?(?<type>[CP]{1})+");
            var optionLegReg    = new Regex(@"^(?<leg>[+-]?[1-9]?[CP]{1})+");
            var matchedLegs     = optionLegReg.Match(request);
            var legCount        = 0;

            while (matchedLegs.Success)
            {
                var leg            = matchedLegs.Groups["leg"].ToString();
                var matchedDetails = optionDetailReg.Match(leg);

                var side     = matchedDetails.Groups["side"].Value == "-" ? SideEnum.SELL : SideEnum.BUY;
                var quantity = matchedDetails.Groups["quantity"].Value == "" ? 1 : Convert.ToInt32(matchedDetails.Groups["quantity"].Value);
                var isCall   = matchedDetails.Groups["type"].Value == "C";

                optionTypes.Add(new OptionDetailImpl()
                {
                    Side          = side,
                    Quantity      = quantity,
                    IsCall        = isCall,
                    LegId         = ++legCount,
                    ParentRequest = parent
                });

                if (log.IsDebugEnabled)
                {
                    log.Debug("leg #" + optionTypes.Count + ": " + leg + ", leg side: " + side + ", quantity: " + quantity + ", Type: " + (isCall ? "CALL" : "PUT"));
                }

                request     = request.Replace(leg, "");
                matchedLegs = optionLegReg.Match(request);
            }
            return(optionTypes);
        }
コード例 #3
0
        public List <OptionDetailImpl> ParseRequest(string request, IRequestForQuote parent)
        {
            if (String.IsNullOrEmpty(request))
            {
                throw new ArgumentException("request");
            }

            if (parent == null)
            {
                throw new ArgumentNullException("parent");
            }

            var partsOfTheRequest = request.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
            var optionLegs        = ParseOptionTypes(partsOfTheRequest[0], parent);

            ParseOptionStrikes(partsOfTheRequest[1], optionLegs);
            ParseOptionMaturityDates(partsOfTheRequest[2], optionLegs);
            ParseOptionUnderlyings(partsOfTheRequest[3], optionLegs);
            return(optionLegs);
        }
コード例 #4
0
        /// <summary>
        /// Updates an RFQ via the web service.
        /// </summary>
        /// <param name="requestToUpdate"> the rfq to update.</param>
        /// <returns> true if the RFQ is updated successfully, false otherwise.</returns>
        /// <exception cref="ArgumentNullException"> thrown if requestToSave is null.</exception>
        public bool UpdateRequest(IRequestForQuote requestToUpdate)
        {
            if (requestToUpdate == null)
            {
                throw new ArgumentNullException("requestToUpdate");
            }

            try
            {
                return(requestControllerProxy.update(CreateServiceRequestFromRequestForQuote(requestToUpdate),
                                                     configManager.CurrentUser));
            }
            catch (FaultException fe)
            {
                log.Error("Failed to update request. Exception thrown: ", fe);
            }
            catch (EndpointNotFoundException enfe)
            {
                log.Error("Failed to update request. Exception thrown: ", enfe);
            }
            return(false);
        }
コード例 #5
0
        /// <summary>
        /// Converts GUI formatted RFQ into the web service format.
        /// </summary>
        /// <param name="sourceRequestForQuote"> the GUI formatted RFQ to be converted.</param>
        /// <returns> the web service formatted RFQ.</returns>
        /// <exception cref="ArgumentNullException"> thrown if the GUI formatted RFQ is null.</exception>
        private requestDetailImpl CreateServiceRequestFromRequestForQuote(IRequestForQuote sourceRequestForQuote)
        {
            if (sourceRequestForQuote == null)
            {
                throw new ArgumentNullException("sourceRequestForQuote");
            }

            var serviceRequestToCreate = new requestDetailImpl();

            if (sourceRequestForQuote.Legs != null && sourceRequestForQuote.Legs.Count > 0)
            {
                var legsArray = new optionDetailImpl[sourceRequestForQuote.Legs.Count];
                var legCount  = 0;
                foreach (var leg in sourceRequestForQuote.Legs)
                {
                    legsArray[legCount++] = CreateServiceOptionLegFromRequestForQuoteLeg(leg);
                }
                serviceRequestToCreate.legs = new optionDetailListImpl()
                {
                    optionDetailList = legsArray
                };
            }

            serviceRequestToCreate.bookCode   = sourceRequestForQuote.BookCode;
            serviceRequestToCreate.request    = sourceRequestForQuote.Request;
            serviceRequestToCreate.identifier = sourceRequestForQuote.Identifier;
            serviceRequestToCreate.clientId   = sourceRequestForQuote.Client.Identifier;
            serviceRequestToCreate.isOTC      = sourceRequestForQuote.IsOTC;
            serviceRequestToCreate.status     = sourceRequestForQuote.Status.ToString();         //6

            serviceRequestToCreate.tradeDate          = sourceRequestForQuote.TradeDate.ToShortDateString();
            serviceRequestToCreate.expiryDate         = sourceRequestForQuote.ExpiryDate.ToShortDateString();     //8
            serviceRequestToCreate.dayCountConvention = sourceRequestForQuote.DayCountConvention;

            serviceRequestToCreate.lotSize    = sourceRequestForQuote.LotSize;
            serviceRequestToCreate.multiplier = sourceRequestForQuote.Multiplier;
            serviceRequestToCreate.contracts  = sourceRequestForQuote.Contracts;
            serviceRequestToCreate.quantity   = sourceRequestForQuote.Quantity;           //12

            serviceRequestToCreate.notionalMillions = sourceRequestForQuote.NotionalMillions;
            serviceRequestToCreate.notionalFXRate   = sourceRequestForQuote.NotionalFXRate;
            serviceRequestToCreate.notionalCurrency = sourceRequestForQuote.NotionalCurrency.ToString();             //15

            serviceRequestToCreate.delta = sourceRequestForQuote.Delta;
            serviceRequestToCreate.gamma = sourceRequestForQuote.Gamma;
            serviceRequestToCreate.vega  = sourceRequestForQuote.Vega;
            serviceRequestToCreate.theta = sourceRequestForQuote.Theta;
            serviceRequestToCreate.rho   = sourceRequestForQuote.Rho;           //20

            serviceRequestToCreate.deltaNotional = sourceRequestForQuote.DeltaNotional;
            serviceRequestToCreate.gammaNotional = sourceRequestForQuote.GammaNotional;
            serviceRequestToCreate.vegaNotional  = sourceRequestForQuote.VegaNotional;
            serviceRequestToCreate.thetaNotional = sourceRequestForQuote.ThetaNotional;
            serviceRequestToCreate.rhoNotional   = sourceRequestForQuote.RhoNotional;           //25

            serviceRequestToCreate.deltaShares = sourceRequestForQuote.DeltaShares;
            serviceRequestToCreate.gammaShares = sourceRequestForQuote.GammaShares;
            serviceRequestToCreate.vegaShares  = sourceRequestForQuote.VegaShares;
            serviceRequestToCreate.thetaShares = sourceRequestForQuote.ThetaShares;
            serviceRequestToCreate.rhoShares   = sourceRequestForQuote.RhoShares;           //30

            serviceRequestToCreate.askFinalAmount       = sourceRequestForQuote.AskFinalAmount;
            serviceRequestToCreate.askFinalPercentage   = sourceRequestForQuote.AskFinalPercentage;
            serviceRequestToCreate.askImpliedVol        = sourceRequestForQuote.AskImpliedVol;
            serviceRequestToCreate.askPremiumAmount     = sourceRequestForQuote.AskPremiumAmount;
            serviceRequestToCreate.askPremiumPercentage = sourceRequestForQuote.AskPremiumPercentage;             //35

            serviceRequestToCreate.bidFinalAmount       = sourceRequestForQuote.BidFinalAmount;
            serviceRequestToCreate.bidFinalPercentage   = sourceRequestForQuote.BidFinalPercentage;
            serviceRequestToCreate.bidImpliedVol        = sourceRequestForQuote.BidImpliedVol;
            serviceRequestToCreate.bidPremiumAmount     = sourceRequestForQuote.BidPremiumAmount;
            serviceRequestToCreate.bidPremiumPercentage = sourceRequestForQuote.BidPremiumPercentage;             //40

            serviceRequestToCreate.premiumAmount     = sourceRequestForQuote.PremiumAmount;
            serviceRequestToCreate.premiumPercentage = sourceRequestForQuote.PremiumPercentage;
            serviceRequestToCreate.impliedVol        = sourceRequestForQuote.ImpliedVol;      //43

            serviceRequestToCreate.salesCreditAmount     = sourceRequestForQuote.SalesCreditAmount;
            serviceRequestToCreate.salesCreditPercentage = sourceRequestForQuote.SalesCreditPercentage;
            serviceRequestToCreate.salesCreditCurrency   = sourceRequestForQuote.SalesCreditCurrency.ToString();
            serviceRequestToCreate.salesCreditFXRate     = sourceRequestForQuote.SalesCreditFXRate;         //47

            serviceRequestToCreate.premiumSettlementCurrency     = sourceRequestForQuote.PremiumSettlementCurrency.ToString();
            serviceRequestToCreate.premiumSettlementDate         = sourceRequestForQuote.PremiumSettlementDate.ToShortDateString();
            serviceRequestToCreate.premiumSettlementDaysOverride = sourceRequestForQuote.PremiumSettlementDaysOverride;
            serviceRequestToCreate.premiumSettlementFXRate       = sourceRequestForQuote.PremiumSettlementFXRate;       //51

            serviceRequestToCreate.salesComment  = sourceRequestForQuote.SalesComment;
            serviceRequestToCreate.traderComment = sourceRequestForQuote.TraderComment;
            serviceRequestToCreate.clientComment = sourceRequestForQuote.ClientComment;             //54

            serviceRequestToCreate.hedgePrice   = sourceRequestForQuote.HedgePrice;
            serviceRequestToCreate.hedgeType    = sourceRequestForQuote.HedgeType.ToString();
            serviceRequestToCreate.totalPremium = sourceRequestForQuote.TotalPremium;
            serviceRequestToCreate.pickedUpBy   = sourceRequestForQuote.PickedUpBy;           //58

            return(serviceRequestToCreate);
        }
コード例 #6
0
        public void CopyMembers(IRequestForQuote fromSourceRequest)
        {
            Status             = fromSourceRequest.Status;
            Client             = fromSourceRequest.Client;
            TradeDate          = fromSourceRequest.TradeDate;
            ExpiryDate         = fromSourceRequest.ExpiryDate;
            DayCountConvention = fromSourceRequest.DayCountConvention;
            Request            = fromSourceRequest.Request;
            IsOTC = fromSourceRequest.IsOTC;

            Delta = fromSourceRequest.Delta;
            Gamma = fromSourceRequest.Gamma;
            Vega  = fromSourceRequest.Vega;
            Theta = fromSourceRequest.Theta;
            Rho   = fromSourceRequest.Rho;

            ImpliedVol        = fromSourceRequest.ImpliedVol;
            PremiumAmount     = fromSourceRequest.PremiumAmount;
            PremiumPercentage = fromSourceRequest.PremiumPercentage;

            Identifier = fromSourceRequest.Identifier;
            PickedUpBy = fromSourceRequest.PickedUpBy;
            BookCode   = fromSourceRequest.BookCode;

            PremiumSettlementCurrency     = fromSourceRequest.PremiumSettlementCurrency;
            PremiumSettlementDate         = fromSourceRequest.PremiumSettlementDate;
            PremiumSettlementDaysOverride = fromSourceRequest.PremiumSettlementDaysOverride;
            PremiumSettlementFXRate       = fromSourceRequest.PremiumSettlementFXRate;

            SalesCreditAmount     = fromSourceRequest.SalesCreditAmount;
            SalesCreditPercentage = fromSourceRequest.SalesCreditPercentage;
            SalesCreditCurrency   = fromSourceRequest.SalesCreditCurrency;
            SalesCreditFXRate     = fromSourceRequest.SalesCreditFXRate;

            Multiplier = fromSourceRequest.Multiplier;
            Contracts  = fromSourceRequest.Contracts;
            LotSize    = fromSourceRequest.LotSize;

            NotionalMillions = fromSourceRequest.NotionalMillions;
            NotionalCurrency = fromSourceRequest.NotionalCurrency;
            NotionalFXRate   = fromSourceRequest.NotionalFXRate;

            BidImpliedVol        = fromSourceRequest.BidImpliedVol;
            BidPremiumPercentage = fromSourceRequest.BidPremiumPercentage;
            BidPremiumAmount     = fromSourceRequest.BidPremiumAmount;
            BidFinalPercentage   = fromSourceRequest.BidFinalPercentage;
            BidFinalAmount       = fromSourceRequest.BidFinalAmount;

            AskImpliedVol        = fromSourceRequest.AskImpliedVol;
            AskPremiumPercentage = fromSourceRequest.AskPremiumPercentage;
            AskPremiumAmount     = fromSourceRequest.AskPremiumAmount;
            AskFinalPercentage   = fromSourceRequest.AskFinalPercentage;
            AskFinalAmount       = fromSourceRequest.AskFinalAmount;

            SalesComment  = fromSourceRequest.SalesComment;
            TraderComment = fromSourceRequest.TraderComment;
            ClientComment = fromSourceRequest.ClientComment;

            HedgePrice = fromSourceRequest.HedgePrice;
            HedgeType  = fromSourceRequest.HedgeType;

            if (fromSourceRequest.Legs != null)
            {
                Legs = new List <OptionDetailImpl>();
                foreach (var leg in fromSourceRequest.Legs)
                {
                    Legs.Add(leg.CloneOptionDetails());
                }
            }

            // TODO verify
            if (Messages != null)
            {
                Messages = new List <ChatMessageImpl>(fromSourceRequest.Messages);
            }
        }
        public RequestForQuoteDetailsViewModel(IOptionRequestPricer optionRequestPricer, IRequestForQuote requestForQuote,
                                               IClientManager clientManager, IBookManager bookManager, IEventAggregator eventAggregator,
                                               IUnderlyingManager underlyingManager, IChatServiceManager chatServiceManager,
                                               IOptionRequestPersistanceManager optionRequestPersistanceManager, IConfigurationManager configManager,
                                               IUserManager userManager)
        {
            if (optionRequestPricer == null)
            {
                throw new ArgumentNullException("optionRequestPricer");
            }

            if (clientManager == null)
            {
                throw new ArgumentNullException("clientManager");
            }

            if (bookManager == null)
            {
                throw new ArgumentNullException("bookManager");
            }

            if (userManager == null)
            {
                throw new ArgumentNullException("userManager");
            }

            if (underlyingManager == null)
            {
                throw new ArgumentNullException("underlyingManager");
            }

            if (chatServiceManager == null)
            {
                throw new ArgumentNullException("chatServiceManager");
            }

            if (eventAggregator == null)
            {
                throw new ArgumentNullException("eventAggregator");
            }

            if (optionRequestPersistanceManager == null)
            {
                throw new ArgumentNullException("optionRequestPersistanceManager");
            }

            if (configManager == null)
            {
                throw new ArgumentNullException("configManager");
            }

            if (requestForQuote == null)
            {
                throw new ArgumentNullException("requestForQuote");
            }

            this.optionRequestPricer             = optionRequestPricer;
            this.clientManager                   = clientManager;
            this.bookManager                     = bookManager;
            this.userManager                     = userManager;
            this.underlyingManager               = underlyingManager;
            this.chatServiceManager              = chatServiceManager;
            this.eventAggregator                 = eventAggregator;
            this.optionRequestPersistanceManager = optionRequestPersistanceManager;
            this.configManager                   = configManager;

            SelectedRequestForQuote = requestForQuote;

            InitializeCommands();
            InitializeCollections();
            InitializeEventSubscriptions();
        }