}//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["누적수익"] = 누적수익; }
}//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(); }
// 생성자 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
//그리드 현재가 변경 이벤트 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
// 생성자 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
// 생성자 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
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(); }
/// <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); { } }
} // 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
//매수 테스트 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