Ejemplo n.º 1
0
        }//receiveDataEventHandler END

        public void getSummaryVo(T0424Vo t0424Vo)
        {
            String    종목코드      = t0424Vo.expcode;
            Double    매도가능수량    = t0424Vo.mdposqt;
            String    에러코드      = t0424Vo.errorcd;
            SummaryVo summaryVo = mainForm.tradingHistory.getSummaryVo(종목코드);

            if (summaryVo == null)
            {
                t0424Vo.errorcd = "summaryVo is null";
            }
            else
            {
                String 최대수익율 = Util.nvl(summaryVo.maxRt, "0");
                String 최소수익율 = Util.nvl(summaryVo.minRt, "0");

                t0424Vo.sellCnt    = summaryVo.sellCnt;      //매도 횟수.
                t0424Vo.buyCnt     = summaryVo.buyCnt;       //매수 횟수
                t0424Vo.firstBuyDt = summaryVo.firstBuyDt;   //최초진입일시

                t0424Vo.sumMdposqt  = summaryVo.sumMdposqt;  //매도가능이력
                t0424Vo.ordermtd    = summaryVo.ordermtd;    //주문매체
                t0424Vo.exclWatchAt = summaryVo.exclWatchAt; //감시제외여부
                t0424Vo.searchNm    = summaryVo.searchNm;    //검색조건 이름
                t0424Vo.maxRt       = 최대수익율;                 //최대도달 수익율
                t0424Vo.minRt       = 최소수익율;                 //최소도달 수익율

                //매도가능수량이 같지 않으면 에러표시 해주자.

                //String c_mdposqt = this.grd_t0424.Rows[rowIndex].Cells["c_mdposqt"].Value.ToString();
                if (매도가능수량.ToString() != summaryVo.sumMdposqt)
                {
                    t0424Vo.errorcd = "mdposqt not equals";
                    //this.grd_t0424.Rows[rowIndex].DefaultCellStyle.BackColor = Color.Red;
                }
                else if (매도가능수량.ToString() == summaryVo.sumMdposqt)
                {
                    if (t0424Vo.errorcd.Equals("mdposqt not equals"))//기존 다른 에러코드가 존재하면 초기화 하지 않는다.
                    {
                        t0424Vo.errorcd = "";
                        //this.grd_t0424.Rows[rowIndex].DefaultCellStyle.BackColor = Color.White;
                    }
                }
                //확장정보 에러일경우 에러상태를 풀어준다.
                if (t0424Vo.errorcd != null && t0424Vo.errorcd.Equals("summaryVo is null"))//summaryVo is null
                {
                    t0424Vo.errorcd = "";
                    //this.grd_t0424.Rows[rowIndex].DefaultCellStyle.BackColor = Color.White;
                }
            }
        }
Ejemplo n.º 2
0
        }//stopProFitTarget end

        //매매이력 DB와 동기화
        public void t0424histoySync()
        {
            for (int i = 0; i < this.t0424VoList.Count(); i++)
            {
                //1.보유종목 이력 존재 여부확인
                SummaryVo summaryVo = mainForm.tradingHistory.getSummaryVo(this.t0424VoList.ElementAt(i).expcode.Replace("A", ""));
                if (summaryVo != null)
                {
                    //2.매도가능수량 같은지 확인
                    if (this.t0424VoList.ElementAt(i).mdposqt.ToString() != summaryVo.sumMdposqt)
                    {
                        //3.같지않으면 삭세후 새로 등록.
                        mainForm.tradingHistory.isunoDelete(this.t0424VoList.ElementAt(i).expcode); //종목일괄삭제.
                        this.t0424VoToHistoryInsert(this.t0424VoList.ElementAt(i), i.ToString());   //이력등록
                    }
                }
                else
                {
                    //이력정보가 없으면 이력정보를 등록해준다.
                    this.t0424VoToHistoryInsert(this.t0424VoList.ElementAt(i), i.ToString());//이력등록
                }//grd_t0424 for END
            }
        }//histoySync END
