Пример #1
0
        }//grd_t0424_CellValueChanged END

        public void tradingInfoUpdate()
        {
            //MessageBox.Show(grd_t0424.Rows[e.RowIndex].Cells["price"].Value.ToString());
            //현재 가격이 변경되면
            EBindingList <T0424Vo> t0424VoList = this.xing_t0424.getT0424VoList();

            Double 예수금    = Double.Parse(xing_CSPAQ12200.Dps);
            Double 예수금D2  = Double.Parse(xing_CSPAQ12200.D2Dps);
            Double 실현손익   = xing_t0424.dtsunik;
            Double 종목수    = t0424VoList.Count();
            Double 매입금액   = t0424VoList.Select(item => item.mamt).Sum();
            Double 평가금액   = t0424VoList.Select(item => item.appamt).Sum();
            Double 평가손익   = 평가금액 - 매입금액;
            Double 수익률    = this.xing_t0424.getSunikrt(평가금액, 매입금액);
            Double 예탁자산총액 = 평가금액 + 예수금D2;

            Double 누적수익 = this.chartData.getSumDtsunik() + 실현손익;
            Double 투자율  = Util.getInputRate(매입금액, 예수금D2);

            DataRow tmpRow = tradingInfoDt.Rows[0];

            //tradingInfoDt.Columns.Add("날자", typeof(string));
            tmpRow["예수금"]     = 예수금;
            tmpRow["예수금(D2)"] = 예수금D2;
            tmpRow["예탁자산총액"]  = 예탁자산총액;
            tmpRow["매입금액"]    = 매입금액;
            tmpRow["평가금액"]    = 평가금액;
            tmpRow["수익률"]     = 수익률;
            tmpRow["평가손익"]    = 평가손익;
            tmpRow["실현손익"]    = 실현손익;
            tmpRow["투자율"]     = 투자율;
            tmpRow["누적수익"]    = 누적수익;
        }
Пример #2
0
        }//btn_exclWatch_Click END

        //감시제외 대상을 감시대상으로
        private void btn_exclWatchRollback_Click(object sender, EventArgs e)
        {
            EBindingList <T0424Vo> t0424VoList = this.xing_t0424.getT0424VoList();

            String expcode; //종목코드
            int    findIndex;

            for (int i = 0; i < this.grd_t0424Excl.RowCount; i++)
            {
                if (this.grd_t0424Excl.Rows[i].Cells["grd_t0424_excl_check"].FormattedValue.ToString() == "True")
                {
                    expcode = this.grd_t0424Excl.Rows[i].Cells["e_expcode"].Value.ToString(); //종목코드

                    //감시제외 상태 업데이트.
                    TradingHistoryVo tradingHistoryVo = new TradingHistoryVo();
                    tradingHistoryVo.accno       = this.account;
                    tradingHistoryVo.Isuno       = expcode;
                    tradingHistoryVo.exclWatchAt = "N";

                    //감시여부 상태 업데이트 호출
                    this.tradingHistory.watchUpdate(tradingHistoryVo);

                    //0424그리드값을 미리 N으로 업데이트해줘야 바로 제외그리드에서 삭제가 된다.
                    findIndex = t0424VoList.Find("expcode", expcode);
                    this.grd_t0424.Rows[findIndex].Cells["c_exclWatchAt"].Value = 'N';
                }
            }
            this.tradingHistory.dbSync();

            //2.감시제외종목 그리드 동기화
            xing_t0424.exclWatchSync();
        }
Пример #3
0
        // 생성자
        public Xing_t0425()
        {
            base.ResFileName = "₩res₩t0425.res";


            base.ReceiveData    += new _IXAQueryEvents_ReceiveDataEventHandler(receiveDataEventHandler);
            base.ReceiveMessage += new _IXAQueryEvents_ReceiveMessageEventHandler(receiveMessageEventHandler);

            this.t0425VoList = new EBindingList <T0425Vo>();
        }   // end function
