public override Position nextDateClone(DateTime nextDate) { Position clone = new CurrencyCashPosition(); this.nextDatepositionBaseCopy(clone, nextDate); clsHITM_CASH_INSTOCK_TB clstb = new clsHITM_CASH_INSTOCK_TB(); DataTable dt = clstb.SelectCashSumInBook(this.DAO_.BOOK_CD, this.DAO_.EVAL_CURR); foreach (DataRow dr in dt.Select() ) { clsHITM_CASH_INSTOCK_TB tb = clsHITM_CASH_INSTOCK_TB.Create(dr); this.DAO_.INSTRUMENT_QNT = this.DAO_.INSTRUMENT_QNT + tb.CASHFLOW; this.DAO_.NOTIONAL_AMT = this.DAO_.NOTIONAL_AMT + tb.NOTIONAL; this.DAO_.ACCOUNT_AMT = this.DAO_.ACCOUNT_AMT + tb.CASHFLOW_DOMESTIC; this.DAO_.ACCOUNT_UNIT = 1.0; this.DAO_.ACCOUNT_INDEX = 1.0;//this.DAO_.ACCOUNT_AMT * this.DAO_. this.DAO_.EVAL_AMT = this.DAO_.EVAL_AMT; // 차후 업어쳐질거임 this.DAO_.EVAL_PRICE = this.DAO_.EVAL_PRICE; /// this.DAO_.INSTRUMENT_QNT; ; // - 평가금액 / 수량 this.DAO_.EVAL_ACCOUNT_PL = this.DAO_.EVAL_PRICE - this.DAO_.ACCOUNT_AMT; // - 평가금액 - 장부금액 this.DAO_.TRADE_PROFIT = this.DAO_.TRADE_PROFIT; // 일별 매매수익 this.DAO_.TRADE_LOSS = 0.0; this.DAO_.TRADE_TOTAL = 0.0; // 전일자꺼 그대로 놔둠 우선.. //this.DAO_.TRANSACTION_FEE = //this.DAO_.ETC_PL = tradePosition.DAO_.ETC_PL; //this.DAO_.TOTAL_ACCOUNT_PL = tradePosition.DAO_.TOTAL_ACCOUNT_PL; //this.DAO_.DAILY_EVAL_PL = tradePosition.DAO_.DAILY_EVAL_PL; //this.DAO_.DAILY_TOTAL_PL = tradePosition.DAO_.DAILY_TOTAL_PL; } //this.DAO_.POSITION_ID = tradePosition.DAO_.POSITION_ID; //this.DAO_.POSITION_TYP = tradePosition.DAO_.POSITION_TYP; //this.DAO_.POSITION_DT = tradePosition.DAO_.POSITION_DT; //this.DAO_.INSTRUMENT_ID = tradePosition.DAO_.INSTRUMENT_ID; //this.DAO_.EVAL_CURR = tradePosition.DAO_.EVAL_CURR; //this.DAO_.CURR_RATE = tradePosition.DAO_.CURR_RATE; return clone; }
public override void cash_instock_insert(string book_cd) { clsHITM_CASH_INSTOCK_TB clstb = new clsHITM_CASH_INSTOCK_TB(); clstb.NOTIONAL = this.DAO_.TRADE_NOTIONAL_AMT; clstb.CASHFLOW_DT = this.DAO_.TRADE_DT; clstb.CASHFLOW_TYP = 0; clstb.CURR = "KRW"; clstb.SEQ = 0; clstb.BOOK_CD = book_cd; clstb.INSTRUMENT_ID = this.DAO_.INSTRUMENT_ID; clstb.INSTRUMENT_TYP = this.DAO_.FP_MASTER_TYP; clstb.IN_OUT = this.DAO_.BUY_SELL * (-1); clstb.CASHFLOW = this.DAO_.TRADE_FEE * clstb.IN_OUT; clstb.Insert(); }
public clsHITM_CASH_INSTOCK_TB Clone() { try { clsHITM_CASH_INSTOCK_TB cloneTB = new clsHITM_CASH_INSTOCK_TB(); cloneTB._NOTIONAL = this._NOTIONAL; cloneTB._CASHFLOW_DT = this._CASHFLOW_DT; cloneTB._CASHFLOW_TYP = this._CASHFLOW_TYP; cloneTB._BOOK_CD = this._BOOK_CD; cloneTB._CURR = this._CURR; cloneTB._SEQ = this._SEQ; cloneTB._INSTRUMENT_ID = this._INSTRUMENT_ID; cloneTB._INSTRUMENT_TYP = this._INSTRUMENT_TYP; cloneTB._IN_OUT = this._IN_OUT; cloneTB._CASHFLOW = this._CASHFLOW; cloneTB._CASHFLOW_DOMESTIC = this._CASHFLOW_DOMESTIC; return cloneTB; } catch(Exception ex) { throw new Exception(ex.Message); } }
public static clsHITM_CASH_INSTOCK_TB Create(DataRow dr) { try { clsHITM_CASH_INSTOCK_TB tb = new clsHITM_CASH_INSTOCK_TB(); tb._NOTIONAL = Convert.ToDouble(dr[0]); tb._CASHFLOW_DT = Convert.ToString(dr[1]); tb._CASHFLOW_TYP = Convert.ToInt32(dr[2]); tb._BOOK_CD = Convert.ToString(dr[3]); tb._CURR = Convert.ToString(dr[4]); tb._SEQ = Convert.ToInt32(dr[5]); tb._INSTRUMENT_ID = Convert.ToString(dr[6]); tb._INSTRUMENT_TYP = Convert.ToInt32(dr[7]); tb._IN_OUT = Convert.ToInt32(dr[8]); tb._CASHFLOW = Convert.ToDouble(dr[9]); tb._CASHFLOW_DOMESTIC = Convert.ToDouble(dr[10]); return tb; } catch(Exception ex) { throw new Exception(ex.Message); } }
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 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 void build_cashPosition(DateTime refDate) { clsHITM_CASH_INSTOCK_TB clstb_cash = new clsHITM_CASH_INSTOCK_TB(); DataTable dt = clstb_cash.SelectCashesInEachBook(this.baseDAO_.BOOK_CD); clsHITM_FP_POSITION_TB clstb = new clsHITM_FP_POSITION_TB(); foreach ( DataRow dr in dt.Select() ) { clsHITM_CASH_INSTOCK_TB tb_cash = clsHITM_CASH_INSTOCK_TB.Create(dr); clstb.POSITION_ID = IDGenerator.getNewPositionID(this.baseDAO_.INSTRUMENT_ID, refDate.ToString("yyyyMMdd")); clstb.FP_MASTER_TYP = this.baseDAO_.FP_MASTER_TYP; clstb.POSITION_DT = refDate.ToString("yyyyMMdd"); clstb.BOOK_CD = this.baseDAO_.BOOK_CD; clstb.INSTRUMENT_ID = this.baseDAO_.INSTRUMENT_ID; clstb.INSTRUMENT_QNT = tb_cash.CASHFLOW; clstb.EVAL_CURR = tb_cash.CURR; clstb.CURR_RATE = 1.0;//tb_cash.CURR_RATE; clstb.NOTIONAL_AMT = tb_cash.CASHFLOW; clstb.ACCOUNT_AMT = tb_cash.CASHFLOW_DOMESTIC; clstb.ACCOUNT_UNIT = 0.0; clstb.ACCOUNT_INDEX = 0.0; clstb.EVAL_AMT = 0.0; clstb.EVAL_PRICE = 0.0; clstb.EVAL_ACCOUNT_PL = 0.0; clstb.TRADE_PROFIT = 0.0; clstb.TRADE_LOSS = 0.0; clstb.TRADE_TOTAL = 0.0; clstb.TRANSACTION_FEE = 0.0; clstb.ETC_PL = 0.0; clstb.TOTAL_ACCOUNT_PL = 0.0; clstb.DAILY_EVAL_PL = 0.0; clstb.DAILY_TOTAL_PL = 0.0; clstb.Insert(); } }
public override void delete_instrument() { clsHITM_CASH_INSTOCK_TB clstb = new clsHITM_CASH_INSTOCK_TB(); clstb.BOOK_CD = this.baseDAO_.BOOK_CD; clstb.CURR = this.Currency_; // master 에서 지움. if (this.Currency_ != "KRW") { this.baseDAO_.DeleteID(); if (clstb.DeleteCurrency() != 1) { throw new Exception("delete fail : " + this.Currency_); } } else { //초기화됨. if (clstb.DeleteCurrency() != 1) { throw new Exception("delete fail : " + this.Currency_); } //throw new Exception("KRW can't be deleted"); } }