Example #1
0
        public int 종목가격변동내역추가(string 조회일자, 종목실시간정보 item)
        {
            DynamicParameters p = new DynamicParameters();

            p.Add("@조회일자_1", 조회일자);
            p.Add("@종목코드_1", item.종목코드);
            p.Add("@종목명_1", item.종목명);
            p.Add("@현재가_1", item.현재가);
            p.Add("@기준가_1", item.기준가);
            p.Add("@전일대비_1", item.전일대비);
            p.Add("@전일대비기호_1", item.전일대비기호);
            p.Add("@등락율_1", item.등락율);
            p.Add("@거래량_1", item.거래량);
            p.Add("@거래대금_1", item.거래대금);
            p.Add("@체결량_1", item.체결량);
            p.Add("@체결강도_1", item.체결강도);
            p.Add("@전일거래량대비_1", item.전일거래량대비);
            p.Add("@매도호가_1", item.매도호가);
            p.Add("@매수호가_1", item.매수호가);
            p.Add("@매도1차호가_1", item.매도1차호가);
            p.Add("@매도2차호가_1", item.매도2차호가);
            p.Add("@매도3차호가_1", item.매도3차호가);
            p.Add("@매도4차호가_1", item.매도4차호가);
            p.Add("@매도5차호가_1", item.매도5차호가);
            p.Add("@매수1차호가_1", item.매수1차호가);
            p.Add("@매수2차호가_1", item.매수2차호가);
            p.Add("@매수3차호가_1", item.매수3차호가);
            p.Add("@매수4차호가_1", item.매수4차호가);
            p.Add("@매수5차호가_1", item.매수5차호가);
            p.Add("@상한가_1", item.상한가);
            p.Add("@하한가_1", item.하한가);
            p.Add("@시가_1", item.시가);
            p.Add("@고가_1", item.고가);
            p.Add("@저가_1", item.저가);
            p.Add("@종가_1", item.종가);
            p.Add("@체결시간_1", item.체결시간);
            p.Add("@예상체결가_1", item.예상체결가);
            p.Add("@예상체결량_1", item.예상체결량);
            p.Add("@자본금_1", item.자본금);
            p.Add("@액면가_1", item.액면가);
            p.Add("@시가총액_1", item.시가총액);
            p.Add("@주식수_1", item.주식수);
            p.Add("@호가시간_1", item.호가시간);
            p.Add("@일자_1", item.일자);
            p.Add("@우선매도잔량_1", item.우선매도잔량);
            p.Add("@우선매수잔량_1", item.우선매수잔량);
            p.Add("@우선매도건수_1", item.우선매도건수);
            p.Add("@우선매수건수_1", item.우선매수건수);
            p.Add("@총매도잔량_1", item.총매도잔량);
            p.Add("@총매수잔량_1", item.총매수잔량);
            p.Add("@총매도건수_1", item.총매도건수);
            p.Add("@총매수건수_1", item.총매수건수);

            return(Execute("SP_종목가격변동내역추가", p));
        }
Example #2
0
        private void 호가매도처리(StockTarget 대상종목)
        {
            log.Info("호가매도처리 start");

            종목증감정보  정보    = dacStock.종목최근등락률조회(inqDate, 대상종목.stockCode);
            종목실시간정보 실시간정보 = dacStock.최근한종목가격변동내역조회(inqDate, 대상종목.stockCode);

            if (!"매도요청중".Equals(대상종목.status) && Util.GetInt(대상종목.보유수) > 0)
            {
                log.Info("종목최근등락률조회 결과:" + JsonConvert.SerializeObject(정보));
                log.Info(string.Format("체결강도 : {0} 총매도잔량 : {1} 총매수잔량 : {2}", 실시간정보.체결강도, 실시간정보.총매도잔량, 실시간정보.총매수잔량));

                bool b매도 = false;

                if (정보.총매도잔량증가율 < 0 &&
                    정보.총매수잔량증가율 > 0 &&
                    Util.GetDouble(실시간정보.총매도잔량) / Util.GetDouble(실시간정보.총매수잔량) <= 1.0 &&
                    정보.갯수 == 5)
                {
                    b매도 = true;
                }
                else if (Util.GetInt(대상종목.매입단가) > Util.GetInt(대상종목.currentPrice))
                {
                    b매도 = true;
                }

                if (b매도)
                {
                    StockOrder 매도요청할주문 = new StockOrder();
                    매도요청할주문.inqDate   = inqDate;
                    매도요청할주문.stockCode = 대상종목.stockCode;
                    매도요청할주문.stockName = 대상종목.stockName;
                    매도요청할주문.Qty       = 대상종목.보유수;
                    매도요청할주문.Price     = 대상종목.currentPrice;

                    SellStock(매도요청할주문, 0);
                }
            }

            log.Info("호가매도처리 end");
        }
