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