//수동주문 진입청산 값 수정 public int clearUpdate(TradingHistoryVo dataLogVo) { int result = 0; using (var conn = new SQLiteConnection(connStr)) { conn.Open(); StringBuilder sb = new StringBuilder(); sb.Append("UPDATE trading SET targClearPrc = '" + dataLogVo.targClearPrc + "' "); //목표청산가격 sb.Append(" ,secEntPrc = '" + dataLogVo.secEntPrc + "' "); //2차진입가격 - 이값이 설정되어있지않으면 2차진입이 실행 되었거나 설정을 안한 케이스. sb.Append(" ,secEntAmt = '" + dataLogVo.secEntAmt + "' "); //2차진입비중금액 sb.Append(" ,stopPrc = '" + dataLogVo.stopPrc + "' "); //손절 가격 sb.Append("WHERE accno = '" + mainForm.account + "' "); //계좌번호 sb.Append("AND Isuno = '" + dataLogVo.Isuno + "' "); //종목코드 SQLiteCommand sqlCmd = new SQLiteCommand(sb.ToString(), conn); result = sqlCmd.ExecuteNonQuery(); sqlCmd.Dispose(); conn.Close(); conn.Dispose(); } return(result); }
}//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 DataTable read(TradingHistoryVo dataLogVo) { DataTable dt = new DataTable(); //string connStr = @"Data Source=C:\Temp\mydb.db"; //SQLiteDataAdapter 클래스를 이용 비연결 모드로 데이타 읽기기 //string sql = "SELECT * FROM member"; //쿼리정의 StringBuilder sb = new StringBuilder(); sb.Append("SELECT ordno "); sb.Append(" ,dt "); //일시 sb.Append(" ,accno "); //계좌번호 sb.Append(" ,Isuno "); //종목코드 sb.Append(" ,Isunm "); //종목명 sb.Append(" ,ordptncode "); //주문구분 01:매도|02:매수 sb.Append(" ,ordqty "); //주문수량 sb.Append(" ,execqty "); //체결수량 sb.Append(" ,ordprc "); //주문가격 sb.Append(" ,execprc "); //체결가격 sb.Append(" ,ordptnDetail "); //상세 주문구분 신규매수|반복매수|금일매도|청산| sb.Append(" ,upOrdno "); //상위 매수 주문번호 -값이없으면 자신의 주문번호로 넣는다. sb.Append(" ,upExecprc "); //상위체결금액 sb.Append(" ,sellOrdAt "); //매도주문 여부 YN default:N 금일매도일때 의미있다. sb.Append(" ,cancelOrdAt "); //매도주문 여부 sb.Append(" ,useYN "); //사용여부 sb.Append(" ,ordermtd "); //주문매체 sb.Append(" ,targClearPrc "); //목표청산가격 sb.Append(" ,secEntPrc "); //2차진입가격 - 이값이 설정되어있지않으면 2차진입이 실행 되었거나 설정을 안한 케이스. sb.Append(" ,secEntAmt "); //2차진입비중금액 sb.Append(" ,stopPrc "); //손절 sb.Append(" ,exclWatchAt "); //감시제외여부 sb.Append(" ,searchNm "); //검색조건 이름 sb.Append(" ,maxHisRt "); //최대도달 수익율 sb.Append(" ,minHisRt "); //최소도달 수익율 sb.Append("FROM trading "); //사용여부 sb.Append("WHERE ordno = '" + dataLogVo.ordno + "' "); //주문번호 sb.Append("AND Isuno = '" + dataLogVo.Isuno + "' "); //종목코드 sb.Append("AND accno = '" + dataLogVo.accno + "' "); //계좌번호 var adpt = new SQLiteDataAdapter(sb.ToString(), connStr); adpt.Fill(dt); return(dt); }
//감시제외. private void btn_exclWatch_Click(object sender, EventArgs e) { String expcode; //종목코드 String hname; //종목명 String orderAt; //매도주문여부 //EBindingList<T0424Vo> t0424VoList = ((EBindingList<T0424Vo>)this.grd_t0424.DataSource); for (int i = 0; i < grd_t0424.RowCount; i++) { if (this.grd_t0424.Rows[i].Cells["grd_t0424_check"].FormattedValue.ToString() == "True") { //{ //선택된 종목이 이미 매도주문이 나간 상태인지 체크하는 부분이 없다.(청산 관련 매도주문에는 DataLog 를 참조하지 않고 t0424를 참조한다. expcode = this.grd_t0424.Rows[i].Cells["c_expcode"].Value.ToString(); //종목코드 orderAt = this.grd_t0424.Rows[i].Cells["orderAt"].Value.ToString(); //매도주문여부 hname = this.grd_t0424.Rows[i].Cells["c_hname"].Value.ToString(); //매도주문여부 //주문여부 if (orderAt == "N") { //감시제외 상태 업데이트. TradingHistoryVo tradingHistoryVo = new TradingHistoryVo(); tradingHistoryVo.accno = this.account; tradingHistoryVo.Isuno = expcode; tradingHistoryVo.exclWatchAt = "Y"; this.tradingHistory.watchUpdate(tradingHistoryVo); } else { //이미 매도주문 실행 종목 MessageBox.Show(hname + "이미 매도주문이 이루어 졌습니다."); } //미리 Y로 해야 제외그리드로 바로 이동한다. this.grd_t0424.Rows[i].Cells["c_exclWatchAt"].Value = 'Y'; //체크박스 초기화. this.grd_t0424.Rows[i].Cells["grd_t0424_check"].Value = false; } }//grd_t0424 for END //DB -> 메모리 리스트 동기화 this.tradingHistory.dbSync(); //감시제외종목 동기화 xing_t0424.exclWatchSync(); }//btn_exclWatch_Click END
//목표 설정및 손절 청산 저장 private void btn_exclWatchSave_Click(object sender, EventArgs e) { for (int i = 0; i < this.grd_t0424Excl.RowCount; i++) { //감시제외 상태 업데이트. TradingHistoryVo tradingHistoryVo = new TradingHistoryVo(); tradingHistoryVo.accno = this.account; tradingHistoryVo.Isuno = this.grd_t0424Excl.Rows[i].Cells["e_expcode"].FormattedValue.ToString().Replace("A", ""); //종목코드; tradingHistoryVo.targClearPrc = this.grd_t0424Excl.Rows[i].Cells["e_targClearPrc"].FormattedValue.ToString().Replace(",", ""); //목표청산가격 tradingHistoryVo.secEntPrc = this.grd_t0424Excl.Rows[i].Cells["e_secEntPrc"].FormattedValue.ToString().Replace(",", ""); //2차진입가격 tradingHistoryVo.secEntAmt = this.grd_t0424Excl.Rows[i].Cells["e_secEntAmt"].FormattedValue.ToString().Replace(",", ""); //2차진입비중가격 tradingHistoryVo.stopPrc = this.grd_t0424Excl.Rows[i].Cells["e_stopPrc"].FormattedValue.ToString().Replace(",", ""); //손절가격 //감시여부 상태 업데이트 호출 this.tradingHistory.clearUpdate(tradingHistoryVo); } this.tradingHistory.dbSync(); MessageBox.Show("감시가격을 저장하였습니다."); }
//취소주문 상태업데이트-종목일괄적용 public int cancelOrdAtUpdate(TradingHistoryVo dataLogVo) { int result = 0; using (var conn = new SQLiteConnection(connStr)) { conn.Open(); StringBuilder sb = new StringBuilder(); sb.Append("UPDATE trading SET cancelOrdAt = '" + dataLogVo.cancelOrdAt + "' "); //체결수량 sb.Append("WHERE Isuno = '" + dataLogVo.Isuno + "' "); //종목코드 sb.Append("AND accno = '" + mainForm.account + "' "); //계좌번호 SQLiteCommand sqlCmd = new SQLiteCommand(sb.ToString(), conn); //Log.WriteLine(sb.ToString()); result = sqlCmd.ExecuteNonQuery(); sqlCmd.Dispose(); conn.Close(); conn.Dispose(); } return(result); }
}//histoySync END //종목매수 정보를 이력 DB에 저장 public void t0424VoToHistoryInsert(T0424Vo t0424Vo, String index) { //이력정보가 없으면 이력정보를 등록해준다. t0424Vo.expcode.Replace("A", ""); //t0424Vo.pamt2 = t0424Vo.pamt; //평균단가2 t0424Vo.sellCnt = "0"; //매도 횟수. t0424Vo.buyCnt = "1"; //매수 횟수 //t0424Vo.sellSunik = "0";//중간매도손익 /////////////////////////DB 신규저장///////////////////////////// TradingHistoryVo dataLogVo = new TradingHistoryVo(); dataLogVo.ordno = "I" + DateTime.Now.ToString("yyMMddHHmmss") + index; //주문번호 dataLogVo.dt = DateTime.Now.ToString("yyyyMMddHHmmss"); dataLogVo.accno = mainForm.account; //계좌번호 dataLogVo.ordptncode = "02"; //주문구분 01:매도|02:매수 dataLogVo.Isuno = t0424Vo.expcode.Replace("A", ""); //종목코드 dataLogVo.ordqty = t0424Vo.mdposqt.ToString(); //주문수량 - 매도가능수량 dataLogVo.execqty = t0424Vo.mdposqt.ToString(); //체결수량 - 매도가능수량 dataLogVo.ordprc = t0424Vo.pamt.ToString(); //주문가격 - 평균단가 dataLogVo.execprc = t0424Vo.pamt.ToString(); //체결가격 - 평균단가 dataLogVo.Isunm = t0424Vo.hname; //종목명 dataLogVo.ordptnDetail = "동기화"; //상세 주문구분 신규매수|반복매수|금일매도|청산 dataLogVo.upOrdno = dataLogVo.ordno; //상위 매수 주문번호 -값이없으면 자신의 주문번호로 넣는다. dataLogVo.upExecprc = "0"; //상위체결가격 dataLogVo.sellOrdAt = "N"; //매도주문 여부 YN default:N -02:매 일때만 값이 있어야한다. dataLogVo.useYN = "Y"; //사용여부 dataLogVo.ordermtd = "XING API"; //2.DB에 해당 주문 정보가 없을때 처리해줘야한다. volist로 변경후 테스트한후에 필요하면 처리로직 추가해주자. mainForm.tradingHistory.insert(dataLogVo); //쿼리 호출 //mainForm.tradingHistory.getTradingHistoryVoList().Add(dataLogVo); //mainForm.dataLog.dbSync(); Log.WriteLine("t0424::최초 이력 등록" + t0424Vo.hname + "(" + t0424Vo.expcode + ") . "); //프로그램 최초에만 동작해야 하는데 신규매수 매도시 이력 등록이 잘 안된다는 뜻이다. }
//public DataTable getHistoryDataTable() //{ // return this.historyDataTable; //} //등록 public int insert(TradingHistoryVo dataLogVo) { int result = 0; try { using (SQLiteConnection conn = new SQLiteConnection(connStr)) { conn.Open(); StringBuilder sb = new StringBuilder(); sb.Append("insert into trading ( ordno "); sb.Append(" ,dt "); //일시 sb.Append(" ,accno "); //계좌번호 sb.Append(" ,Isuno "); //종목코드 sb.Append(" ,Isunm "); //종목명 sb.Append(" ,ordptncode "); //주문구분 01:매도|02:매수 sb.Append(" ,ordqty "); //주문수량 sb.Append(" ,execqty "); //체결수량 sb.Append(" ,ordprc "); //주문가격 sb.Append(" ,execprc "); //체결가격 sb.Append(" ,ordptnDetail "); //상세 주문구분 신규매수|반복매수|금일매도|청산| sb.Append(" ,upOrdno "); //상위 매수 주문번호 -값이없으면 자신의 주문번호로 넣는다. sb.Append(" ,upExecprc "); //상위체결금액 sb.Append(" ,sellOrdAt "); //매도주문 여부 YN default:N 금일매도일때 의미있다. sb.Append(" ,cancelOrdAt "); //취소주문 여부 YN sb.Append(" ,ordermtd "); //주문매체 sb.Append(" ,searchNm "); //검색조건 이름 sb.Append(" ,maxHisRt "); //최대도달 수익율 sb.Append(" ,minHisRt "); //최소도달 수익율 sb.Append(" ,exclWatchAt "); //감시제외여부 sb.Append(" ,useYN ) VALUES( "); //사용여부 sb.Append(" '" + dataLogVo.ordno + "' "); //주문번호 sb.Append(" ,'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "' "); //일시 sb.Append(" ,'" + dataLogVo.accno + "' "); //계좌번호 sb.Append(" ,'" + dataLogVo.Isuno + "' "); //종목코드 sb.Append(" ,'" + dataLogVo.Isunm + "' "); //종목명 sb.Append(" ,'" + dataLogVo.ordptncode + "' "); //주문구분 01:매도|02:매수 sb.Append(" ,'" + dataLogVo.ordqty + "' "); //주문수량 sb.Append(" ,'" + dataLogVo.execqty + "' "); //체결수량 sb.Append(" ,'" + dataLogVo.ordprc + "' "); //주문가격 sb.Append(" ,'" + dataLogVo.execprc + "' "); //체결가격 sb.Append(" ,'" + dataLogVo.ordptnDetail + "' "); //상세 주문구분 신규매수|반복매수|금일매도|청산| sb.Append(" ,'" + dataLogVo.upOrdno + "' "); //상위 매수 주문번호 -값이없으면 자신의 주문번호로 넣는다. sb.Append(" ,'" + dataLogVo.upExecprc + "' "); //상위체결금액 sb.Append(" ,'" + dataLogVo.sellOrdAt + "' "); //매도주문 여부 YN default:N 금일매도일때 의미있다. sb.Append(" ,'" + dataLogVo.cancelOrdAt + "' "); //매도주문 여부 YN sb.Append(" ,'" + dataLogVo.ordermtd + "' "); //주문매체 sb.Append(" ,'" + dataLogVo.searchNm + "' "); //검색조건 이름 sb.Append(" ,'0' "); //최대도달 수익율 sb.Append(" ,'0' "); //최소도달 수익율 sb.Append(" ,'" + dataLogVo.exclWatchAt + "' "); //감시여부 sb.Append(" ,'" + dataLogVo.useYN + "' )"); //사용여부 SQLiteCommand sqlCmd = new SQLiteCommand(sb.ToString(), conn); result = sqlCmd.ExecuteNonQuery(); sqlCmd.Dispose(); conn.Close(); conn.Dispose(); } dbSync(); } catch (Exception e) { mainForm.log(e.Message); Log.WriteLine("t0424 : " + e.StackTrace); } return(result); }
/// <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); { } }