Example #3
0
        public string 매수여부판단(종목증감정보 정보, 종목실시간정보 실시간정보)
        {
            string reason = "매수안함";

            /*
             * // 급상승종목이라 판단해서 바로 올라탐.(총매도잔량이 총매수잔량보다 2배이면서 체결강도 100이 넘는경우)
             * if (Util.GetDouble(실시간정보.총매도잔량) / Util.GetDouble(실시간정보.총매수잔량) >= 2.0 && Util.GetDouble(실시간정보.체결강도) > 100)
             * {
             *  bBuy = true;
             * }
             * else
             */
            //if (정보.총매도잔량증가율 > 0 &&
            //    정보.총매수잔량증가율 < 0 &&
            //    정보.체결강도증가율 > 0 &&
            //    Util.GetDouble(실시간정보.총매도잔량) / Util.GetDouble(실시간정보.총매수잔량) >= 1.5 &&
            //    Util.GetDouble(실시간정보.체결강도) > 90 &&
            //    정보.갯수 == 5 )
            //{
            //    bBuy = true;
            //}
            //else
            //    bBuy = false;

            // 체결강도가 80% 이상이면서 체결강도등락률이 50%가 넘으면서 거래량증가율이 20% 이상(체결강도와 거래량이 폭발한 경우)(seq : 1565889)
            //if (Util.GetDouble(실시간정보.체결강도) > 80 &&
            //    Util.GetDouble(실시간정보.체결강도등락률) > 50 &&
            //    Util.GetDouble(실시간정보.거래량등락률) > 20)
            //{
            //    reason = "조건1";
            //}

            if (Util.GetDouble(실시간정보.체결강도) > 100 &&
                Util.GetDouble(실시간정보.거래량) > 3000000 &&
                Util.GetDouble(실시간정보.거래량등락률) > 0)
            {
                // 체결강도가 100% 넘으면서 거래량이 300만이 넘으면서 계속증가하는 경우
                reason = "매수안함".Equals(reason) ? "조건2" : reason + "|조건2";
            }

            if (Util.GetDouble(실시간정보.체결강도) > 80 &&
                Util.GetDouble(실시간정보.체결강도등락률) > 50 &&
                Util.GetDouble(실시간정보.총매도잔량등락률) - Util.GetDouble(실시간정보.총매수잔량등락률) >= 55)
            {
                // 체결강도가 80% 이상이면서 체결강도등락률이 0이상이면서 총매도잔량등락률 - 총매수잔량등락률이 55%이상(매도매수잔량이 폭발하는 경우)
                reason = "매수안함".Equals(reason) ? "조건3" : reason + "|조건3";
            }

            if (Util.GetDouble(실시간정보.잔량비율) >= 2.2 &&
                Util.GetDouble(실시간정보.잔량비율등락률) >= 60 &&
                Util.GetDouble(실시간정보.체결강도) >= 91)
            {
                // 총매도잔량/총매수잔량이 2.2이상이면서 총매도잔량/매수잔량비율이 60%이상 증가하면서 체결강도 91이상(Seq: 1582889)
                reason = "매수안함".Equals(reason) ? "조건4" : reason + "|조건4";
            }

            if (Util.GetDouble(실시간정보.잔량비율등락률) >= 140)
            {
                // 잔량비율등락률 이 140% 이상일때. 총매도잔량이 폭발할때
                reason = "매수안함".Equals(reason) ? "조건5" : reason + "|조건5";
            }

            List <StockOrder> orderList = dacStock.tbl_stock_order_주문조회(inqDate, 정보.종목코드, "매도정정", "요청중");

            if (orderList != null && orderList.Count > 0)
            {
                log.Info("매도정정중인 주문이 존재하여 매수안함 조건 : " + reason);
                reason = "매수안함";
            }

            return(reason);
        }
