public void 전일거래량상위응답처리(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { int rowCount = OpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); for (int i = 0; i < rowCount; i++) { StockMyOrder myOrder = new StockMyOrder(); string 종목코드 = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목코드").Trim(); string 종목명 = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim(); string 현재가 = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "현재가").Trim(); string 전일대비기호 = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "전일대비기호").Trim(); string 전일대비 = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "전일대비").Trim(); string 거래량 = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "거래량").Trim(); dacStock.전일_거래량거래대금순조회(inqDate, 종목코드, 종목명, 현재가, 전일대비기호, 전일대비, 거래량, "전일거래량순조회".Equals(e.sRQName) ? "1" : "2"); } if ("2".Equals(e.sPrevNext)) { 전일거래량상위요청("전일거래량순조회".Equals(e.sRQName) ? "1" : "2", e.sPrevNext); } }
private void 매수완료처리() { log.Info("매수완료처리및매도요청 start"); List <StockMyOrder> 매수완료리스트 = dacStock.매수완료된내역조회_myorderlist(inqDate); for (int i = 0; i < 매수완료리스트.Count; i++) { StockMyOrder myOrder = 매수완료리스트[i]; // 체결되지 않음. if (string.IsNullOrWhiteSpace(myOrder.confirmQty) || "0".Equals(myOrder.confirmQty)) { continue; } // 동일종목의 tbl_stock_order 리스트 조회 List <StockOrder> orderList = dacStock.tbl_stock_order_주문조회(inqDate, 매수완료리스트[i].stockCode, "매수", "요청중"); StockOrder order = null; for (int j = 0; j < orderList.Count; j++) { order = orderList[j]; log.Info("myOrder: " + JsonConvert.SerializeObject(myOrder)); log.Info("order: " + JsonConvert.SerializeObject(order)); if (myOrder.orderNo.Equals(order.orderNo) || (int.Parse(myOrder.Qty.Trim()) == int.Parse(order.Qty.Trim()) && int.Parse(myOrder.Price.Trim()) == int.Parse(order.Price.Trim()))) { if (string.IsNullOrWhiteSpace(order.orderNo)) { // 주문번호가 업데이트 안돼있을 경우 대비 order.orderNo = myOrder.orderNo; log.Info("order.orderNo:" + order.orderNo + " seq:" + order.Seq + " stockCode:" + order.stockCode); dacStock.주문정보업데이트(order.Seq, "", order.orderNo, order.stockCode); } // 체결 set order.ConfirmQty = myOrder.confirmQty; order.ConfirmPrice = myOrder.confirmPrice; order.Status = "완료"; // tbl_stock_order 의 매수요청중을 매수완료로 변경 dacStock.주문정보업데이트_byOrderSeq(order); // myOrderList 에 동기화필드업데이트 dacStock.주문내역동기화완료처리(myOrder.seq); // 1건만 찾음. break; } else { // 다르면 다른 주문건이라서 매도요청하면 안됨. order = null; log.Info("주문건이 서로 다름."); } } if (order != null) { if ("추가매수".Equals(order.OrderOption)) { log.Info("추가매수"); // tbl_stock_target 업데이트 dacStock.주식상태매수완료처리로변경(order.inqDate, order.stockCode, Util.GetInt(order.ConfirmQty), Util.GetInt(order.ConfirmPrice), "Y"); StockTarget target = dacStock.당일대상조회(order.inqDate, order.stockCode)[0]; log.Info("추가매수완료처리대상:" + JsonConvert.SerializeObject(target)); // 추가매수로 매입단가가 내려갔을 테니 매도 목표가도 다시 정정한다. int price = int.Parse(target.매입단가); List <StockOrder> listOrders = dacStock.tbl_stock_order_주문조회(order.inqDate, order.stockCode, "매도", "요청중"); if (listOrders != null && listOrders.Count > 0) { StockOrder 매도요청중주문 = listOrders[0]; int resultCode = OpenAPI.매도취소요청(AccountNo, 매도요청중주문.Seq, 매도요청중주문.orderNo, 매도요청중주문.stockCode, 매도요청중주문.stockName , 매도요청중주문.Qty, 매도요청중주문.Price); //매도정정요청(order.inqDate, 매도요청중주문.orderNo, order.stockCode, order.stockName, int.Parse(order.Qty), int.Parse(order.Price)); if (resultCode == 0) { dacStock.주문상태변경(매도요청중주문.Seq, "취소완료"); } else { dacStock.주문상태변경(매도요청중주문.Seq, "취소중오류"); } } } else { dacStock.주식상태매수완료처리로변경(order.inqDate, order.stockCode, int.Parse(order.ConfirmQty), int.Parse(order.ConfirmPrice), ""); } } } log.Info("매수완료처리및매도요청 end"); }
public void 계좌별주문체결현황요청응답처리(string orderDate, object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e, string sPrevNext) { log.Info("계좌별주문체결현황요청응답처리 start orderDate:" + orderDate + " sPrevNext:" + sPrevNext); int rowCount = OpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); for (int i = 0; i < rowCount; i++) { StockMyOrder myOrder = new StockMyOrder(); myOrder.orderDate = orderDate; myOrder.stockBondGubun = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주식채권구분").Trim(); myOrder.orderNo = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문번호").Trim(); myOrder.stockCode = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목번호").Trim(); if (myOrder.stockCode.StartsWith("A")) { myOrder.stockCode = myOrder.stockCode.Substring(1); } else if (myOrder.stockCode.StartsWith("*A")) { myOrder.stockCode = myOrder.stockCode.Substring(2); } myOrder.sellFlag = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매매구분").Trim(); myOrder.orderType = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문유형구분").Trim(); myOrder.Qty = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문수량").Trim(); myOrder.Price = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문단가").Trim(); myOrder.checkQty = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "확인수량").Trim(); myOrder.reserveDeny = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "예약반대").Trim(); myOrder.confirmNo = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결번호").Trim(); myOrder.acceptType = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "접수구분").Trim(); myOrder.orgOrderNo = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "원주문번호").Trim(); myOrder.stockName = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim(); myOrder.payType = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "결제구분").Trim(); myOrder.creditTransType = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "신용거래구분").Trim(); myOrder.confirmQty = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결수량").Trim(); myOrder.confirmPrice = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결단가").Trim(); myOrder.commType = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "통신구분").Trim(); myOrder.modifyFlag = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "정정취소구분").Trim(); myOrder.confirmedTime = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결시간").Trim(); log.Info("체결현황요청응답 : " + JsonConvert.SerializeObject(myOrder)); if (!string.IsNullOrWhiteSpace(myOrder.orderNo)) { if (dacStock.체결내역있는지검사(myOrder) == null) { log.Info("신규등록"); dacStock.체결내역한건등록(myOrder); } else { log.Info("기존거 수정"); dacStock.체결내역업데이트(myOrder); } } } if ("2".Equals(sPrevNext)) { 계좌주문별체결현황요청(sPrevNext); } log.Info("계좌별주문체결현황요청응답처리 start"); }