// empty_calculation result를 만듬.기존거 있으면 지움. 초기화임. private void build_calculation() { // 당일자 ( result 는 만들고 cashflow도 만들어야대나...? ) clsHITM_FP_GREEKRESULT_TB clstb_result = new clsHITM_FP_GREEKRESULT_TB(); // 기존거 있으면 지움. 초기화임. clstb_result.CALC_DT = this.ReferenceDate_.ToString("yyyyMMdd"); clstb_result.DeleteDate(); clsMAST_FP_INSTRUMENT_TB clstb_mast = new clsMAST_FP_INSTRUMENT_TB(); DataTable dt = clstb_mast.Select(); List<Financial_instrument> fi_list = new List<Financial_instrument>(); // master 의 list 내에서 position을 만들음. foreach (DataRow dr in dt.Select()) { clsMAST_FP_INSTRUMENT_TB tb = clsMAST_FP_INSTRUMENT_TB.Create(dr); Financial_instrument fi = Financial_instrument.CreateInstrument(tb); fi_list.Add(fi); } foreach (Financial_instrument fi in fi_list) { fi.build_emptyResult(this.ReferenceDate_); } }
public void makeEmptyResult(DateTime calcDate) { // 상품 master를 load함. this.loadInstrument(); clsHITM_FP_GREEKRESULT_TB clstb = new clsHITM_FP_GREEKRESULT_TB(); clstb.FP_GREEKRESULT_ID = "testGreekResult_ID"; clstb.CALC_DT = calcDate.ToString("yyyyMMdd"); clstb.UNDERLYING_ID = ""; clstb.UNDERLYING_VALUE = 0.0; clstb.SEQ = 0; clstb.DELTA = 0.0; clstb.GAMMA = 0.0; clstb.VEGA = 0.0; clstb.CALC_PRICE = 0.0; clstb.CALCULATED_FLAG = 0; clstb.CALCULATED_TIME = ""; clstb.CALCULATE_TYP = 0; foreach (Financial_instrument fi in this.Financial_instrumentList_) { clstb.INSTRUMENT_ID = fi.baseDAO_.INSTRUMENT_ID; clstb.INSTRUMENT_TYP = Convert.ToInt32(fi.InstrumentType_); clstb.Insert(); } }
public override void delete_result(string calcDateStr, string instID) { // greekresult clsHITM_FP_GREEKRESULT_TB clstb_greekresult = new clsHITM_FP_GREEKRESULT_TB(); clstb_greekresult.CALC_DT = calcDateStr; clstb_greekresult.DeleteDate(instID); }
public override void calculate(DateTime calcDate, FP_Parameter fp_parameter) { // market data load //clsHDAT_MARKETDATA_TB clstb = new clsHDAT_MARKETDATA_TB(); string calcDateStr = calcDate.ToString("yyyyMMdd"); //clstb.REF_DT = calcDateStr; //clstb.INDEX_CD = this.DAO_.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; // calculate // position clsHITM_FP_POSITION_TB position_tb = new clsHITM_FP_POSITION_TB(); position_tb.INSTRUMENT_ID = this.baseDAO_.INSTRUMENT_ID; position_tb.POSITION_DT = calcDateStr; if (position_tb.SelectOwn() == 0) { throw new Exception("position load fail : " + calcDateStr + " " + position_tb.INSTRUMENT_ID); } double accountIndex = position_tb.ACCOUNT_INDEX; clsHITM_FP_GREEKRESULT_TB result_tb = new clsHITM_FP_GREEKRESULT_TB(); result_tb.CALC_DT = calcDateStr; // price result_tb.INSTRUMENT_ID = this.baseDAO_.INSTRUMENT_ID; result_tb.UNDERLYING_ID = "FTP"; result_tb.UNDERLYING_VALUE = this.DAO_.INDEX_RATE; // DateTime maturity = ConvertingTool.ToDateTime("21991231"); double t = (maturity - calcDate).TotalDays / 365; result_tb.DELTA = 0.0; result_tb.CALC_PRICE = this.DAO_.NOTIONAL; 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; result_tb.UpdateDateResult(); // delta // gamma and others : no exist ? }
public void load_resultList(DateTime calcDate) { this.ResultList_.Clear(); clsHITM_FP_GREEKRESULT_TB clstb = new clsHITM_FP_GREEKRESULT_TB(); clstb.CALC_DT = calcDate.ToString("yyyyMMdd"); clstb.INSTRUMENT_ID = this.MastDAO_.INSTRUMENT_ID; DataTable dt = clstb.Select(); foreach (DataRow dr in dt.Select()) { this.ResultList_.Add(clsHITM_FP_GREEKRESULT_TB.Create(dr)); } }
public override void calculate(DateTime calcDate,FP_Parameter fp_parameter) { // market data load clsHDAT_MARKETDATA_TB clstb = new clsHDAT_MARKETDATA_TB(); string calcDateStr = calcDate.ToString("yyyyMMdd"); clstb.REF_DT = calcDateStr; clstb.INDEX_CD = this.indexFuturesDAO_.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; // calculate // position clsHITM_FP_POSITION_TB position_tb = new clsHITM_FP_POSITION_TB(); position_tb.INSTRUMENT_ID = this.baseDAO_.INSTRUMENT_ID; position_tb.POSITION_DT = calcDateStr; if (position_tb.SelectOwn() == 0) { throw new Exception("position load fail : " + calcDateStr + " " + position_tb.INSTRUMENT_ID); } double accountIndex = position_tb.ACCOUNT_INDEX; clsHITM_FP_GREEKRESULT_TB result_tb = new clsHITM_FP_GREEKRESULT_TB(); result_tb.CALC_DT = calcDateStr; // price result_tb.INSTRUMENT_ID = this.baseDAO_.INSTRUMENT_ID; result_tb.UNDERLYING_ID = this.indexFuturesDAO_.UNDERLYING_INDEX_CD; result_tb.UNDERLYING_VALUE = indexData; // DateTime maturity = ConvertingTool.ToDateTime(this.indexFuturesDAO_.MATURITY_DT); double t = (maturity - calcDate).TotalDays / 365; result_tb.DELTA = Math.Round(this.indexFuturesDAO_.QUANTITY * indexData * this.indexFuturesDAO_.INDEX_MULTIPLIER * Math.Exp(0.03 * t)); result_tb.CALC_PRICE = Math.Round( this.indexFuturesDAO_.QUANTITY * ( indexData - accountIndex ) * this.indexFuturesDAO_.INDEX_MULTIPLIER ); 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; //result_tb.UpdateDateResult(); result_tb.Insert(); // delta // gamma and others : no exist ? }
public clsHITM_FP_GREEKRESULT_TB Clone() { try { clsHITM_FP_GREEKRESULT_TB cloneTB = new clsHITM_FP_GREEKRESULT_TB(); cloneTB._FP_GREEKRESULT_ID = this._FP_GREEKRESULT_ID; cloneTB._CALC_DT = this._CALC_DT; cloneTB._INSTRUMENT_ID = this._INSTRUMENT_ID; cloneTB._INSTRUMENT_TYP = this._INSTRUMENT_TYP; cloneTB._UNDERLYING_ID = this._UNDERLYING_ID; cloneTB._UNDERLYING_VALUE = this._UNDERLYING_VALUE; cloneTB._SEQ = this._SEQ; cloneTB._DELTA = this._DELTA; cloneTB._GAMMA = this._GAMMA; cloneTB._VEGA = this._VEGA; cloneTB._CALC_PRICE = this._CALC_PRICE; cloneTB._CALCULATED_FLAG = this._CALCULATED_FLAG; cloneTB._CALCULATED_TIME = this._CALCULATED_TIME; cloneTB._CALCULATE_TYP = this._CALCULATE_TYP; return cloneTB; } catch(Exception ex) { throw new Exception(ex.Message); } }
public static clsHITM_FP_GREEKRESULT_TB Create(DataRow dr) { try { clsHITM_FP_GREEKRESULT_TB tb = new clsHITM_FP_GREEKRESULT_TB(); tb._FP_GREEKRESULT_ID = Convert.ToString(dr[0]); tb._CALC_DT = Convert.ToString(dr[1]); tb._INSTRUMENT_ID = Convert.ToString(dr[2]); tb._INSTRUMENT_TYP = Convert.ToInt32(dr[3]); tb._UNDERLYING_ID = Convert.ToString(dr[4]); tb._UNDERLYING_VALUE = Convert.ToDouble(dr[5]); tb._SEQ = Convert.ToInt32(dr[6]); tb._DELTA = Convert.ToDouble(dr[7]); tb._GAMMA = Convert.ToDouble(dr[8]); tb._VEGA = Convert.ToDouble(dr[9]); tb._CALC_PRICE = Convert.ToDouble(dr[10]); tb._CALCULATED_FLAG = Convert.ToInt32(dr[11]); tb._CALCULATED_TIME = Convert.ToString(dr[12]); tb._CALCULATE_TYP = Convert.ToInt32(dr[13]); return tb; } catch(Exception ex) { throw new Exception(ex.Message); } }
public void calculatePL() { CalendarManager cm = new CalendarManager(this.ReferenceDateTime_, CalendarManager.CountryType.SOUTH_KOREA); clsHITM_FP_GREEKRESULT_TB clstb_result = new clsHITM_FP_GREEKRESULT_TB(); clstb_result.CALC_DT = this.ReferenceDateTime_.ToString("yyyyMMdd"); clstb_result.INSTRUMENT_ID = this.DAO_.INSTRUMENT_ID; clstb_result.SEQ = 1; int checkNum = clstb_result.SelectOwn(); if (checkNum == 0) { throw new Exception("no exist"); } double calcPrice = clstb_result.CALC_PRICE; double quantity = this.DAO_.INSTRUMENT_QNT; clsMAST_FP_INSTRUMENT_TB clstb_master = new clsMAST_FP_INSTRUMENT_TB(); //this.DAO_.ETC_PL = clstb_result.CALC_PRICE; this.DAO_.EVAL_AMT = Math.Round( calcPrice ); this.DAO_.EVAL_PRICE = Math.Round( calcPrice / quantity ); this.DAO_.EVAL_ACCOUNT_PL = Math.Round( this.DAO_.EVAL_AMT - this.DAO_.ACCOUNT_AMT ); // - 평가금액 - 장부금액 //this.DAO_.TRADE_PROFIT = this.DAO_.TRADE_PROFIT + tradePosition.DAO_.TRADE_PROFIT; // 일별 매매수익 //this.DAO_.TRADE_LOSS = tradePosition.DAO_.TRADE_LOSS; //this.DAO_.TRADE_TOTAL = tradePosition.DAO_.TRADE_TOTAL; //this.DAO_.TRANSACTION_FEE = tradePosition.DAO_.TRANSACTION_FEE; this.DAO_.ETC_PL = 0; // 데일리 기타 손익임. this.DAO_.TOTAL_ACCOUNT_PL = Math.Round( this.DAO_.EVAL_ACCOUNT_PL + this.DAO_.TRADE_TOTAL + this.DAO_.TRANSACTION_FEE ); // 전일 포지션 DateTime preDate = cm.preBusinessDay(ConvertingTool.ToDateTime(this.ReferenceDateTime_.ToString("yyyyMMdd"))); clsHITM_FP_POSITION_TB clstb_position = new clsHITM_FP_POSITION_TB(); clstb_position.POSITION_DT = preDate.ToString("yyyyMMdd"); clstb_position.INSTRUMENT_ID = this.DAO_.INSTRUMENT_ID; clstb_position.SelectOwn(); // 전일자꺼가 여기 박혀서 옴..? 중간에 trade했을때 this.DAO_.DAILY_EVAL_PL = Math.Round(this.DAO_.EVAL_AMT - clstb_position.EVAL_AMT ); // 전일 평가 - 당일 평가 this.DAO_.DAILY_TOTAL_PL = Math.Round( this.DAO_.TRADE_TOTAL + this.DAO_.ETC_PL + this.DAO_.DAILY_EVAL_PL ); // 여기서 부터 작업 this.calculatePL_impl(); if (this.DAO_.UpdateCalculatedPosition() == 0) { throw new Exception("update fail :" + this.DAO_.INSTRUMENT_ID + " " + this.DAO_.POSITION_DT); } else if (this.DAO_.UpdateCalculatedPosition() > 1) { throw new Exception("too many updated :" + this.DAO_.INSTRUMENT_ID + " " + this.DAO_.POSITION_DT); } else { } }
public override void calculate(DateTime calcDate, FP_Parameter fp_parameter) { // 돌릴거에 대한 List를 가져옴. List<ScenarioInfo> scenarioInfoList = new List<ScenarioInfo>(); List<double> scenarioCalcList = new List<double>(); clsSET_SCENARIO_TB clstb_scenario = new clsSET_SCENARIO_TB(); // 이걸로 할건지 아니면 세부 swap 으로 할건지 clstb_scenario.FP_MASTER_TYP = this.baseDAO_.FP_MASTER_TYP; DataTable dt = clstb_scenario.Select(); foreach ( DataRow dr in dt.Select() ) { scenarioInfoList.Add(new ScenarioInfo() { DAO_ = clsSET_SCENARIO_TB.Create(dr) }); } foreach (ScenarioInfo sc_info in scenarioInfoList) { fp_parameter.ScenarioInfo_ = sc_info; //fp_parameter.CurveShift_ = new ParallelCurveShift(0.0); double v = this.calculateImpl(calcDate, fp_parameter); sc_info.CalcPrice_ = v; scenarioCalcList.Add(v); } fp_parameter.ScenarioInfo_ = ScenarioInfo.BaseParallelShift(); double value_up = this.calculateImpl(calcDate, fp_parameter); fp_parameter.ScenarioInfo_ = ScenarioInfo.NullScenario(); double value = this.calculateImpl(calcDate, fp_parameter); clsHITM_FP_GREEKRESULT_TB clstb_greekresult = new clsHITM_FP_GREEKRESULT_TB(); clsHDAT_MARKETDATA_TB clstb_market = new clsHDAT_MARKETDATA_TB(); clstb_market.REF_DT = calcDate.ToString("yyyyMMdd"); clstb_market.INDEX_CD = "CD91"; if (clstb_market.SelectOwn() == 0) { throw new Exception("market data does not exist : " + clstb_market.REF_DT + " " + clstb_market.INDEX_CD); } clstb_greekresult.CALC_DT = calcDate.ToString("yyyyMMdd"); clstb_greekresult.INSTRUMENT_ID = this.SwapDAO_.INSTRUMENT_ID; //clstb_greekresult.FP_GREEKRESULT_ID = ""; //clstb_greekresult.INSTRUMENT_TYP = 0; clstb_greekresult.UNDERLYING_ID = clstb_market.INDEX_CD; clstb_greekresult.UNDERLYING_VALUE = clstb_market.LAST; //clstb_greekresult.SEQ = 1; clstb_greekresult.DELTA = value_up - value; clstb_greekresult.GAMMA = 0.0; clstb_greekresult.VEGA = 0.0; clstb_greekresult.CALC_PRICE = value; clstb_greekresult.CALCULATED_FLAG = (int)clsHITM_FP_GREEKRESULT_TB.CALCULATED_FLAG_Type.CALCULATED; clstb_greekresult.CALCULATED_TIME = DateTime.Now.ToString("HHmmss"); clstb_greekresult.CALCULATE_TYP = (int)clsHITM_FP_GREEKRESULT_TB.CALCULATE_TYP_Type.ANALYTICS; // 패러럴 쉬푸투 or 그냥 구한거 머 등등.. clstb_greekresult.UpdateDateResult(); foreach (ScenarioInfo sc_info in scenarioInfoList) { //clstb_greekresult.FP_GREEKRESULT_ID = ""; //clstb_greekresult.INSTRUMENT_TYP = 0; //clstb_greekresult.UNDERLYING_ID = clstb_market.INDEX_CD; clstb_greekresult.UNDERLYING_ID = sc_info.ScenarioCode_; clstb_greekresult.UNDERLYING_VALUE = clstb_market.LAST; //clstb_greekresult.SEQ = 1; clstb_greekresult.DELTA = sc_info.CalcPrice_ - value; clstb_greekresult.GAMMA = 0.0; clstb_greekresult.VEGA = 0.0; // 시나리오의 경우 시나리오 value를 넣음. clstb_greekresult.CALC_PRICE = sc_info.CalcPrice_; clstb_greekresult.CALCULATED_FLAG = (int)clsHITM_FP_GREEKRESULT_TB.CALCULATED_FLAG_Type.CALCULATED; clstb_greekresult.CALCULATED_TIME = DateTime.Now.ToString("HHmmss"); clstb_greekresult.CALCULATE_TYP = (int)clsHITM_FP_GREEKRESULT_TB.CALCULATE_TYP_Type.ANALYTICS; // 패러럴 쉬푸투 or 그냥 구한거 머 등등.. //clstb_greekresult.Insert(); clstb_greekresult.UpdateDateResult(); } #region CashFlow // db 지우는 거? int fixedPayRec = this.SwapDAO_.PAY_REC; int floatingPayRec = fixedPayRec * (-1); for (int i = 0; i < this.FixedLegInfo_.FP_CashFlowList_.Count; i++) { this.FixedLegInfo_.FP_CashFlowList_[i].cf_insert(calcDate, i + 1, this.SwapDAO_.INSTRUMENT_ID, this.SwapDAO_.INSTRUMENT_TYP, fixedPayRec); } for (int j = 0; j < this.FloatingLegInfo_.FP_CashFlowList_.Count; j++) { this.FloatingLegInfo_.FP_CashFlowList_[j].cf_insert(calcDate, j + 1, this.SwapDAO_.INSTRUMENT_ID, this.SwapDAO_.INSTRUMENT_TYP, floatingPayRec); } #endregion }
public ObservableCollection<HedgeGreekPositionViewModel> hedgeGreekPositionLoad(IBook book) { ObservableCollection<HedgeGreekPositionViewModel> selected = new ObservableCollection<HedgeGreekPositionViewModel>(); clsHITM_FP_GREEKRESULT_TB clstb = new clsHITM_FP_GREEKRESULT_TB(); clstb.CALC_DT = this.ReferenceDate_.ToString("yyyyMMdd"); List<string> listStr = new List<string>(); book.getAllSubBookCode(listStr); //string bookcd = book.BookCode_; DataTable dt_greekResult = clstb.SelectUnderlyingPartition(listStr); foreach (DataRow dr in dt_greekResult.Select()) { HedgeGreekPositionViewModel vm = new HedgeGreekPositionViewModel(); vm.DAO_ = clsHITM_FP_GREEKRESULT_TB.Create(dr); selected.Add(vm); } return selected; }
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 ? }
public override void delete_result(string calcDateStr,string instID) { // greekresult clsHITM_FP_GREEKRESULT_TB clstb_greekresult = new clsHITM_FP_GREEKRESULT_TB(); clstb_greekresult.CALC_DT = calcDateStr; clstb_greekresult.DeleteDate(instID); // cashflowresult clsHITM_FP_CASHFLOWRESULT_TB clstb_cashflow = new clsHITM_FP_CASHFLOWRESULT_TB(); clstb_cashflow.CALC_DT = calcDateStr; clstb_cashflow.INSTRUMENT_ID = instID; clstb_cashflow.DeleteInstDateCashFlow(); }
//public override void calculate(DateTime calcDate) //{ // //try // //{ // // this.marketDataCheck(calcDate); // //} // //catch (Exception e) // //{ // // Console.WriteLine(e.Message); // // return; // //} // //double pay_notional = this.SwapDAO_.NOTIONAL_PAY; // //double rec_notional = this.SwapDAO_.NOTIONAL_REC; // //Date ql_calcDate = new Date(calcDate.ToString("yyyyMMdd"), "yyyyMMdd"); // //QuantLib.Settings.instance(). setEvaluationDate(ql_calcDate); // ////Date evalDate = Settings.instance().getEvaluationDate(); // ////Console.WriteLine("year : " + evalDate.year()); // ////Console.WriteLine("month : " + evalDate.month()); // ////Console.WriteLine("day : " + evalDate.dayOfMonth()); // //Date effectiveDate = new Date(this.SwapDAO_.EFFECTIVE_DT, "yyyyMMdd"); // //Date maturityDate = new Date(this.SwapDAO_.MATURITY_DT, "yyyyMMdd"); // //DayCounter dc = new Actual365Fixed(); // //CurveManager cm = new CurveManager(); // //QuantLib.Calendar calendar = new QuantLib.SouthKorea(); // //// --------------------------------------- // //List<int> regTypeIDs = new List<int>() { this.SwapDAO_.PAY_LEG_TYP, this.SwapDAO_.REC_LEG_TYP }; // //List<Leg> legs = new List<Leg>(); // //for (int i = 0; i < 2; i++) // //{ // // int legID = regTypeIDs[i]; // // Leg ql_leg = new Leg(); // // if (legID == 0) // // { // // this.ql_FixedlegSet(this.FP_PayCashFlowList_, ql_leg, pay_notional, dc); // // } // // else // // { // // string curveID = cm.indexCurveMapping(this.FixingIndexCD_); // // cm.loadCurveData(calcDate, curveID); // // YieldTermStructure indexCurve = cm.yieldCurve(); // // this.ql_FloatinglegSet(this.FP_RecCashFlowList_, ql_leg, rec_notional, indexCurve, dc, calendar); // // //indexCurve.Dispose(); // // } // // legs.Add(ql_leg); // //} // //Swap swap = new Swap(legs[0], legs[1]); // //cm.loadDiscountCurveData(calcDate, SwapDAO_.PAY_CURR); // //YieldTermStructure discountCurve = cm.yieldCurve(); // //YieldTermStructureHandle ysh = new YieldTermStructureHandle(discountCurve); // //DiscountingSwapEngine dse = new DiscountingSwapEngine(ysh); // //swap.setPricingEngine(dse); // //double npv = swap.NPV(); // //Console.WriteLine("NPV : " + npv ); // ////discountCurve.Dispose(); // ////ysh.Dispose(); // //// 평가함. // //// db 에 박음. // //// price // //clsHITM_FP_GREEKRESULT_TB clstb = new clsHITM_FP_GREEKRESULT_TB(); // //clstb.CALC_DT = calcDate.ToString("yyyyMMdd"); // //clstb.INSTRUMENT_ID = this.SwapDAO_.INSTRUMENT_ID; // //clstb.INSTRUMENT_TYP = this.SwapDAO_.INSTRUMENT_TYP; // //clstb.UNDERLYING_ID = ""; // //clstb.SEQ = 1; // //clstb.DELTA = 0.0; // //clstb.GAMMA = 0.0; // //clstb.VEGA = 0.0; // //clstb.CALC_PRICE = npv; // //clstb.Insert(); //} public override void calculate(DateTime calcDate, FP_Parameter fp_parameter) { // 돌릴거에 대한 List를 가져옴. //List<ScenarioData> scenarioDataList = new List<ScenarioData>(); fp_parameter.ScenarioInfo_ = ScenarioInfo.BaseParallelShift(); double value_up = this.calculateImpl(calcDate, fp_parameter); fp_parameter.ScenarioInfo_ = ScenarioInfo.NullScenario(); double value = this.calculateImpl(calcDate,fp_parameter); clsHITM_FP_GREEKRESULT_TB clstb_greekresult = new clsHITM_FP_GREEKRESULT_TB(); clsHDAT_MARKETDATA_TB clstb_market = new clsHDAT_MARKETDATA_TB(); string calcDateStr = calcDate.ToString("yyyyMMdd"); clstb_market.REF_DT = calcDateStr; clstb_market.INDEX_CD = "CD91"; if (clstb_market.SelectOwn() == 0) { throw new Exception("market data does not exist : " + clstb_market.REF_DT + " " + clstb_market.INDEX_CD); } clstb_greekresult.FP_GREEKRESULT_ID = IDGenerator.getNewGreekResultID(this.baseDAO_.INSTRUMENT_ID, calcDateStr); clstb_greekresult.CALC_DT = calcDate.ToString("yyyyMMdd"); clstb_greekresult.INSTRUMENT_ID = this.SwapDAO_.INSTRUMENT_ID; clstb_greekresult.INSTRUMENT_TYP = this.baseDAO_.FP_MASTER_TYP; clstb_greekresult.UNDERLYING_ID = clstb_market.INDEX_CD; clstb_greekresult.UNDERLYING_VALUE = clstb_market.LAST; clstb_greekresult.SEQ = 1; clstb_greekresult.DELTA = value_up - value; clstb_greekresult.GAMMA = 0.0; clstb_greekresult.VEGA = 0.0; clstb_greekresult.CALC_PRICE = value; clstb_greekresult.CALCULATED_FLAG = (int)clsHITM_FP_GREEKRESULT_TB.CALCULATED_FLAG_Type.CALCULATED; clstb_greekresult.CALCULATED_TIME = DateTime.Now.ToString("HHmmss"); clstb_greekresult.CALCULATE_TYP = (int)clsHITM_FP_GREEKRESULT_TB.CALCULATE_TYP_Type.ANALYTICS; // 패러럴 쉬푸투 or 그냥 구한거 머 등등.. //clstb_greekresult.UpdateDateResult(); clstb_greekresult.Insert(); #region CashFlow // db 지우는 거? for (int i = 0; i < this.FP_PayCashFlowList_.Count; i++) { if ( !this.FP_PayCashFlowList_[i].hasOccurred(calcDate) ) { this.FP_PayCashFlowList_[i].cf_insert(calcDate, i + 1, this.SwapDAO_.INSTRUMENT_ID, this.SwapDAO_.INSTRUMENT_TYP, (int)clsHITM_FP_CASHFLOWRESULT_TB.PAY_REC_Type.Pay); } } for (int j = 0; j < this.FP_RecCashFlowList_.Count; j++) { if (!this.FP_RecCashFlowList_[j].hasOccurred(calcDate)) { this.FP_RecCashFlowList_[j].cf_insert(calcDate, j + 1, this.SwapDAO_.INSTRUMENT_ID, this.SwapDAO_.INSTRUMENT_TYP, (int)clsHITM_FP_CASHFLOWRESULT_TB.PAY_REC_Type.Rec); } } #endregion }
public override void calculate(DateTime calcDate, FP_Parameter fp_parameter) { // market data load clsHDAT_MARKETDATA_TB clstb = new clsHDAT_MARKETDATA_TB(); string calcDateStr = calcDate.ToString("yyyyMMdd"); clstb.REF_DT = calcDateStr; clstb.INDEX_CD = this.Currency_; double currencyRate = 1.0; if ( this.Currency_ != "KRW") { int checkNum = clstb.SelectOwn(); if (checkNum == 0) { throw new Exception("market data does not exist : " + calcDateStr + " " + clstb.INDEX_CD); } currencyRate = clstb.LAST; } // cash amount load clsHITM_CASH_INSTOCK_TB clstb_cash = new clsHITM_CASH_INSTOCK_TB(); clstb_cash.BOOK_CD = this.baseDAO_.BOOK_CD; clstb_cash.CURR = this.Currency_; double total_cash_amount = 0.0; DataTable tb = clstb_cash.Select(); foreach (DataRow dr in tb.Select() ) { total_cash_amount += clsHITM_CASH_INSTOCK_TB.Create(dr).CASHFLOW; } // calculate // position clsHITM_FP_GREEKRESULT_TB result_tb = new clsHITM_FP_GREEKRESULT_TB(); result_tb.FP_GREEKRESULT_ID = IDGenerator.getNewGreekResultID(this.baseDAO_.INSTRUMENT_ID, calcDateStr); result_tb.CALC_DT = calcDateStr; result_tb.SEQ = 1; // price result_tb.INSTRUMENT_ID = this.baseDAO_.INSTRUMENT_ID; result_tb.INSTRUMENT_TYP = this.baseDAO_.FP_MASTER_TYP; result_tb.UNDERLYING_ID = this.Currency_; result_tb.UNDERLYING_VALUE = currencyRate; result_tb.DELTA = 0.0; result_tb.CALC_PRICE = total_cash_amount; 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; //if (result_tb.UpdateDateResult() == 0) // { throw new Exception("update fail : " + this.baseDAO_.INSTRUMENT_ID + " " + calcDate.ToString("yyyyMMdd")); }; result_tb.Insert(); // delta // gamma and others : no exist ? }
public virtual void build_emptyResult(DateTime refDate) { clsHITM_FP_GREEKRESULT_TB clstb = new clsHITM_FP_GREEKRESULT_TB(); string refDateStr = refDate.ToString("yyyyMMdd"); List<string> underlyingList = new List<string>(); this.underlyingList(underlyingList); clstb.FP_GREEKRESULT_ID = IDGenerator.getNewGreekResultID(this.baseDAO_.INSTRUMENT_ID, refDateStr); clstb.CALC_DT = refDateStr; clstb.INSTRUMENT_ID = this.baseDAO_.INSTRUMENT_ID; clstb.INSTRUMENT_TYP = this.baseDAO_.FP_MASTER_TYP; int i = 1; foreach (string under in underlyingList) { clstb.UNDERLYING_ID = under; clstb.UNDERLYING_VALUE = 0.0; clstb.SEQ = i; clstb.DELTA = 0.0; clstb.GAMMA = 0.0; clstb.VEGA = 0.0; clstb.CALC_PRICE = 0.0; clstb.CALCULATED_FLAG = 0; clstb.CALCULATED_TIME = ""; clstb.CALCULATE_TYP = 0; clstb.Insert(); i += 1; } // SCENARIO 팀장 미친 개새끼 clsSET_SCENARIO_TB cls_scenario = new clsSET_SCENARIO_TB(); cls_scenario.FP_MASTER_TYP = this.baseDAO_.FP_MASTER_TYP; DataTable dt = cls_scenario.Select(); foreach (DataRow dr in dt.Select()) { clstb.UNDERLYING_ID = clsSET_SCENARIO_TB.Create(dr).SCENARIO_CD; clstb.SEQ = i; clstb.Insert(); i += 1; } // 지워 clsHITM_FP_CASHFLOWRESULT_TB clstb_cf = new clsHITM_FP_CASHFLOWRESULT_TB(); clstb_cf.CALC_DT = refDate.ToString("yyyyMMdd"); clstb_cf.INSTRUMENT_ID = this.baseDAO_.INSTRUMENT_ID; clstb_cf.DeleteInstDateCashFlow(); }
// 이건 그냥 partition 말고 전체 list로 하자. join 이 있어서리 linq로 못감. // 최근일자가 가져와짐. public void totalHedgeGreekPositionLoad() { this.LoadedHedgeGreekPositionVMList_.Clear(); clsHITM_FP_GREEKRESULT_TB clstb_greekResult = new clsHITM_FP_GREEKRESULT_TB(); // 최근일 check // 결과가 있으면... 그날 가져옴... 없으면 전일자 // 보통 예전 일이면 그냥 그날꺼 가져옴 // 이놈은 생성을 언제 하냐면.... 다음날이 대면 그냥 생성해놓음. clsHDAT_BATCHJOB_RESULT_TB clstb_batchjob = new clsHDAT_BATCHJOB_RESULT_TB(); string refDateStr = this.ReferenceDate_.ToString("yyyyMMdd"); clstb_batchjob.BATCH_JOB_ID = (int)clsHDAT_BATCHJOB_RESULT_TB.BATCH_JOB_ID_Type.FP_CACULATION; clstb_batchjob.CALC_DT = refDateStr; clstb_batchjob.SelectOwn(); clstb_greekResult.CALC_DT = clstb_batchjob.MaxCalcDateSelect(); DataTable dt_greekResult = clstb_greekResult.Select(); foreach (DataRow dr in dt_greekResult.Select()) { HedgeGreekPositionViewModel vm = new HedgeGreekPositionViewModel(); vm.DAO_ = clsHITM_FP_GREEKRESULT_TB.Create(dr); this.LoadedHedgeGreekPositionVMList_.Add(vm); } //if (clstb_batchjob.STATUS == (int)clsHDAT_BATCHJOB_RESULT_TB.STATUS_Type.CALCULATED) //{ // clstb_greekResult.CALC_DT = clstb_batchjob.CALC_DT; // DataTable dt_greekResult = clstb_greekResult.Select(); // foreach (DataRow dr in dt_greekResult.Select()) // { // HedgeGreekPositionViewModel vm = new HedgeGreekPositionViewModel(); // vm.DAO_ = clsHITM_FP_GREEKRESULT_TB.Create(dr); // this.LoadedHedgeGreekPositionVMList_.Add(vm); // } //} //else //{ // // 최근일 // refDateStr = clstb_batchjob.MaxCalcDateSelect(); // clstb_greekResult.CALC_DT = clstb_batchjob; // DataTable dt_greekResult = clstb_greekResult.Select(); // foreach (DataRow dr in dt_greekResult.Select()) // { // HedgeGreekPositionViewModel vm = new HedgeGreekPositionViewModel(); // vm.DAO_ = clsHITM_FP_GREEKRESULT_TB.Create(dr); // this.LoadedHedgeGreekPositionVMList_.Add(vm); // } //} }