Example #4
0
        public void BuyAndSell()
        {
            try
            {
                log.Info("BuyAndSell start");

                string 요일 = DateTime.Now.ToString("ddd");

                if (요일.Equals("토") || 요일.Equals("일"))
                {
                    return;
                }

                // 09시 10분부터 15시 20분까지 매수/매도
                if (DateTime.Now.ToString("HHmm").CompareTo("0900") < 0 ||
                    DateTime.Now.ToString("HHmm").CompareTo("1530") > 0)
                {
                    return;
                }

                // 3시까지만 매수(10종목만 매수)
                if (DateTime.Now.ToString("HHmm").CompareTo("1140") <= 0)  //&& 매도요청중인종목리스트.Count < 10)
                {
                    List <StockTarget> targetList = dacStock.금일매수대상목록조회(inqDate);

                    for (int i = 0; i < targetList.Count; i++)
                    {
                        종목증감정보  정보    = dacStock.종목최근등락률조회(inqDate, targetList[i].stockCode);
                        종목실시간정보 실시간정보 = dacStock.최근한종목가격변동내역조회(inqDate, targetList[i].stockCode);

                        log.Info("종목최근등락률조회 결과:" + JsonConvert.SerializeObject(정보));
                        log.Info(string.Format("체결강도 : {0} 총매도잔량 : {1} 총매수잔량 : {2}", 실시간정보.체결강도, 실시간정보.총매도잔량, 실시간정보.총매수잔량));

                        if (정보 == null)
                        {
                            continue;
                        }

                        log.Info("매수대상 :" + JsonConvert.SerializeObject(targetList[i]));

                        string 매수조건 = 매수여부판단(정보, 실시간정보);
                        log.Info("매수조건 : " + 매수조건);

                        if (!"매수안함".Equals(매수조건))
                        {
                            int price = Util.GetInt(targetList[i].currentPrice);

                            int waterCnt = 0;
                            if (!string.IsNullOrWhiteSpace(targetList[i].waterCnt))
                            {
                                waterCnt = int.Parse(targetList[i].waterCnt);
                            }

                            BuyStock(inqDate, targetList[i].stockCode, targetList[i].stockName, price, "", waterCnt, 매수조건);
                        }
                    }
                }

                // 매수요청 후 체결된 애들 조회(tbl_stock_myorderlist)
                매수완료처리();

                List <StockTarget> 당일대상리스트 = dacStock.당일대상조회(inqDate, "");

                for (int i = 0; i < 당일대상리스트.Count; i++)
                {
                    if ("일반".Equals(당일대상리스트[i].매도방식))
                    {
                        대상종목매도요청(당일대상리스트[i]);
                    }
                    else
                    {
                        호가매도처리(당일대상리스트[i]);
                    }
                }

                추가매수프로세스();

                수익률에따른손절처리();

                장마감전보유종목정리();
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }
            finally
            {
                log.Info("BuyAndSell end");
            }
        }
Example #5
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++)
            {
                종목실시간정보 item = new 종목실시간정보();

                item.종목코드 = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목코드").Trim();
                item.종목명  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종목명").Trim();
                item.현재가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "현재가").Trim();
                item.현재가  = item.현재가.Replace("-", "");

                item.기준가     = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "기준가").Trim();
                item.전일대비    = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "전일대비").Trim();
                item.전일대비기호  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "전일대비기호").Trim();
                item.등락율     = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "등락율").Trim();
                item.거래량     = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "거래량").Trim();
                item.거래대금    = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "거래대금").Trim();
                item.체결량     = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결량").Trim();
                item.체결강도    = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결강도").Trim();
                item.전일거래량대비 = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "전일거래량대비").Trim();
                item.매도호가    = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매도호가").Trim();
                item.매수호가    = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매수호가").Trim();
                item.매도1차호가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매도1차호가").Trim();
                item.매도2차호가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매도2차호가").Trim();
                item.매도3차호가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매도3차호가").Trim();
                item.매도4차호가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매도4차호가").Trim();
                item.매도5차호가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매도5차호가").Trim();
                item.매수1차호가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매수1차호가").Trim();
                item.매수2차호가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매수2차호가").Trim();
                item.매수3차호가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매수3차호가").Trim();
                item.매수4차호가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매수4차호가").Trim();
                item.매수5차호가  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "매수5차호가").Trim();
                item.상한가     = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "상한가").Trim();
                item.하한가     = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "하한가").Trim();
                item.시가      = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "시가").Trim();
                item.고가      = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "고가").Trim();
                item.저가      = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "저가").Trim();
                item.종가      = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "종가").Trim();
                item.체결시간    = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "체결시간").Trim();
                item.예상체결가   = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "예상체결가").Trim();
                item.예상체결량   = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "예상체결량").Trim();
                item.자본금     = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "자본금").Trim();
                item.액면가     = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "액면가").Trim();
                item.시가총액    = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "시가총액").Trim();
                item.주식수     = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "주식수").Trim();
                item.호가시간    = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "호가시간").Trim();
                item.일자      = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "일자").Trim();
                item.우선매도잔량  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "우선매도잔량").Trim();
                item.우선매수잔량  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "우선매수잔량").Trim();
                item.우선매도건수  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "우선매도건수").Trim();
                item.우선매수건수  = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "우선매수건수").Trim();
                item.총매도잔량   = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "총매도잔량").Trim();
                item.총매수잔량   = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "총매수잔량").Trim();
                item.총매도건수   = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "총매도건수").Trim();
                item.총매수건수   = OpenAPI.GetCommData(e.sTrCode, e.sRQName, i, "총매수건수").Trim();

                dacStock.현재가갱신(inqDate, item.종목코드, item.현재가);

                dacStock.종목가격변동내역추가(inqDate, item);

                Thread.Sleep(10);
            }

            log.Info("종목현재가조회응답처리 end");
        }