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); }
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); }
/// <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); }
public static double getDuration(StockOptionInformation option, DateTime date) { TimeSpan span = option.expireDate - date; return(span.Days + 1); }