// 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 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(); }
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)); } }
// #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; }
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); } }
// 기존거 있으면 지움. 초기화임. 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); } }
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(); } }
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)); } }
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); }
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); } }
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 { } }
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_); } }
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; }