示例#1
0
        public EntityResponse <OptionBasicInformation> GetOptionInformation(string optionNo)
        {
            EntityResponse <List <OptionBasicInformation> > r = _marketDataProvider.GetOptionBasicInformation(null, optionNo);

            if (!r.IsSuccess)
            {
                return(EntityResponse <OptionBasicInformation> .Error(r));
            }

            OptionBasicInformation optionInformation = r.Entity.Single();

            return(optionInformation);
        }
示例#2
0
        public Option GetOptionTradingInformation(string optionNo)
        {
            // Get OptionBasicInfo
            EntityResponse <List <OptionBasicInformation> > r = _marketDataProvider.GetOptionBasicInformation(null, optionNo);

            if (!r.IsSuccess)
            {
                return(null);
            }
            OptionBasicInformation optionBasicInformation = r.Entity.Single();

            // Get OptionQuotation
            List <string> optionNums = new List <string>();

            optionNums.Add(optionNo);
            EntityResponse <List <OptionQuotation> > optionQuotesResponse = GetOptionQuotesByOptionNumbers(optionNums);
            OptionQuotation optionQuotation = optionQuotesResponse.Entity.Single();

            // Combine the Quotation with BasicInfo
            Option option = new Option(null, optionBasicInformation.OptionNumber, optionBasicInformation.OptionCode)
            {
                Name          = optionBasicInformation.OptionName,
                OptionName    = optionBasicInformation.OptionName,
                OpenInterest  = optionBasicInformation.UncoveredPositionQuantity,
                SecurityCode  = optionBasicInformation.OptionUnderlyingCode,
                PreviousClose = (double)optionBasicInformation.PreviousClosingPrice,

                // Additional Information from OptionBasicInformation
                TypeOfOption         = optionBasicInformation.OptionType,
                LimitDownPrice       = optionBasicInformation.LimitDownPrice,
                LimitUpPrice         = optionBasicInformation.LimitUpPrice,
                OptionUnit           = optionBasicInformation.OptionUnit,
                OptionUnderlyingCode = optionBasicInformation.OptionUnderlyingCode,
                OptionUnderlyingName = optionBasicInformation.OptionUnderlyingName,
            };

            Mapper.Map(optionQuotation, option);

            return(option);
        }
示例#3
0
        private OptionBasicInformation ConvertExpirationDate(OptionBasicInformation basic)
        {
            //if (basic.ExpireDate.DayOfYear == 365 || basic.ExpireDate.DayOfYear == 366)
            //{
            string   expiryStr     = basic.OptionCode.Substring(basic.OptionCode.IndexOf(basic.OptionType == OptionType.Call ? "C" : "P") + 1, 4);
            int      year          = 2000 + Convert.ToInt32(expiryStr.Substring(0, 2));
            int      month         = Convert.ToInt32(expiryStr.Substring(2, 2));
            DateTime date          = new DateTime(year, month, 1);
            int      nthOfThursday = 0;

            while (nthOfThursday < 4)
            {
                if (date.DayOfWeek == DayOfWeek.Wednesday)
                {
                    nthOfThursday++;
                }
                date = date.AddDays(1);
            }
            date             = date.AddDays(-1);
            basic.ExpireDate = date;
            //}
            return(basic);
        }
