示例#1
0
        // 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_);
            }

        }
示例#2
0
        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();
            }
        
        }
示例#3
0
        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);
        }
示例#4
0
        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));
            }

        }
示例#6
0
        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 ?

        }
示例#7
0
		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);
			}
		}
示例#8
0
		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);
			}
		}
示例#9
0
文件: Position.cs 项目: minikie/test
        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 { }
        }
示例#10
0
        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
        }
示例#11
0
        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;
        }
示例#12
0
        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 ?


        }
示例#13
0
        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();

        }
示例#14
0
        //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
        }
示例#15
0
        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 ?
        }
示例#16
0
        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();

        }
示例#17
0
        // 이건 그냥 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);
            //    }
            //}

        }