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)); }
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"); }
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); }
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"); } }
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"); }