示例#4
0
        public List <BasePortfolioItemGroupViewModel> GetPortfolioData(string customerCode, string accountCode, string tradeAccount)
        {
            #region Fetch data
            OptionPositionsArguments arguments = new OptionPositionsArguments
            {
                CustomerCode        = customerCode,
                CustomerAccountCode = accountCode
            };

            EntityResponse <List <OptionPositionInformation> >          optionPositions = _portfolioManager.GetOptionPositions(arguments);
            EntityResponse <List <OptionableStockPositionInformation> > stockPositions  = _portfolioManager.GetOptionalStockPositions(customerCode, accountCode, tradeAccount);

            if (!optionPositions.IsSuccess || !stockPositions.IsSuccess || optionPositions.Entity.Count == 0)
            {
                return(new List <BasePortfolioItemGroupViewModel>());
            }

            IEnumerable <PortfolioOption> portfolioOptions = Mapper.Map <List <OptionPositionInformation>, List <PortfolioOption> >(optionPositions.Entity);
            IEnumerable <PortfolioStock>  portfolioStocks  = Mapper.Map <List <OptionableStockPositionInformation>, List <PortfolioStock> >(stockPositions.Entity);
            Dictionary <string, EntityResponse <OptionChain> > optionChains = new Dictionary <string, EntityResponse <OptionChain> >();
            #endregion

            #region Fill additional information

            foreach (PortfolioOption portfolioItem in portfolioOptions)
            {
                EntityResponse <List <OptionBasicInformation> > optionBasicInformation = _marketDataProviderQueryable.GetOptionBasicInformation(optionNumber: portfolioItem.OptionNumber);

                if (optionBasicInformation.Entity == null || !optionBasicInformation.Entity.Any())
                {
                    continue;
                }

                OptionBasicInformation basicInfo = optionBasicInformation.Entity.Single();

                DateTime expiryDate             = basicInfo.ExpireDate;
                DateAndNumberOfDaysUntil expiry = _marketWorkTimeService.GetNumberOfDaysLeftUntilExpiry(expiryDate);

                portfolioItem.Expiry         = expiry;
                portfolioItem.UnderlyingCode = basicInfo.OptionUnderlyingCode;
                portfolioItem.UnderlyingName = basicInfo.OptionUnderlyingName;
                portfolioItem.StrikePrice    = basicInfo.StrikePrice;


                EntityResponse <OptionChain> optionChain;
                string underlying = portfolioItem.UnderlyingCode;

                if (optionChains.ContainsKey(underlying))
                {
                    optionChain = optionChains[underlying];
                }
                else
                {
                    optionChain = _marketDataService.GetOptionChain(underlying);
                    optionChains.Add(underlying, optionChain);
                }

                if (optionChain == null)
                {
                    continue;
                }

                Option option = optionChain.Entity[portfolioItem.OptionNumber];
                if (option == null)
                {
                    portfolioItem.UnderlyingCode = null;
                    continue;
                }
                Greeks greeks = option.Greeks ?? new Greeks();

                portfolioItem.LastPrice         = (decimal)option.LatestTradedPrice;         //optionChain.Entity.UnderlyingCurrentPrice;
                portfolioItem.PremiumMultiplier = option.RootPair.PremiumMultiplier;
                portfolioItem.Greeks            = new PortfolioGreeks(portfolioItem.OptionAvailableQuantity, greeks, portfolioItem.OptionSide, portfolioItem.PremiumMultiplier);
            }

            portfolioOptions = portfolioOptions.Where(x => x.UnderlyingCode != null);

            foreach (PortfolioStock portfolioStock in portfolioStocks)
            {
                SecurityQuotation quote = _marketDataService.GetSecurityQuotation(portfolioStock.SecurityCode);
                portfolioStock.LastPrice        = quote.LastPrice;
                portfolioStock.StockMarketValue = quote.LastPrice * portfolioStock.AvailableBalance;
                portfolioStock.Greeks           = new PortfolioGreeks(portfolioStock.AdjustedAvailableQuantity,
                                                                      new Greeks()
                {
                    Delta = 1
                }, portfolioStock.OptionSide, 1);
            }

            #endregion

            IEnumerable <BasePortfolioItemGroup> groupedByStrategies = _strategyService.GetPortfolioItemsGroupedByStrategy(portfolioOptions, portfolioStocks);

            List <BasePortfolioItemGroupViewModel> result =
                Mapper.Map <IEnumerable <BasePortfolioItemGroup>, IEnumerable <BasePortfolioItemGroupViewModel> >(groupedByStrategies)
                .ToList();

            return(result);
        }
        public OptionBasicInformationViewModel GetOptionBasicInformation(string optionNo)
        {
            OptionBasicInformation r = _marketDataService.GetOptionInformation(optionNo);

            return(Mapper.Map <OptionBasicInformation, OptionBasicInformationViewModel>(r));
        }