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