/// <summary> /// 将datatable转化为数组格式 /// </summary> /// <param name="str">交易代码</param> /// <param name="dt">数据</param> /// <returns>数组形式数据</returns> public levelOne[] DataTable2Array(string str, DataTable dt) { levelOne[] dtArr = new levelOne[28802]; for (int i = 0; i < dt.Rows.Count; i++) { levelOne data0 = new levelOne(); data0.code = str; int time = Convert.ToInt32(dt.Rows[i]["ttime"]); int index = TradeDays.TimeToIndex(time); if (index < 0 || index > 28801) { continue; } data0.time = time; data0.last = Convert.ToDouble(dt.Rows[i]["cp"]); data0.ask = Convert.ToDouble(dt.Rows[i]["S1"]); data0.askv = Convert.ToDouble(dt.Rows[i]["SV1"]); data0.bid = Convert.ToDouble(dt.Rows[i]["B1"]); data0.bidv = Convert.ToDouble(dt.Rows[i]["BV1"]); dtArr[index] = data0; } for (int i = 1; i < 28802; i++) { if (dtArr[i].last == 0) { dtArr[i] = new levelOne(dtArr[i - 1].code, dtArr[i - 1].time, dtArr[i - 1].last, dtArr[i - 1].ask, dtArr[i - 1].askv, dtArr[i - 1].bid, dtArr[i - 1].bidv); } } return(dtArr); }
/// <summary> /// 计算隐含波动率及其他希腊值的类。 /// </summary> /// <param name="option">期权类型</param> /// <param name="optionData">期权数据</param> /// <param name="etfData">etf数据</param> /// <param name="duration">到期时间</param> public Impv(optionFormat option, levelOne optionData, levelOne etfData, double duration) { this.option = option; this.optionData = optionData; this.etfData = etfData; this.duration = duration; }
/// <summary> /// 计算隐含波动率 /// </summary> /// <param name="myData">数据</param> /// <param name="index">时间下标</param> public void ComputeVolDaily(GetDataDaily myData, int index) { levelOne etfData = myData.dataDaily["510050.SH"][index]; foreach (int code in optionListInt) { string codeStr = code.ToString() + ".SH"; optionFormat option = OptionInformation.myOptionList[code]; levelOne optionData = myData.dataDaily[codeStr][index]; double duration = TradeDays.GetTimeSpan(date, option.endDate); Impv vol = new Impv(option, optionData, etfData, duration); double sigma = vol.computeVol(); GetCurve(option.strike, option.optionType, duration, sigma); } }