Пример #4
0
        //그리드 현재가 변경 이벤트
        private void grd_t0424_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            try {
                if (this.xing_t0424 != null)
                {
                    //if (!this.xing_t0424.initAt)
                    //{
                    if (e.RowIndex >= 0)
                    {
                        //MessageBox.Show(e.ColumnIndex.ToString());
                        int priceIndex = grd_t0424.Rows[e.RowIndex].Cells["price"].ColumnIndex;
                        if (e.ColumnIndex == priceIndex)
                        {
                            //MessageBox.Show(grd_t0424.Rows[e.RowIndex].Cells["price"].Value.ToString());
                            //현재 가격이 변경되면
                            EBindingList <T0424Vo> t0424VoList = this.xing_t0424.getT0424VoList();
                            String 종목명  = t0424VoList.ElementAt(e.RowIndex).hname;
                            Double 현재가  = t0424VoList.ElementAt(e.RowIndex).price;
                            Double 평균단가 = t0424VoList.ElementAt(e.RowIndex).pamt;
                            Double 매도가능 = t0424VoList.ElementAt(e.RowIndex).mdposqt;
                            Double 매입금액 = t0424VoList.ElementAt(e.RowIndex).mamt;

                            Double 평가금액 = 현재가 * 매도가능;
                            Double 평가손익 = 평가금액 - 매입금액;
                            Double 수익율  = this.xing_t0424.getSunikrt(평가금액, 매입금액);
                            String 종목코드 = this.grd_t0424.Rows[e.RowIndex].Cells["c_expcode"].Value.ToString();
                            if (종목명 == "피엔티")
                            {
                                String tessst = "3";
                            }

                            //현재가 * 매도가능 = 평가금액     현재가, 평균단가 = 수익율   매입금액 - 평가금액 = 손익금
                            this.grd_t0424.Rows[e.RowIndex].Cells["appamt"].Value    = 평가금액;
                            this.grd_t0424.Rows[e.RowIndex].Cells["c_sunikrt"].Value = 수익율;
                            this.grd_t0424.Rows[e.RowIndex].Cells["dtsunik"].Value   = 평가손익;

                            //트레이딩 정보 업데이트
                            this.tradingInfoUpdate();

                            //매매 프로세스 호출 --그리드색 지정 및 확정 요약정보 호출
                            priceChangedProcess(e.RowIndex);
                        }

                        //}
                    }
                }
            }
            catch (Exception ex)
            {
                this.log("t0424 : " + ex.Message);
                this.log("t0424 : " + ex.StackTrace);
            }
        }//grd_t0424_CellValueChanged END
Пример #5
0
 // 생성자
 public CSPAT00600Mng(MainForm mainForm)
 {
     this.mainForm            = mainForm;
     this.xing_CSPAT00600List = new EBindingList <Xing_CSPAT00600>();
     this.xing_CSPAT00800List = new EBindingList <Xing_CSPAT00800>();
     this.xing_CSPAT00700List = new EBindingList <Xing_CSPAT00700>();
     for (int i = 0; i < 10; i++)
     {
         this.xing_CSPAT00600List.Add(new Xing_CSPAT00600(mainForm));
         this.xing_CSPAT00800List.Add(new Xing_CSPAT00800(mainForm));
         this.xing_CSPAT00700List.Add(new Xing_CSPAT00700(mainForm));
     }
 }// end function
Пример #6
0
        // 생성자
        public Xing_t0424()
        {
            base.ResFileName = "₩res₩t0424.res";

            //base.Request(false); //연속조회가 아닐경우 false

            base.ReceiveData    += new _IXAQueryEvents_ReceiveDataEventHandler(receiveDataEventHandler);
            base.ReceiveMessage += new _IXAQueryEvents_ReceiveMessageEventHandler(receiveMessageEventHandler);

            t0424VoList = new EBindingList <T0424Vo>();

            //감시제외 대상 목록
            excludeT0424VoList = new EBindingList <ExcludeT0424Vo>();
        }   // end function
