Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 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");
        }
Exemplo n.º 3
0
        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");
        }