Exemple #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_);
            }

        }
Exemple #2
0
        public void batch_calculate()
        { 
            //
            clsHDAT_BATCHJOB_RESULT_TB clstb = new clsHDAT_BATCHJOB_RESULT_TB();

            clstb.CALC_DT = this.ReferenceDate_.ToString("yyyyMMdd");
            clstb.START_TIME = DateTime.Now.ToString("HHmmdd");
            clstb.STATUS = (int)clsHDAT_BATCHJOB_RESULT_TB.STATUS_Type.CALCULATING;

            clstb.BATCH_JOB_ID = (int)clsHDAT_BATCHJOB_RESULT_TB.BATCH_JOB_ID_Type.FP_CACULATION;

            clstb.Update();

            // load 함 ------------------------------------------------------------------
            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>();

            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);
            }

            // ------------------------------------------------------------------

            try
            {
                foreach (Financial_instrument roop_fi in fi_list)
                {
                    roop_fi.calculate(this.ReferenceDate_);
                }
            }
            catch (Exception e)
            {
                this.LogManager_.addLog(e.Message);
            }

            // ------------------------------------------------------------------

            clstb.END_TIME = DateTime.Now.ToString("HHmmdd");
            clstb.STATUS = (int)clsHDAT_BATCHJOB_RESULT_TB.STATUS_Type.CALCULATED;

            clstb.Update();


        }
Exemple #3
0
        public void batch_calculate()
        { 
            // if empty result가 없으면 만듬.
            //this.build_calculation();

            // load 함 ------------------------------------------------------------------
            clsMAST_FP_INSTRUMENT_TB clstb_mast = new clsMAST_FP_INSTRUMENT_TB();

            DataTable dt = clstb_mast.SelectAliveInstruments(this.ReferenceDate_);

            List<Financial_instrument> fi_list = new List<Financial_instrument>();

            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);
            }

            // 파라메터 아직 디폴트 ---------------------------------------------
            FP_Parameter fp_parameter = new FP_Parameter();
            fp_parameter.CalcDate_ = this.ReferenceDate_;
            fp_parameter.defaultLoad();
            // ------------------------------------------------------------------

                foreach (Financial_instrument roop_fi in fi_list)
                {
                    // 내부에서 cash_flow까지 같이 돌음.
                    roop_fi.delete_result(this.ReferenceDate_,roop_fi.baseDAO_.INSTRUMENT_ID);
                    roop_fi.calculate(this.ReferenceDate_, fp_parameter);
                }
            //try
            //{
            //}
            //catch (Exception e)
            //{
            //    this.LogManager_.addLog(e.Message);
            //}

            // ------------------------------------------------------------------

            //clstb.END_TIME = DateTime.Now.ToString("HHmmdd");
            //clstb.STATUS = (int)clsHDAT_BATCHJOB_RESULT_TB.STATUS_Type.CALCULATED;

            //clstb.Update();


        }
        public void loadScenario(clsMAST_FP_INSTRUMENT_TB.FP_MASTER_TYP_Type? fi_type)
        {
            this.clstbList_.Clear();

            clsSET_SCENARIO_TB clstb = new clsSET_SCENARIO_TB();

            clstb.FP_MASTER_TYP = (int)(fi_type.Value);

            DataTable dt = clstb.Select();

            foreach (DataRow dr in dt.Select() )
            {
                this.clstbList_.Add(clsSET_SCENARIO_TB.Create(dr));
            }
        }
Exemple #5
0
        // #CreateInstrument_ItemAdd
        public static Financial_instrument CreateInstrument(clsMAST_FP_INSTRUMENT_TB tb)
        {
            int type = tb.FP_MASTER_TYP;

            Financial_instrument fi = new Unknown_fi_instrument();

            if (type == (int)clsMAST_FP_INSTRUMENT_TB.FP_MASTER_TYP_Type.Kospi200_IndexFutures)
            {
                fi = new Kospi200Index_futures();
            }
            else if (type == (int)clsMAST_FP_INSTRUMENT_TB.FP_MASTER_TYP_Type.Kospi200_IndexOption_Call 
                || type == (int)clsMAST_FP_INSTRUMENT_TB.FP_MASTER_TYP_Type.Kospi200_IndexOption_Put)
            {
                fi = new Kospi200Index_option();
            }
            else if (type == (int)clsMAST_FP_INSTRUMENT_TB.FP_MASTER_TYP_Type.VanillaIRS)
            {
                fi = new VanillaIRS_instrument();
            }
            else if (type == (int)clsMAST_FP_INSTRUMENT_TB.FP_MASTER_TYP_Type.VanillaSwap)
            {
                fi = new Vanilla_Swap();
            }
            else if (type == (int)clsMAST_FP_INSTRUMENT_TB.FP_MASTER_TYP_Type.Ftp_DepositLoan)
            {
                fi = new Ftp_DepositLoan();
            }
            else if (type == (int)clsMAST_FP_INSTRUMENT_TB.FP_MASTER_TYP_Type.Money_Cash)
            {
                fi = new CurrencyCash();
            }

            else
            {
                //fi = new Unknown_instrument();
            }

            fi.baseDAO_ = tb;
            fi.loadDetail(tb.INSTRUMENT_ID);

            return fi;
        }
