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"); }