Ejemplo n.º 3
0
        public SummaryVo getSummaryVo(String Isuno)
        {
            SummaryVo summaryVo = new SummaryVo();

            //로그출력
            String 최초진입 = "";
            //double 매입금액 = 0;
            //double 총매수금액 = 0;
            //double 총매도금액 = 0;
            double 총매도체결수량 = 0;
            double 총매수체결수량 = 0;
            double 매도가능수량  = 0;
            //double 중간매도손익 = 0;
            int 매도횟수 = 0;
            int 매수횟수 = 0;

            var items = from item in this.tradingHistoryDt.AsEnumerable()
                        where item["accno"].ToString() == mainForm.account &&
                        item["Isuno"].ToString() == Isuno.Replace("A", "") &&
                        item["useYN"].ToString() == "Y"
                        select item;

            if (items.Count() <= 0)
            {
                return(null);
            }

            foreach (DataRow item in items)
            {
                if (item["ordptncode"].ToString() == "02" && item["useYN"].ToString() == "Y" && int.Parse(item["execqty"].ToString()) > 0) //매수그룹
                {                                                                                                                          //총매수금액 + 체결수량+체결가격
                 //    총매수금액 = 총매수금액 + (Double.Parse(item["execqty"].ToString()) * Double.Parse(item["execprc"].ToString()));
                 // //매도가능수량 = 매도가능수량 + Double.Parse(item.execqty);
                    총매수체결수량 = 총매수체결수량 + Double.Parse(item["execqty"].ToString());
                    매수횟수    = 매수횟수 + 1;
                    if (매수횟수 == 1)
                    {
                        최초진입 = item["dt"].ToString();
                    }
                }
                else if (item["ordptncode"].ToString() == "01" && item["useYN"].ToString() == "Y" && int.Parse(item["execqty"].ToString()) > 0)
                {//매도그룹
                 // //총매도금액 =총매도금액+ 체결수량 * 상위체결금액(현재오른값으로 계산하면 1줄일때 반만 매도됬을경우 계산 안맞는다.)
                 //    총매도금액 = 총매도금액 + (Double.Parse(item["execqty"].ToString()) * Double.Parse(item["upExecprc"].ToString()));

                    // //매도가능수량 = 매도가능수량 - Double.Parse(item.execqty);
                    총매도체결수량 = 총매도체결수량 + Double.Parse(item["execqty"].ToString());
                    매도횟수    = 매도횟수 + 1;
                    //    중간매도손익 = 중간매도손익 + ((Double.Parse(item["execqty"].ToString()) * Double.Parse(item["execprc"].ToString())) - (Double.Parse(item["execqty"].ToString()) * Double.Parse(item["upExecprc"].ToString())));
                }
            }
            //매입금액 = 총매수금액 - 총매도금액;
            매도가능수량 = 총매수체결수량 - 총매도체결수량;

            //double 평균단가 = (매입금액 / 매도가능수량);

            //summaryVo.pamt2 = 평균단가.ToString(); //평균단가
            summaryVo.buyCnt  = 매수횟수.ToString(); //매수횟수
            summaryVo.sellCnt = 매도횟수.ToString(); //매도횟수
            //summaryVo.sellSunik = 중간매도손익.ToString(); //중간매도손익

            summaryVo.firstBuyDt = 최초진입;
            summaryVo.sumMdposqt = 매도가능수량.ToString();

            if (items.First()["ordermtd"].ToString().Equals(""))
            {
                summaryVo.ordermtd = "XING API";
            }
            else
            {
                summaryVo.ordermtd = items.First()["ordermtd"].ToString();    //주문매체 - 감시제외 일때 사용
            }
            //summaryVo.ordermtd      = items.First()["ordermtd"      ].ToString();    //주문매체 - 감시제외 일때 사용
            //summaryVo.targClearPrc = items.First()["targClearPrc"].ToString(); //목표청산가격    - 감시제외 일때 사용
            //summaryVo.secEntPrc = items.First()["secEntPrc"].ToString(); //2차진입가격     - 감시제외 일때 사용 - 이값이 설정되어있지않으면 2차진입이 실행 되었거나 설정을 안한 케이스.
            //summaryVo.secEntAmt = items.First()["secEntAmt"].ToString(); //2차진입비중가격 - 감시제외 일때 사용
            //summaryVo.stopPrc = items.First()["stopPrc"].ToString(); //손절가격 - 감시제외 일때 사용
            summaryVo.exclWatchAt = items.First()["exclWatchAt"].ToString(); //감시제외여부
            summaryVo.searchNm    = items.First()["searchNm"].ToString();    //검색조건 이름
            summaryVo.maxRt       = items.First()["maxHisRt"].ToString();    //최대도달 수익율
            summaryVo.minRt       = items.First()["minHisRt"].ToString();    //최소도달 수익율
            return(summaryVo);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 데이터 응답 처리
        /// </summary>
        /// <param name="szTrCode">조회코드</param>
        void receiveDataEventHandler(string szTrCode)
        {
            //4.주문처리유형코드,ordtrxptncode,
            // 0    정상
            //6    정정확인
            //7    정정거부(채권)
            //8    취소확인
            //9    취소거부(채권)

            realSc1Vo.ordno         = base.GetFieldData("OutBlock", "ordno");      //주문번호
            realSc1Vo.ordptncode    = base.GetFieldData("OutBlock", "ordptncode"); //주문구분 01:매도|02:매수
            realSc1Vo.ordtrxptncode = base.GetFieldData("OutBlock", "ordptncode"); // 0:정상|6:정정확인 |7:정정거부(채권) |8:취소확인 |9:취소거부(채권)
            realSc1Vo.Isuno         = base.GetFieldData("OutBlock", "shtnIsuno");  //종목코드
            realSc1Vo.Isunm         = base.GetFieldData("OutBlock", "Isunm");      //종목명
            realSc1Vo.ordqty        = base.GetFieldData("OutBlock", "ordqty");     //ordqty//주문수량
            realSc1Vo.ordprc        = base.GetFieldData("OutBlock", "ordprc");     //ordprc//주문가격
            realSc1Vo.execqty       = base.GetFieldData("OutBlock", "execqty");    //execqty//체결수량
            realSc1Vo.execprc       = base.GetFieldData("OutBlock", "execprc");    //execprc//체결가격
            realSc1Vo.avrpchsprc    = base.GetFieldData("OutBlock", "avrpchsprc"); //평균매입가 -실서버에서 제공하지 않는필드
            realSc1Vo.pchsant       = base.GetFieldData("OutBlock", "pchsant");    //매입금액  -실서버에서 제공하지 않는필드
            realSc1Vo.accno         = base.GetFieldData("OutBlock", "accno");      //계좌번호

            //1.주문체결유형코드,ordxctptncode
            // 01                   주문
            //02                   정정
            //03                   취소
            //11                   체결
            //12                   정정확인
            //13                   취소확인
            //14                   거부

            mainForm.log("Real:" + realSc1Vo.Isunm + ">" + realSc1Vo.execqty + "주 체결<ordtrxptncode:" + realSc1Vo.ordtrxptncode + ">");

            //int tmpindex = mainForm.tradingHistory.getTradingHistoryVoList().Find("ordno", realSc1Vo.ordno);
            var items = from item in mainForm.tradingHistory.getTradingHistoryDt().AsEnumerable()
                        where item["ordno"].ToString() == realSc1Vo.ordno &&
                        item["Isuno"].ToString() == realSc1Vo.Isuno.Replace("A", "") &&
                        item["accno"].ToString() == mainForm.account
                        //&& item["useYN"].ToString() == "Y"
                        select item;

            //매매이력이없으면 등록해줘야한다.
            if (items.Count() > 0)
            {
                //기존체결수량+체결수량
                items.First()["execqty"] = (int.Parse(items.First()["execqty"].ToString()) + int.Parse(realSc1Vo.execqty)).ToString();
                items.First()["execprc"] = realSc1Vo.execprc.Replace(",", "");//체결가격
                //items.First()["Isunm"] = realSc1Vo.Isunm;
                //dataLogVo.sellOrdAt = "Y";
                //item.Isunm = realSc1Vo.Isunm;//하루확인후 필요하면 주석풀자.
                mainForm.tradingHistory.execqtyUpdate(items.First());//매도주문 여부 상태 업데이트
            }
            else
            {
                //데이타로그에 저장
                //public class dataLogVo
                TradingHistoryVo dataLogVo = new TradingHistoryVo();
                dataLogVo.ordno        = realSc1Vo.ordno;                  //주문번호
                dataLogVo.accno        = mainForm.account;                 //계좌번호
                dataLogVo.ordptncode   = realSc1Vo.ordptncode;             //주문구분 01:매도|02:매수
                dataLogVo.Isuno        = realSc1Vo.Isuno.Replace("A", ""); //종목코드
                dataLogVo.ordqty       = realSc1Vo.ordqty;                 //주문수량
                dataLogVo.execqty      = realSc1Vo.execqty;                //체결수량
                dataLogVo.ordprc       = realSc1Vo.ordprc;                 //주문가격
                dataLogVo.execprc      = realSc1Vo.execprc;                //체결가격
                dataLogVo.Isunm        = realSc1Vo.Isunm;                  //종목명
                dataLogVo.ordptnDetail = "수동매수";                           //상세 주문구분 신규매수|반복매수|금일매도|청산
                dataLogVo.upExecprc    = "0";                              //상위체결가격
                dataLogVo.sellOrdAt    = "N";                              //매도주문 여부 YN default:N     -02:매 일때만 값이 있어야한다.
                dataLogVo.useYN        = "Y";                              //사용여부
                dataLogVo.ordermtd     = "HTS";                            //주문 매체
                dataLogVo.upOrdno      = realSc1Vo.ordno;                  //상위 주문번호
                dataLogVo.exclWatchAt  = "Y";                              //감시제외여부 : 자동매수가 아닌것은 기본으로 감시제외시킨다.

                //주문정보를 주문이력 DB에 저장 - dataInsert호출
                mainForm.tradingHistory.insert(dataLogVo);
                ////mainForm.tradingHistory.getTradingHistoryVoList().Add(dataLogVo);
            }

            //실시간 매도가능수량 업데이트(3초마다업데이트되어서 안해줘도되는데...) ->매도가 이루어지면 실시간으로 매도가능수량을 적용해주자.
            EBindingList <T0424Vo> t0424VoList = mainForm.xing_t0424.getT0424VoList();
            int    findIndex = t0424VoList.Find("expcode", realSc1Vo.Isuno.Replace("A", ""));
            Double 매도가능수     = 0;

            if (findIndex >= 0)
            {
                //mainForm.grd_t0424.Rows[findIndex].Cells["c_mdposqt"].Style.BackColor = Color.Gray;
                //매도 - 매도가능수량-체결수량
                if (realSc1Vo.ordptncode == "01")
                {
                    매도가능수 = t0424VoList.ElementAt(findIndex).mdposqt - int.Parse(realSc1Vo.execqty);
                }
                else if (realSc1Vo.ordptncode == "02")    //매수 - 매도가능수량+체결수량
                {
                    매도가능수 = t0424VoList.ElementAt(findIndex).mdposqt + int.Parse(realSc1Vo.execqty);
                }
                mainForm.grd_t0424.Rows[findIndex].Cells["c_mdposqt"].Value = 매도가능수.ToString();


                //매도가능수량이 0보다 작으면 잔고그리드와 dataLog에서 제거해주자.
                if (매도가능수 <= 0)
                {
                    //2.청산된 종목 사용여부를 db 'N'으로 업데이트한다.
                    if (items.Count() > 0)
                    {
                        items.First()["useYN"] = "N";
                        mainForm.tradingHistory.useYnUpdate(items.First());//종목 일괄적용.
                    }

                    //3.그리드에서 해당 로우 삭제
                    //this.grd_t0424.Rows.Remove(this.grd_t0424.Rows[findIndex]);//그리드에서 삭제하면 바인딩객체도 같이 삭제 되는지 잘모르겠어서 그냥 바인딩객체를 삭제로 바꿔준다.
                    mainForm.xing_t0424.getT0424VoList().RemoveAt(findIndex);

                    Log.WriteLine("real_SC1 deleteCallBack :: 청산된 종목 그리드와 DataLog Line 제거.[종목코드:" + realSc1Vo.Isuno + "]");
                }
                else
                {
                    //수정된 평균단가를 실시간 적용해준다.
                    SummaryVo summaryVo = mainForm.tradingHistory.getSummaryVo(realSc1Vo.Isuno.Replace("A", ""));
                    //Log.WriteLine("TEST Real Sc1 historyvo :[종목코드: " + realSc1Vo.Isuno + "]");
                    if (summaryVo != null)
                    {
                        //mainForm.grd_t0424.Rows[findIndex].Cells["pamt2"].Value = summaryVo.pamt2;//평균단가
                        mainForm.grd_t0424.Rows[findIndex].Cells["sellCnt"].Value = summaryVo.sellCnt; //매도횟수
                        mainForm.grd_t0424.Rows[findIndex].Cells["buyCnt"].Value  = summaryVo.buyCnt;  //매수회수
                        //mainForm.grd_t0424.Rows[findIndex].Cells["sellSunik"].Value = summaryVo.sellSunik;//중간매도손익
                        //여기서는 평균단가만 적용해주자...실시간 현재가 이벤트 발생시에만 수익률을 계산하여 매매를 하자.
                        //평균단가 구한후 평균단가를 기준으로 수익율을 구한다.
                    }
                }
            }
            else  //실시간 체결정보인데 종목그리드에 존재하지 않는 종목일경우 t0424 를 호출해준다.--신규매수일수잇다.
            //mainForm.xing_t0424.call_request(mainForm.accountForm.account, mainForm.accountForm.accountPw);
            {
            }
        }