Exemple #6
0
        public void fpMasterResultLoad()
        {
            this.LoadedFPMasterResultVMList_.Clear();

            clsMAST_FP_INSTRUMENT_TB clstb = new clsMAST_FP_INSTRUMENT_TB();

            //clstb. = this.ReferenceDate_.ToString("yyyyMMdd");

            DataTable dt = clstb.Select();

            foreach (DataRow dr in dt.Select())
            {
                FP_MasterResultDataViewModel vm = new FP_MasterResultDataViewModel();
                
                vm.MastDAO_ = clsMAST_FP_INSTRUMENT_TB.Create(dr);
                vm.load_resultList(this.ReferenceDate_);

                this.LoadedFPMasterResultVMList_.Add(vm);
            }
        }
Exemple #7
0
        // 기존거 있으면 지움. 초기화임.
        public void build_position()
        {
            // 전일자 position date ?
            CalendarManager calendarM = new CalendarManager(this.ReferenceDate_, CalendarManager.CountryType.SOUTH_KOREA);
            DateTime preDate = calendarM.preBusinessDay(this.ReferenceDate_);

            clsHITM_FP_POSITION_TB clstb_position = new clsHITM_FP_POSITION_TB();
            clstb_position.POSITION_DT = this.ReferenceDate_.ToString("yyyyMMdd");
            clstb_position.DeleteDate();

            this.build_cashMaster();
            // ------------------------------------------------------------------------

            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을 만들음. // bookdate ? 감안해서 만듬?
            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)
            {
                // trading 할때에 같은 날짜는 나중에 더해서 만들어짐
                if (ConvertingTool.ToDateTime(fi.baseDAO_.BOOKED_DT).Date < this.ReferenceDate_.Date)
                { 
                    fi.build_position(preDate, this.ReferenceDate_);
                }
                
            }


        }
		public clsMAST_FP_INSTRUMENT_TB Clone()
		{
			try
			{
				clsMAST_FP_INSTRUMENT_TB cloneTB = new clsMAST_FP_INSTRUMENT_TB();
				
				
				cloneTB._INSTRUMENT_ID = this._INSTRUMENT_ID;
				cloneTB._INSTRUMENT_NM = this._INSTRUMENT_NM;
				cloneTB._FP_MASTER_TYP = this._FP_MASTER_TYP;
				cloneTB._NOTIONAL = this._NOTIONAL;
				cloneTB._PRICE = this._PRICE;
				cloneTB._QUANTITY = this._QUANTITY;
				cloneTB._CURR = this._CURR;
				cloneTB._FX_RATE = this._FX_RATE;
				cloneTB._EFFECTIVE_DT = this._EFFECTIVE_DT;
				cloneTB._MATURITY_DT = this._MATURITY_DT;
				cloneTB._BOOK_CD = this._BOOK_CD;
				cloneTB._BOOKED_DT = this._BOOKED_DT;
				cloneTB._CLOSED_DT = this._CLOSED_DT; 
				
				return cloneTB;
			}
			catch(Exception ex)
			{
				throw new Exception(ex.Message);
			}
		}
Exemple #9
0
        private static void test()
        {
            DateTime startDate = new DateTime(2014, 1, 1);
            DateTime endDate = DateTime.Now.AddDays(-1.0).Date;
            SampleMarketDataETL sample_etl = new SampleMarketDataETL();

            HDAT_MARKETDATA_TB marketdata_tb = new HDAT_MARKETDATA_TB();
            clsHDAT_MARKETDATA_TB.TableClear();

            HDAT_CURVEDATA_TB curvedata_tb = new HDAT_CURVEDATA_TB();
            clsHDAT_CURVEDATA_TB.TableClear();

            sample_etl.build_historyData(startDate, endDate, true);

            {
                //HDAT_MARKETDATA_TB marketdata_tb = new HDAT_MARKETDATA_TB();
                //clsHDAT_MARKETDATA_TB.TableClear();
                //marketdata_tb.buildTestData();

                clsHITM_TRADEINFO_TB trade_tb = new clsHITM_TRADEINFO_TB();
                clsHITM_TRADEINFO_TB.TableClear();

                clsMAST_FP_INSTRUMENT_TB mast_tb = new clsMAST_FP_INSTRUMENT_TB();
                clsMAST_FP_INSTRUMENT_TB.TableClear();

                clsHITM_FP_POSITION_TB position_tb = new clsHITM_FP_POSITION_TB();
                clsHITM_FP_POSITION_TB.TableClear();

                curvedata_tb.buildTestData();

                SET_DISCOUNTCURVE_TB discount_tb = new SET_DISCOUNTCURVE_TB();
                clsSET_DISCOUNTCURVE_TB.TableClear();
                discount_tb.buildTestData();

                HITM_CALENDAR_TB calendar_tb = new HITM_CALENDAR_TB();
                clsHITM_CALENDAR_TB.TableClear();
                calendar_tb.buildTestData();



            }

        }