Пример #7
0
        public void dbSync()
        {
            //this.historyDataTable = list();
            if (chartVoList == null)
            {
                this.chartVoList = new EBindingList <ChartVo>();
            }

            this.dataTable = list();
            this.chartVoList.Clear();
            foreach (DataRow dr in dataTable.Rows)
            {
                ChartVo chartVo = new ChartVo();
                chartVo.date            = dr["date"].ToString();                          //날자
                chartVo.d2Dps           = Double.Parse(dr["d2Dps"].ToString());           //예수금(D2)
                chartVo.dpsastTotamt    = Double.Parse(dr["dpsastTotamt"].ToString());    //예탁자산총액
                chartVo.mamt            = Double.Parse(dr["mamt"].ToString());            //매입금액
                chartVo.balEvalAmt      = Double.Parse(dr["balEvalAmt"].ToString());      //매입평가금액
                chartVo.pnlRat          = Double.Parse(dr["pnlRat"].ToString());          //손익율
                chartVo.tdtsunik        = Double.Parse(dr["tdtsunik"].ToString());        //평가손익
                chartVo.dtsunik         = Double.Parse(dr["dtsunik"].ToString());         //실현손익
                chartVo.battingAtm      = Double.Parse(dr["battingAtm"].ToString());      //배팅금액
                chartVo.toDaysunik      = Double.Parse(dr["toDaysunik"].ToString());      //당일매도 실현손익
                chartVo.dtsunik2        = Double.Parse(dr["dtsunik2"].ToString());        //실현손익2
                chartVo.investmentRatio = Double.Parse(dr["investmentRatio"].ToString()); //투자율
                chartVo.itemTotalCnt    = Double.Parse(dr["itemTotalCnt"].ToString());    //계좌잔고(매수종목수)
                chartVo.buyFilterCnt    = Double.Parse(dr["buyFilterCnt"].ToString());    //매수금지종목수
                chartVo.buyCnt          = Double.Parse(dr["buyCnt"].ToString());          //매수횟수
                chartVo.sellCnt         = Double.Parse(dr["sellCnt"].ToString());         //매도횟수

                this.chartVoList.Add(chartVo);
            }

            //누적 실현손익 구한다.
            this.sumDtsunik = dataTable.AsEnumerable().Select(row => double.Parse(row["dtsunik"].ToString())).Sum();
        }
Пример #8
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);
            {
            }
        }
