//매수할 목록 패턴검색후 매수처리 private void BuyReservStock(string pCode) { ProcPatternCheck mPPC = new ProcPatternCheck(); StockDB mSD = new StockDB(); try { int mTe = Convert.ToInt32(pCode); } catch { Write(pCode + " 코드값에 영어 포함"); return; } //매수매도 호가 검색 int mBuyCost = GetBuySellCost(pCode, "B"); int mSellCost = 0; if (mBuyCost == 0) { Write(pCode + " 거래정지 종목"); return; } //기본조건을 만족해야지 상세조건을 검색한다. if (mPPC.GetDefaultResult(ProcStockCheck.cTbStock1)) { //N자형 상승파동 mPPC.SetRatioA(); if (mPPC.IsBuyPattern1Check(ProcStockCheck.cTbStock5)) { mSD.InsStock(pCode, "5일선이 고점이 올라가는 쌍봉과 저점이 상승하는 쌍바닥 만들고 상승중인 종목", "1_5", mBuyCost); } mPPC.SetRatioB(); if (mPPC.IsBuyPattern1Check(ProcStockCheck.cTbStock10)) { mSD.InsStock(pCode, "10일선이 고점이 올라가는 쌍봉과 저점이 상승하는 쌍바닥 만들고 상승중인 종목", "1_10", mBuyCost); } //엘리어트파동 3위치 mPPC.SetRatioA(); if (mPPC.IsBuyPattern2Check(ProcStockCheck.cTbStock5, out mSellCost)) { mSD.InsStock(pCode, "5일선이 엘리어트파동의 3번위치 만들고 상승중인 종목", "2_5", mBuyCost, mSellCost); } mPPC.SetRatioB(); if (mPPC.IsBuyPattern2Check(ProcStockCheck.cTbStock10, out mSellCost)) { mSD.InsStock(pCode, "10일선이 엘리어트파동의 3번위치 만들고 상승중인 종목", "2_10", mBuyCost, mSellCost); } //거래량 없이 상한가 종목 (시장가로 구매시 상한가로 구매할 가능성이 90% 이상이나 매수한다) if (mPPC.IsBuyPattern3Check(ProcStockCheck.cTbStock1)) { mSD.InsStock(pCode, "거래량 없이 상한가", "3_1", Convert.ToInt32(mBuyCost * 0.15)); } //매물대 돌파 종목 if (mPPC.IsBuyPattern4Check(ProcStockCheck.cTbStock1)) { mSD.InsStock(pCode, "매물대 돌파", "4_1", mBuyCost); } //엘리어트파동 1위치 mPPC.SetRatioA(); if (mPPC.IsBuyPattern5Check(ProcStockCheck.cTbStock5, out mSellCost)) { mSD.InsStock(pCode, "5일선이 엘리어트파동의 1번위치 만들고 상승중인 종목", "5_5", mBuyCost, mSellCost); } mPPC.SetRatioB(); if (mPPC.IsBuyPattern5Check(ProcStockCheck.cTbStock10, out mSellCost)) { mSD.InsStock(pCode, "10일선이 엘리어트파동의 1번위치 만들고 상승중인 종목", "5_10", mBuyCost, mSellCost); } //N자형 상승파동 1차,2차 상승폭까지 검증 mPPC.SetRatioA(); if (mPPC.IsBuyPattern6Check(ProcStockCheck.cTbStock5)) { mSD.InsStock(pCode, "5일선이 고점이 올라가는 쌍봉과 저점이 상승하는 쌍바닥 만들고 상승중인 종목", "6_5", mBuyCost); } } mSD = null; mPPC = null; }
//가지고 있는 종목 중 매도해야 하는 종목이 있는지 검색하여 매도예약 할 수있게 한다. private void SelReservStock() { StockDB mSD = new StockDB(); DataTable mMyTb = mSD.SelListMyStock2(); for (int i = 0; i < mMyTb.Rows.Count; i++) { Thread.Sleep(cThreadSleepTime); Write("보유종목 매도여부 검색중...."); DataRow mRow = mMyTb.Rows[i]; int mMyStockIdx = Convert.ToInt32(mRow["Index"].ToString()); string mMyStockBuyPatternCode = mRow["BuyPatternCode"].ToString(); string mMyStockCode = mRow["Code"].ToString(); DateTime mMyStockBuyDate = DateTime.Parse(string.Format("{0}-{1}-{2} {3}:{4}:{5}", new string[] { mRow["BuyDate"].ToString().Substring(0, 4), mRow["BuyDate"].ToString().Substring(4, 2), mRow["BuyDate"].ToString().Substring(6, 2), mRow["BuyDate"].ToString().Substring(8, 2), mRow["BuyDate"].ToString().Substring(10, 2), "00" })); double mBuyCost = Convert.ToDouble(mRow["BuyCost"].ToString()); double mSelCost = 0; try { mSelCost = Convert.ToDouble(mRow["SelCost"].ToString()); } catch { } double mNowCost = GetBuySellCost(mMyStockCode, "S"); double mRatio = mNowCost / mBuyCost; string mBuyPC = mMyStockBuyPatternCode.Substring(0, 1); string mBuyPC2 = mMyStockBuyPatternCode.Substring(2, 1); if (mBuyPC == "1" || mBuyPC == "4" || mBuyPC == "6") //N자형 상승패턴, 매물대 돌파 { //12%이상 수익이 생겼으면 매도한다. if (mBuyPC == "1" && mRatio >= 1.12) { mSD.UpdSell(mMyStockIdx, "12%이상 수익발생", mBuyPC + "_1", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 12%이상 수익발생으로 매도"); } else if (mRatio >= 1.15) { mSD.UpdSell(mMyStockIdx, "15%이상 수익발생", mBuyPC + "_1", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 15%이상 수익발생으로 매도"); } //10%이상 손해가 생겼을경우 매도한다. else if (mRatio <= 0.90) { mSD.UpdSell(mMyStockIdx, "10%이상 손해", mBuyPC + "_2", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 10%이상 손해발생으로 매도"); } //15일이상 가지고 있었다면 매도한다.(단, 수익이 5%이상일경우) else if (mMyStockBuyDate.AddDays(15) < DateTime.Now && mRatio >= 1.05) { mSD.UpdSell(mMyStockIdx, "장기간 보유", mBuyPC + "_3", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 장기간(15일) 보유로 매도"); } //20일이상 가지고 있었다면 매도한다.(단, 수익이 2%이상일경우) else if (mMyStockBuyDate.AddDays(20) < DateTime.Now && mRatio >= 1.02) { mSD.UpdSell(mMyStockIdx, "장기간 보유", mBuyPC + "_4", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 장기간(20일) 보유로 매도"); } else { bool mIsSelCheckSuc = true; ProcStockCheck.InitStockTrend(); for (int j = 1; j <= 5; j++) { mIsSelCheckSuc = ProcStockCheck.SetStockTrend("http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + j.ToString() + "&code=" + mMyStockCode + "&modify=1"); if (!mIsSelCheckSuc) { break; } } if (mIsSelCheckSuc) { ProcStockCheck.SetStorkMake5Line(); ProcStockCheck.SetStorkMake10Line(); ProcPatternCheck mPPC = new ProcPatternCheck(); if (mBuyPC2 == "5") { mPPC.SetRatioA(); if (mPPC.IsSelPattern1Check(ProcStockCheck.cTbStock5)) { mSD.UpdSell(mMyStockIdx, "5일선 쌍봉 발생", mBuyPC + "_5", Convert.ToInt32(mNowCost)); } } else if (mBuyPC2 == "10") { mPPC.SetRatioB(); if (mPPC.IsSelPattern1Check(ProcStockCheck.cTbStock5)) { mSD.UpdSell(mMyStockIdx, "10일선 쌍봉 발생", mBuyPC + "_6", Convert.ToInt32(mNowCost)); } } ProcStockCheck.ClearStockTrend(); mPPC = null; } } } else if (mBuyPC == "2" || mBuyPC == "5") //엘리어트 파동 상승3번위치, 엘리어트파동 상승1번위치 { //구매시 매도목표가를 지정하였으므로 그가격 이상이라면 매도. if (mNowCost >= mSelCost) { mSD.UpdSell(mMyStockIdx, "목표가까지 올라옴", mBuyPC + "_1", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 목표가까지 올라옴"); } //10%이상 손해가 생겼을경우 매도한다. else if (mRatio <= 0.90) { mSD.UpdSell(mMyStockIdx, "10%이상 손해", mBuyPC + "_2", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 10%이상 손해발생으로 매도"); } //15일이상 가지고 있었다면 매도한다.(단, 수익이 10%이상일경우) else if (mMyStockBuyDate.AddDays(15) < DateTime.Now && mRatio >= 1.10) { mSD.UpdSell(mMyStockIdx, "장기간 보유", mBuyPC + "_3", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 장기간(10일) 보유로 매도"); } //25일이상 가지고 있었다면 매도한다.(단, 수익이 2%이상일경우) else if (mMyStockBuyDate.AddDays(25) < DateTime.Now && mRatio >= 1.02) { mSD.UpdSell(mMyStockIdx, "장기간 보유", mBuyPC + "_4", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 장기간(20일) 보유로 매도"); } else { } } else if (mBuyPC == "3") //거래량 없이 상한가. { //매도한지 7일이상 경과하거나 50%이상 수익이 있을경우 매도 if (mMyStockBuyDate.AddDays(7) < DateTime.Now) { mSD.UpdSell(mMyStockIdx, "7일 경과 매도", mBuyPC + "_1", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 7일 경과 매도"); } else if (mRatio >= 1.50) { mSD.UpdSell(mMyStockIdx, "50% 수익달성하여 매도", mBuyPC + "_2", Convert.ToInt32(mNowCost)); Write(mMyStockCode + " 50% 수익달성하여 매도"); } else { } } else { } SetMyList(); } mSD = null; }