Exemple #10
0
        public void moveInstrumentToThis(clsMAST_FP_INSTRUMENT_TB clstb)
        {
            // book change
            clstb.BOOK_CD = this.bookCode_;

            if (clstb.UpdateBook() != 1)
                { throw new Exception("move instrument fail : " + clstb.INSTRUMENT_NM); }


            // position change
            clsHITM_FP_POSITION_TB clstb_position = new clsHITM_FP_POSITION_TB();

            clstb_position.BOOK_CD = this.bookCode_;
            clstb_position.INSTRUMENT_ID = clstb.INSTRUMENT_ID;

            if (clstb_position.UpdateBookChange() == 0)
                { throw new Exception("0 position is moved : " + clstb.INSTRUMENT_NM); }


        }
        public void totalFPMasterLoad()
        {
            this.LoadedFPMasterDAOList_.Clear();

            // sub book 에 대한 검사.

            clsMAST_FP_INSTRUMENT_TB clstb = new clsMAST_FP_INSTRUMENT_TB();

            //clstb.BOOK_CD = book_cd;

            DataTable dt = clstb.Select();

            foreach (DataRow dr in dt.Select())
            {
                this.LoadedFPMasterDAOList_.Add(clsMAST_FP_INSTRUMENT_TB.Create(dr));
            }
        }
Exemple #12
0
        private static string nextMonthOrder(string typeStr, string yearStr, string monthStr)
        {
            clsMAST_FP_INSTRUMENT_TB clstb = new clsMAST_FP_INSTRUMENT_TB();

            List<string> idList = new List<string>();

            foreach (DataRow dr in clstb.Select().Select())
            {
                idList.Add(Convert.ToString(dr[0]));
            }

            //string k1 = idList[0].Substring(2, 1);
            //string k2 = idList[0].Substring(4, 1);
            //string k3 = idList[0].Substring(5, 1);

            List<int> order = (from inst_id in idList
                                where inst_id.Substring(2, 1) == typeStr &&
                                        inst_id.Substring(4, 1) == yearStr &&
                                        inst_id.Substring(5, 1) == monthStr
                                select IDGenerator.getIndex(inst_id.Substring(6, 3))).ToList<int>();

            int max = (order.Count == 0) ? -1 : order.Max();

            return IDGenerator.getLetter(max + 1, 3);
        }
Exemple #13
0
        private static string nextCurrencyOrder(string currency)
        {
            clsMAST_FP_INSTRUMENT_TB clstb = new clsMAST_FP_INSTRUMENT_TB();

            List<string> idList = new List<string>();

            foreach (DataRow dr in clstb.Select().Select())
            {
                idList.Add(Convert.ToString(dr[0]));
            }

            List<int> order = (from inst_id in idList
                               where inst_id.Substring(2, 3) == currency 
                               select IDGenerator.getIndex(inst_id.Substring(5, 4))).ToList<int>();

            int max = (order.Count == 0) ? -1 : order.Max();

            return IDGenerator.getLetter(max + 1, 4);


        }
		public static clsMAST_FP_INSTRUMENT_TB Create(DataRow dr)
		{
			try
			{
				clsMAST_FP_INSTRUMENT_TB tb = new clsMAST_FP_INSTRUMENT_TB();
				
				
				tb._INSTRUMENT_ID = Convert.ToString(dr[0]);
				tb._INSTRUMENT_NM = Convert.ToString(dr[1]);
				tb._FP_MASTER_TYP = Convert.ToInt32(dr[2]);
				tb._NOTIONAL = Convert.ToDouble(dr[3]);
				tb._PRICE = Convert.ToDouble(dr[4]);
				tb._QUANTITY = Convert.ToDouble(dr[5]);
				tb._CURR = Convert.ToString(dr[6]);
				tb._FX_RATE = Convert.ToDouble(dr[7]);
				tb._EFFECTIVE_DT = Convert.ToString(dr[8]);
				tb._MATURITY_DT = Convert.ToString(dr[9]);
				tb._BOOK_CD = Convert.ToString(dr[10]);
				tb._BOOKED_DT = Convert.ToString(dr[11]);
				tb._CLOSED_DT = Convert.ToString(dr[12]); 
				
				return tb;
			}
			catch(Exception ex)
			{
				throw new Exception(ex.Message);
			}
		}
