Esempio n. 1
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");
        }
Esempio n. 2
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);
        }
Esempio n. 3
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");
            }
        }