public List <StockOptionInformation> GetStockOptionInfo(string underlying, DateTime start, DateTime end)
        {
            logger.Info(string.Format("begin to fetch stock{0} Option Information from {1} to {2}...", underlying, start, end));
            var optionList        = new List <StockOptionInformation>();
            var latestTradingDate = dateRepo.GetPreviousTransactionDate(DateTime.Now.AddDays(1));
            var dt      = ReadFromSqlServer(underlying, start, end);
            var codeStr = underlying.Split('.');

            if (dt.Rows.Count == 0 || Convert.ToDateTime(dt.Rows[0]["update_date_time"]).Date < latestTradingDate.Date)
            {
                UpdateOptionInfo(underlying);
                dt = ReadFromSqlServer(underlying, start, end);
            }
            foreach (DataRow item in dt.Rows)
            {
                var info = new StockOptionInformation();
                info.code         = Convert.ToString(item["wind_code"]) + "." + codeStr[1];
                info.name         = Convert.ToString(item["sec_name"]);
                info.underlying   = underlying;
                info.exerciseMode = Convert.ToString(item["exercise_mode"]);
                info.strike       = Convert.ToDouble(item["exercise_price"]);
                info.type         = Convert.ToString(item["call_or_put"]);
                info.unit         = Convert.ToInt32(item["contract_unit"]);
                info.listedDate   = Convert.ToDateTime(item["listed_date"]);
                info.expireDate   = Convert.ToDateTime(item["expire_date"]);
                optionList.Add(info);
            }
            return(optionList);
        }
예제 #2
0
        public static StockOptionInformation GetParity(List <StockOptionInformation> list, StockOptionInformation option)
        {
            StockOptionInformation parity = new StockOptionInformation();

            foreach (var item in list)
            {
                if (item.strike == option.strike && item.expireDate == option.expireDate && item.underlying == option.underlying && item.type != option.type && item.unit == option.unit)
                {
                    parity = item;
                    break;
                }
            }
            return(parity);
        }
예제 #3
0
        /// <summary>
        /// 根据给定的期权,得到他对应的期权。看涨期权给出对应的看跌期权,看跌去期权给出其对应的看涨期权。
        /// </summary>
        /// <param name="list">期权备选列表</param>
        /// <param name="optionSelected">给定的期权</param>
        /// <returns></returns>
        public static StockOptionInformation getCallByPutOrPutByCall(List <StockOptionInformation> list, StockOptionInformation optionSelected)
        {
            StockOptionInformation optionChosen = new StockOptionInformation();

            foreach (var option in list)
            {
                if (option.expireDate == optionSelected.expireDate && option.strike == optionSelected.strike && option.unit == optionSelected.unit && option.type != optionSelected.type)
                {
                    optionChosen = option;
                    break;
                }
            }
            return(optionChosen);
        }
예제 #4
0
        public static double getDuration(StockOptionInformation option, DateTime date)
        {
            TimeSpan span = option.expireDate - date;

            return(span.Days + 1);
        }