Beispiel #1
0
        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;
        }
Beispiel #2
0
        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);
			}
		}
Beispiel #5
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_);
            }

        }
Beispiel #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.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 ?
        }
Beispiel #7
0
        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();
	        }

        }
Beispiel #8
0
        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");
            }

        }