// static public static YieldCurve GetYieldCurve_DB(DateTime refereceDate, string curveID, clsHDAT_CURVEDATA_TB.RATE_TYP_Type type) { YieldCurve yc = new YieldCurve(); yc.loadCurveData(refereceDate,curveID,type); return yc; }
private void evalCurveMap() { // eval --------------------------------------------------------- //this.EvalCurveMap_.Clear(); this.EvalCurveManagerMap_.Clear(); clsSET_EVALUATIONCURVE_TB clstb = new clsSET_EVALUATIONCURVE_TB(); clstb.SETTING_ID = "MYSETTING"; DataTable tb = clstb.Select(); foreach (DataRow dr in tb.Select()) { YieldCurve cm = new YieldCurve(); clsSET_EVALUATIONCURVE_TB clstb_roop = clsSET_EVALUATIONCURVE_TB.Create(dr); cm.loadCurveData(this.CalcDate_, clstb_roop.CURVE_ID, clsHDAT_CURVEDATA_TB.RATE_TYP_Type.YTM); //this.EvalCurveMap_.Add(clstb_roop.INDEX_CD, cm.yieldCurve(this.CurveShift_)); this.EvalCurveManagerMap_.Add(clstb_roop.INDEX_CD, cm); //this.EvalCurveMap_.Add(clstb_roop.INDEX_CD, cm); } }
public override void calculate(DateTime calcDate, FP_Parameter fp_parameter) { // master data load this.indexOptionDAO_.SelectOwn(); // market data load // index data clsHDAT_MARKETDATA_TB clstb = new clsHDAT_MARKETDATA_TB(); string calcDateStr = calcDate.ToString("yyyyMMdd"); QLNet.Settings.setEvaluationDate(calcDate); clstb.REF_DT = calcDateStr; clstb.INDEX_CD = this.indexOptionDAO_.UNDERLYING_INDEX_CD; int checkNum = clstb.SelectOwn(); if (checkNum == 0) { throw new Exception("market data does not exist : " + calcDateStr + " " + clstb.INDEX_CD); } double indexData = clstb.LAST; // curveData -------------------------------------------------- string curve_cd = "IRSKRW"; YieldCurve curveManager = new YieldCurve(); curveManager.loadCurveData(calcDate,curve_cd,clsHDAT_CURVEDATA_TB.RATE_TYP_Type.YTM); QLNet.YieldTermStructure yield_ts = curveManager.yieldCurve(); // calculate string maturityDateStr = this.indexOptionDAO_.MATURITY_DT; System.Globalization.CultureInfo us = new System.Globalization.CultureInfo("en-US"); DateTime maturityDate = DateTime.ParseExact(maturityDateStr, "yyyyMMdd", us); DayCounter dc = new Actual365Fixed(); Calendar cal = new NullCalendar(); double vol = 0.3; double strike = this.indexOptionDAO_.STRIKE; PlainVanillaPayoff strikePayoff = new PlainVanillaPayoff(Option.Type. Call, strike); Exercise exercise = new EuropeanExercise(maturityDate); VanillaOption q_option = new VanillaOption(strikePayoff,exercise); Handle<Quote> x0 = new Handle<Quote>(new SimpleQuote(indexData)); FlatForward flatForward = new FlatForward(calcDate,0.01,dc); Handle<YieldTermStructure> dividendTS = new Handle<YieldTermStructure>(flatForward); Handle<YieldTermStructure> riskFreeTS = new Handle<YieldTermStructure>(yield_ts); BlackConstantVol blackConstVol = new BlackConstantVol(calcDate,cal,vol,dc); Handle<BlackVolTermStructure> blackVolTS = new Handle<BlackVolTermStructure>(blackConstVol); GeneralizedBlackScholesProcess process =new GeneralizedBlackScholesProcess(x0 ,dividendTS,riskFreeTS,blackVolTS); AnalyticEuropeanEngine europeanEngine = new AnalyticEuropeanEngine(process); q_option.setPricingEngine(europeanEngine); double value = q_option.NPV(); double indexMultiplier = this.indexOptionDAO_.INDEX_MULTIPLIER; int quantity = this.indexOptionDAO_.QUANTITY; clsHITM_FP_GREEKRESULT_TB result_tb = new clsHITM_FP_GREEKRESULT_TB(); result_tb.FP_GREEKRESULT_ID = IDGenerator.getNewGreekResultID(this.indexOptionDAO_.INSTRUMENT_ID,calcDateStr); result_tb.CALC_DT = calcDateStr; result_tb.INSTRUMENT_ID = this.indexOptionDAO_.INSTRUMENT_ID; result_tb.INSTRUMENT_TYP = this.indexOptionDAO_.INSTRUMENT_TYP; result_tb.UNDERLYING_ID = "KOSPI200"; result_tb.UNDERLYING_VALUE = indexData; //result_tb.SEQ = 1; result_tb.DELTA = (q_option.delta() * indexData / 100) * indexMultiplier * quantity; // 1% Delta result_tb.GAMMA = 0.5 * (q_option.gamma() * indexData / 100) * indexMultiplier * quantity; // 1% Gamma result_tb.VEGA = q_option.vega() / 100 * indexMultiplier * quantity; // 1% point Vega result_tb.CALC_PRICE = value * indexMultiplier * quantity; result_tb.CALCULATED_FLAG = (int)clsHITM_FP_GREEKRESULT_TB.CALCULATED_FLAG_Type.CALCULATED; result_tb.CALCULATED_TIME = DateTime.Now.ToString("HHmmss"); ; result_tb.CALCULATE_TYP = (int)clsHITM_FP_GREEKRESULT_TB.CALCULATE_TYP_Type.ANALYTICS; // price if (result_tb.UpdateDateResult() == 0) { throw new Exception("update result fail. no exist , calcDate : " + calcDate.ToString("yyyyMMdd") + " , inst_id : " + result_tb.INSTRUMENT_ID); } // delta // gamma and others : no exist ? }
//private void evalCurveMap() //{ // // eval --------------------------------------------------------- // this.EvalCurveMap_.Clear(); // clsSET_EVALUATIONCURVE_TB clstb = new clsSET_EVALUATIONCURVE_TB(); // clstb.SETTING_ID = "MYSETTING"; // DataTable tb = clstb.Select(); // foreach (DataRow dr in tb.Select()) // { // CurveManager cm = new CurveManager(); // clsSET_EVALUATIONCURVE_TB clstb_roop = clsSET_EVALUATIONCURVE_TB.Create(dr); // cm.loadCurveData(this.CalcDate_, clstb_roop.CURVE_ID, clsHDAT_CURVEDATA_TB.RATE_TYP_Type.YTM); // this.EvalCurveMap_.Add(clstb_roop.INDEX_CD, cm.yieldCurve(this.CurveShift_)); // this.EvalCurveManagerMap_.Add(clstb_roop.INDEX_CD, cm); // //this.EvalCurveMap_.Add(clstb_roop.INDEX_CD, cm); // } //} private void discountCurveMap() { // discount --------------------------------------------------------- //this.DiscountCurveMap_.Clear(); this.DiscountCurveManagerMap_.Clear(); clsSET_DISCOUNTCURVE_TB clstb = new clsSET_DISCOUNTCURVE_TB(); clstb.SETTING_ID = "MYSETTING"; DataTable tb = clstb.Select(); foreach (DataRow dr in tb.Select()) { YieldCurve cm = new YieldCurve(); clsSET_DISCOUNTCURVE_TB clstb_roop = clsSET_DISCOUNTCURVE_TB.Create(dr); cm.loadCurveData(this.CalcDate_, clstb_roop.CURVE_ID,clsHDAT_CURVEDATA_TB.RATE_TYP_Type.SPOT); //this.DiscountCurveMap_.Add(clstb_roop.CURR, cm.yieldCurve()); this.DiscountCurveManagerMap_.Add(clstb_roop.CURR, cm); //this.DiscountCurveMap_.Add(clstb_roop.CURR, cm); } }