Пример #9
0
        }   // end function

        /// <summary>
        /// 주식 체결/미체결(T0425) 데이터 응답 처리
        /// </summary>
        /// <param name="szTrCode">조회코드</param>
        void receiveDataEventHandler(string szTrCode)
        {
            try
            {
                //응답 데이타 수
                int blockCount = base.GetBlockCount("t0425OutBlock1");
                if (blockCount == 0)
                {
                    this.t0425VoList.Clear();
                }

                //계좌잔고목록
                EBindingList <T0424Vo> t0424VoList = mainForm.xing_t0424.getT0424VoList();

                String ordno;  //주문번호
                String status; //상태 체결|미체결
                String qty;    //주문수량
                String cheqty; //체결수량


                int findIndex;

                T0425Vo tmpT0425Vo;
                String  medosu;//매매구분
                var     blockData = base.GetBlockData("t0425OutBlock1");
                for (int i = 0; i < blockCount; i++)
                {
                    ordno  = base.GetFieldData("t0425OutBlock1", "ordno", i);  //주문번호
                    status = base.GetFieldData("t0425OutBlock1", "status", i); //상태
                    qty    = base.GetFieldData("t0425OutBlock1", "qty", i);    //주문수량
                    cheqty = base.GetFieldData("t0425OutBlock1", "cheqty", i); //체결수량
                    medosu = base.GetFieldData("t0425OutBlock1", "medosu", i); //매매구분 - 0:전체|1:매수|2:매도
                    if (medosu.IndexOf("취소") >= 0)
                    {                                                          //취소주문건은 그리드에 출력하지 않는다.
                        continue;
                    }
                    findIndex = this.t0425VoList.Find("ordno", ordno);


                    if (findIndex < 0)
                    {
                        tmpT0425Vo = new T0425Vo();
                        this.t0425VoList.Add(tmpT0425Vo);
                        findIndex = this.t0425VoList.Count() - 1;
                    }
                    String ordtime = base.GetFieldData("t0425OutBlock1", "ordtime", i);
                    ordtime = ordtime.Substring(0, 2) + ":" + ordtime.Substring(2, 2) + ":" + ordtime.Substring(4, 2);
                    //mainForm.grd_t0425.Rows[findIndex].Cells["ordtime"      ].Value = base.GetFieldData(             "t0425OutBlock1", "ordtime"    , i);  //주문시간
                    mainForm.grd_t0425.Rows[findIndex].Cells["ordtime"].Value = ordtime;                                                              //주문시간
                    mainForm.grd_t0425.Rows[findIndex].Cells["medosu"].Value  = base.GetFieldData("t0425OutBlock1", "medosu", i);                     //매매구분 - 0:전체|1:매수|2:매도
                    mainForm.grd_t0425.Rows[findIndex].Cells["expcode"].Value = base.GetFieldData("t0425OutBlock1", "expcode", i);                    //종목번호
                    //mainForm.grd_t0425.Rows[findIndex].Cells["t0425_hname"].Value       = "";                                                            //종목명
                    mainForm.grd_t0425.Rows[findIndex].Cells["qty"].Value         = Double.Parse(base.GetFieldData("t0425OutBlock1", "qty", i));      //주문수량
                    mainForm.grd_t0425.Rows[findIndex].Cells["t0425_price"].Value = Double.Parse(base.GetFieldData("t0425OutBlock1", "price", i));    //주문가격
                    mainForm.grd_t0425.Rows[findIndex].Cells["cheqty"].Value      = Double.Parse(base.GetFieldData("t0425OutBlock1", "cheqty", i));   //체결수량
                    mainForm.grd_t0425.Rows[findIndex].Cells["cheprice"].Value    = Double.Parse(base.GetFieldData("t0425OutBlock1", "cheprice", i)); //체결가격
                    mainForm.grd_t0425.Rows[findIndex].Cells["ordrem"].Value      = Double.Parse(base.GetFieldData("t0425OutBlock1", "ordrem", i));   //미체결잔량
                    mainForm.grd_t0425.Rows[findIndex].Cells["status"].Value      = base.GetFieldData("t0425OutBlock1", "status", i);                 //상태
                    mainForm.grd_t0425.Rows[findIndex].Cells["ordno"].Value       = base.GetFieldData("t0425OutBlock1", "ordno", i);                  //주문번호
                    mainForm.grd_t0425.Rows[findIndex].Cells["ordermtd"].Value    = base.GetFieldData("t0425OutBlock1", "ordermtd", i);               //주문매체

                    //확장 정보및 싱크
                    this.t0425Sync(findIndex);
                }//for end

                String cts_ordno = base.GetFieldData("t0425OutBlock", "cts_ordno", 0);//연속키
                //2.연속 데이타 정보가 남아있는지 구분
                //if (base.IsNext)
                if (cts_ordno != "")
                {
                    //연속 데이타 정보를 호출.
                    base.SetFieldData("t0425InBlock", "cts_ordno", 0, cts_ordno); //처음 조회시는 SPACE
                    base.Request(true);                                           //연속조회일경우 true
                    //mainForm.input_t0424_log.Text = "[연속조회]잔고조회를 요청을 하였습니다.";
                }
                else  //마지막 데이타일때 메인폼에 출력해준다.

                //매수체결 목록
                {
                    mainForm.grd_t0425_chegb1_cnt.Text = this.t0425VoList.Count().ToString();
                    //Thread.Sleep(5000);
                    //mainForm.setRowNumber(mainForm.grd_t0425_chegb1);
                    mainForm.input_t0425_log.Text = "<" + DateTime.Now.TimeOfDay.ToString().Substring(0, 8) + "><t0425:채결/미채결 요청완료>";

                    //초기화 여부
                    if (initAt)
                    {
                        this.initAt = false;

                        foreach (T0425Vo t0425Vo in t0425VoList)
                        {
                            //실시간 현재가 종목  등록
                            //코스피
                            mainForm.real_S3.call_real(t0425Vo.expcode);
                            mainForm.real_K3.call_real(t0425Vo.expcode);
                        }
                    }
                    else
                    {
                        //2.주문취소
                        this.orderCancle();
                    }
                }
                completeAt = true;
            }
            catch (Exception ex) {
                Log.WriteLine("t0425 : " + ex.Message);
                Log.WriteLine("t0425 : " + ex.StackTrace);
            }
        }//receiveData end
