public void 체결완료처리(string inqDate, string stockCode, string 주문구분, string 주문번호, string 체결수량, string 체결가) { log.Info("체결완료처리 start inqDate:" + inqDate + " stockCode:" + stockCode + " 주문구분:" + 주문구분 + " 주문번호:" + 주문번호 + " 체결수량:" + 체결수량 + " 체결가:" + 체결가); if (Util.GetInt(체결수량) <= 0 || Util.GetInt(체결가) <= 0) { return; } List <StockOrder> listOrders = dacStock.tbl_stock_order_주문조회(inqDate, stockCode, 주문구분, "요청중"); for (int i = 0; i < listOrders.Count; i++) { StockOrder order = listOrders[i]; if (주문번호.Equals(order.orderNo)) { order.ConfirmQty = 체결수량; order.ConfirmPrice = 체결가; log.Info("체결완료처리 order : " + JsonConvert.SerializeObject(order)); if (Util.GetInt(order.Qty) == Util.GetInt(order.ConfirmQty)) { order.Status = "완료"; dacStock.주문정보업데이트_byOrderSeq(order); if ("매수".Equals(주문구분)) { 매수완료처리(order); } else if ("매도".Equals(주문구분)) { 매도완료처리(inqDate, order); } else if ("매도정정".Equals(주문구분)) { 매도정정완료처리(inqDate, order); } } else { dacStock.주문정보업데이트_byOrderSeq(order); } } } log.Info("체결완료처리 end"); }
public void 실시간미체결요청응답처리(object sender, AxKHOpenAPILib._DKHOpenAPIEvents_OnReceiveTrDataEvent e) { log.Info("실시간미체결요청응답처리 start"); int rowCount = OpenAPI.GetRepeatCnt(e.sTrCode, e.sRQName); for (int i = 0; i < rowCount; i++) { string stockCode = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목코드").Trim(); if (stockCode.StartsWith("A")) { stockCode = stockCode.Substring(1); } else if (stockCode.StartsWith("*A")) { stockCode = stockCode.Substring(2); } string sQty = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문수량").Trim(); int qty = int.Parse(sQty); string sPrice = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문가격").Trim(); int price = int.Parse(sPrice); string orderNo = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문번호").Trim(); string orderStatus = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주문상태").Trim(); log.Info("orderNo:" + orderNo + " orderStatus:" + orderStatus + " stockCode:" + stockCode + " sQty:" + sQty + " sPrice:" + sPrice); List <StockOrder> orderList = dacStock.tbl_stock_order_주문조회(inqDate, stockCode, "매도", "요청중"); // 주문번호가 없는 매도요청건들 주문번호 업데이트 for (int j = 0; j < orderList.Count; j++) { if (string.IsNullOrWhiteSpace(orderList[j].orderNo)) { int orderQty = int.Parse(orderList[j].Qty); int orderPrice = int.Parse(orderList[j].Price); if (qty == orderQty && price == orderPrice) { log.Info("주문번호업데이트 orderSeq: " + orderList[j].Seq + " orderNo:" + orderNo); dacStock.주문정보업데이트(orderList[j].Seq, "", orderNo); } } } } log.Info("실시간미체결요청응답처리 end"); }
public void 추가매수프로세스() { if (DateTime.Now.ToString("HHmm").CompareTo("1150") < 0) { log.Info("추가매수프로세스 start"); // tbl_stock_target 에서 조회 List <StockTarget> 매도요청중인종목리스트 = dacStock.종목대상전체조회(inqDate, "매도요청중"); // -2.5% 밑으로 인 애들 조회해서 추가매수한다. for (int i = 0; i < 매도요청중인종목리스트.Count; i++) { if ("호가매도".Equals(매도요청중인종목리스트[i].매도방식)) { continue; } log.Info("매도요청중인종목리스트[i]:" + 매도요청중인종목리스트[i].stockCode + " 손익률:" + 매도요청중인종목리스트[i].손익률); string tmpRate = 매도요청중인종목리스트[i].손익률; if (string.IsNullOrWhiteSpace(tmpRate)) { tmpRate = "0"; } if (float.Parse(tmpRate) <= -1.5) { log.Info("매도요청중인종목[i]:" + JsonConvert.SerializeObject(매도요청중인종목리스트[i])); StockOrder order = dacStock.매도요청중인주문한종목조회(inqDate, 매도요청중인종목리스트[i].stockCode); if (order == null) { log.Info("order 가 null 이여 씨벌~"); continue; } // 현재가 int price = Util.GetInt(order.Price); int waterCnt = Util.GetInt(매도요청중인종목리스트[i].waterCnt); bool b추가매수가능여부 = true; List <StockOrder> 주문리스트 = dacStock.tbl_stock_order_주문조회(inqDate, order.stockCode, "매수", "요청중"); if (주문리스트 != null && 주문리스트.Count > 0) { for (int j = 0; j < 주문리스트.Count; j++) { if ("추가매수".Equals(주문리스트[j].OrderOption)) { b추가매수가능여부 = false; } } } if (b추가매수가능여부 && waterCnt <= 0) { BuyStock(inqDate, order.stockCode, order.stockName, price, "추가매수", waterCnt, ""); } } } log.Info("추가매수프로세스 end"); } }