Exemple #15
0
        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 { }
        }
Exemple #16
0
        private void build_cashMaster()
        { 
            #region Build Base Cash Master
            
            // cash를 만듬 -----------------------------------------------------------
            clsMAST_BOOKINFO_TB clstb_bookinfo = new clsMAST_BOOKINFO_TB();
            // krw 없는 booklist를 에다가 krw를 넣음

            DataTable noKRWCash_dt = clstb_bookinfo.SelectBookNoKRWCash();

            foreach (DataRow dr in noKRWCash_dt.Select() )
            {
                CurrencyCash cash_fi = 
                    CurrencyCash.CurrencyCashBooking("KRW",clsMAST_BOOKINFO_TB.Create(dr).BOOK_CD,this.ReferenceDate_);

                //cash_fi.build_cashPosition(this.ReferenceDate_);
            }

            DataTable totalBook_dt = clstb_bookinfo.Select();

            // 각각의 북마다 krw를 제외한 Currency 를 뜸
            clsHITM_CASH_INSTOCK_TB clstb_cash = new clsHITM_CASH_INSTOCK_TB();
            clsMAST_FP_INSTRUMENT_TB clstb_master = new clsMAST_FP_INSTRUMENT_TB();

            foreach (DataRow dr in totalBook_dt.Select())
            {
                string book_cd = clsMAST_BOOKINFO_TB.Create(dr).BOOK_CD;

                // book별 cash list
                foreach ( DataRow dr2 in clstb_cash.SelectCashesInEachBook(book_cd).Select() )
                {
                    string currency = clsHITM_CASH_INSTOCK_TB.Create(dr2).CURR;

                    if (clstb_master.SelectHasCurrency(currency, book_cd).Rows.Count == 0)
                    {
                        if (currency != "KRW")
                        { 
                            CurrencyCash cash_fi = 
                                CurrencyCash.CurrencyCashBooking(currency, clsMAST_BOOKINFO_TB.Create(dr).BOOK_CD, this.ReferenceDate_);
                        } 

                        //cash_fi.build_cashPosition(this.ReferenceDate_);

                    }

                }
                
            }

            #endregion

            // if 오늘 부킹댄거면 position , emptyGreekResult 만듬.
            clstb_master.FP_MASTER_TYP = (int)clsMAST_FP_INSTRUMENT_TB.FP_MASTER_TYP_Type.Money_Cash;
            clstb_master.BOOKED_DT = this.ReferenceDate_.ToString("yyyyMMdd");

            DataTable cash_dt = clstb_master.Select();

            foreach (DataRow dr in cash_dt.Select())
            {
                clsMAST_FP_INSTRUMENT_TB tb = clsMAST_FP_INSTRUMENT_TB.Create(dr);
                CurrencyCash cash_fi = (CurrencyCash)Financial_instrument.CreateInstrument(tb);
                cash_fi.build_cashPosition(this.ReferenceDate_);
                //cash_fi.build_emptyResult(this.ReferenceDate_);
            }

        }
Exemple #17
0
        public static CurrencyCash CurrencyCashBooking(string currency, string book_cd, DateTime bookOpenDate)
        {
            clsMAST_FP_INSTRUMENT_TB clstb = new clsMAST_FP_INSTRUMENT_TB();

            CurrencyCash fi = new CurrencyCash(currency);

            clstb.INSTRUMENT_ID = IDGenerator.getNewInstrumentID(Financial_instrument.InstrumentType.Money_Cash,
                                                                bookOpenDate, fi);

            clstb.INSTRUMENT_NM = currency.ToUpper() + " Cash";
            clstb.FP_MASTER_TYP = (int)clsMAST_FP_INSTRUMENT_TB.FP_MASTER_TYP_Type.Money_Cash;
            clstb.NOTIONAL = 0; // 5만달러
            clstb.PRICE = 0; // 1102원
            clstb.QUANTITY = 0; // 1계약 뭐 이런식 2개면 12만달러임. krw로 바꾸는건 view에서
            clstb.CURR = currency;
            clstb.FX_RATE = 1.0;
            clstb.EFFECTIVE_DT = bookOpenDate.ToString("yyyyMMdd");
            clstb.MATURITY_DT = "20991231";
            clstb.BOOK_CD = book_cd;
            clstb.BOOKED_DT = bookOpenDate.ToString("yyyyMMdd");
            clstb.CLOSED_DT = "20991231";

            fi.baseDAO_ = clstb;

            clstb.Insert();

            return fi;

        }