Пример #10
0
        //매수 테스트
        private Boolean executeTest(DataRow itemRow, int configSearchCode, TimeSpan nowTimeSpan, int rowIndex, Boolean kosBuyAt, Boolean kodBuyAt)
        {
            try
            {
                String shcode     = itemRow["종목코드"].ToString(); //종목코드
                String hname      = itemRow["종목명"].ToString();  //종목명
                String close      = itemRow["현재가"].ToString();  //현재가
                String searchNm   = itemRow["검색조건"].ToString(); //검색조건
                String searchCode = itemRow["검색코드"].ToString(); //검색코드
                String gubun      = itemRow["시장구분"].ToString(); //시장구분(1:코스피 2:코드닥)


                //시장구분 코스피
                if (gubun.Equals("1"))
                {
                    //코스피 체크
                    if (!kosBuyAt)
                    {
                        itemRow["상태"] = "코스피x";
                        return(false);
                    }
                }
                else if (gubun.Equals("2"))
                {
                    //코스닥 체크
                    if (!kodBuyAt)
                    {
                        itemRow["상태"] = "코스닥x";
                        return(false);
                    }
                }
                else
                {
                    itemRow["상태"] = "시장구분x";
                    return(false);
                }
                //검색코드 설정값 비교
                if (int.Parse(searchCode) < configSearchCode)
                {
                    itemRow["상태"] = "조건식매수 금지 ";
                    return(false);
                }

                //배팅금액 설정
                //int battingAtm = int.Parse(Properties.Settings.Default.BUY_BATTING_AMT) * 10000;

                //매수금지목록
                if (Properties.Settings.Default.STOP_STOP_BUYOFF_AT)
                {
                    DataTable stopSearchListDt = mainForm.xing_t1857Stop.getSearchListDt();
                    DataRow[] SellListDtRow    = null;
                    SellListDtRow = stopSearchListDt.Select("종목코드 Like '" + shcode + "'");
                    if (SellListDtRow.Count() > 0)
                    {
                        //mainForm.grd_t0424.Rows[t0424VoListFindIndex].Cells["c_expcode"].Style.BackColor = Color.Red;
                        mainForm.grd_t1833_dt.Rows[rowIndex].Cells["종목명"].Style.BackColor = Color.Red;
                        itemRow["상태"] = "매수제외";
                        return(false);
                    }
                }



                String ordptnDetail; //매수 상세 구분을 해준다. 신규매수|반복매수
                                     //금일 매수 체결 내용이 있고 미체결 잔량이 0인 건은 매수 하지 않는다.
                var toDayBuyT0425VoList = from item in mainForm.xing_t0425.getT0425VoList()
                                          where item.expcode == shcode && item.medosu == "매수"
                                          select item;
                if (toDayBuyT0425VoList.Count() > 0)
                {
                    itemRow["상태"] = "금일매수종목X";
                    return(false);
                }

                var toDaySellT0425VoList = from item in mainForm.xing_t0425.getT0425VoList()
                                           where item.expcode == shcode && item.medosu == "매도"
                                           select item;

                if (toDaySellT0425VoList.Count() > 0)
                {
                    if (!Properties.Settings.Default.SELL_TO_RE_BUY_AT)
                    {
                        itemRow["상태"] = "금일매도종목X";
                        return(false);
                    }
                }

                //5.보유종목 반복매수여부 테스트 -두번째 컨디션일 경우 보유종목일경우에만 중복 매수한다.
                int t0424VoListFindIndex = mainForm.xing_t0424.getT0424VoList().Find("expcode", shcode);//보유종목인지 체크

                if (t0424VoListFindIndex >= 0)
                {
                    //검색종목 추가매수 여부 옵션 체크
                    if (!Properties.Settings.Default.ADD_BUY_SIGNAL_AT)
                    {
                        itemRow["상태"] = "신호추가매수X";
                        return(false);
                    }

                    //기존 종목 수익률
                    EBindingList <T0424Vo> t0424VoList = mainForm.xing_t0424.getT0424VoList();
                    Double sunikrt = t0424VoList.ElementAt(t0424VoListFindIndex).sunikrt;

                    //추가매수 하락율 체크
                    if (sunikrt > double.Parse(Properties.Settings.Default.ADD_BUY_SIGNAL_RATE))
                    {
                        itemRow["상태"] = "하락율 미달x";
                        return(false);
                    }

                    ordptnDetail = "신호추가매수";
                    ////배팅금액 설정
                    //battingAtm = int.Parse(Properties.Settings.Default.ADD_BUY_AMT) * 10000;
                    //1.반복매수면 투자율 제한 하지 않는다.
                    //2.반복매수면 매수금지 종목이라도 매수한다.
                }
                else    //-보유종목이 아니고 신규매수해야 한다면.

                //자본금대비 투자 비율이 높으면 신규매수 하지 않는다.
                {
                    Double 투자율 = Double.Parse(mainForm.tradingInfoDt.Rows[0]["투자율"].ToString());
                    if (투자율 >= Double.Parse(Properties.Settings.Default.BASE_MONEY_BUY_RATE))
                    {
                        itemRow["상태"] = "투자율제한 매수X";
                        return(false);
                    }
                    ordptnDetail = "신규매수";
                }

                //추가 매수일수 있기때문에 추가매수 체크위에 위치하자
                if (ordptnDetail == "신규매수")
                {
                    String 종목제한수 = Properties.Settings.Default.MAX_BUY_COUNT;
                    int    보유종목수 = mainForm.grd_t0424.RowCount;
                    if (보유종목수 >= int.Parse(종목제한수))
                    {
                        //mainForm.grd_t0424.Rows[t0424VoListFindIndex].Cells["c_expcode"].Style.BackColor = Color.Red;
                        //mainForm.grd_t1833_dt.Rows[rowIndex].Cells["종목명"].Style.BackColor = Color.Red;
                        itemRow["상태"] = "종목수초과";
                        return(false);
                    }
                }



                //매수 가능 시간 비교
                if (!Util.isBuyTime())
                {
                    itemRow["상태"] = "시간x<" + ordptnDetail + ">";
                    return(false);
                }

                //4.매수
                //임시로 넣어둔다 왜 현제가가 0으로 넘어오는지 모르겠다.
                if (close == "0")
                {
                    itemRow["상태"] = "오류:246";
                    return(false);
                }

                //this 함수가 3번 호출 된다. 주문이 3번 나갈 수가 있어서 추가 해준다.
                if (itemRow["상태"].ToString().IndexOf("주문전송") >= 0)
                {
                    return(false);
                }

                if (!mainForm.cbx_buy_at.Checked)
                {
                    itemRow["상태"] = "매수정지 상태";
                    return(false);
                }

                /// <summary>
                /// 현물정상주문
                /// </summary>
                /// <param name="ordptnDetail">상세주문구분 신규매수|반복매수|금일매도|청산</param>
                /// <param name="IsuNo">종목번호</param>
                /// <param name="Quantity">수량</param>
                /// <param name="Price">가격</param>


                //실시간 가격 모니터링 등록
                mainForm.real_S3.call_real(shcode);
                mainForm.real_K3.call_real(shcode);
                //매수 실행
                Xing_CSPAT00600 xing_CSPAT00600 = mainForm.CSPAT00600Mng.get600();
                xing_CSPAT00600.call_request(hname, shcode, "매수", 0, Double.Parse(close), searchNm, 0, ordptnDetail);

                //로그출력
                itemRow["상태"] = "주문전송<" + ordptnDetail + ">";
                mainForm.log("<t1857Buy:" + searchNm + "><" + hname + "> <" + close + "원>" + ordptnDetail);
            }
            catch (Exception ex)
            {
                Log.WriteLine("t1857Buy: " + ex.Message);
                Log.WriteLine("t1857Buy: " + ex.StackTrace);
            }
            return(true);
        }//buyTest END