Beispiel #1
0
        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");
        }
Beispiel #2
0
        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");
        }