private void StockCheckProcess() { while (cIsRunning) { if (DateTime.Now.DayOfWeek == DayOfWeek.Friday || DateTime.Now.DayOfWeek == DayOfWeek.Saturday) { Write("금요일 저녁, 토요일 저녁은 검색안함."); Thread.Sleep(1000 * 60 * 5); continue; } if(DateTime.Now.Day != cProcDay && (19 <= DateTime.Now.Hour && DateTime.Now.Hour < 23)) { cProcDay = DateTime.Now.Day; //매수하라고 등록되어있지만 그날 매수하지 않은 종목은 DB에서 삭제한다. StockDB mSD2 = new StockDB(); mSD2.DelBuyList(); mSD2 = null; StockDB mSD = new StockDB(); if (true) { #region 매수/매도 목록 검색후 XmlDB 업데이트========================================================================================== if (true) { #region 초기화 ProcStockCheck.InitStockTrend(); #endregion #region 다음증권 사이트에서 패턴을 분석할 주식종목을 테마별로 검색 #region 코스피 /코스닥 전종목 검색 Write("코스피 전종목 코드검색.."); string[] mStocks_P = GetAllStockPageP_StockCode(); Thread.Sleep(cThreadSleepTime); if (!cIsRunning) { break; } Write("코스닥 전종목 코드검색.."); string[] mStocks_Q = GetAllStockPageQ_StockCode(); Thread.Sleep(cThreadSleepTime); if (!cIsRunning) { break; } #endregion #region 코스피 /코스닥 상승종목 검색 Write("코스피 상승종목 코드검색.."); string[] mStocksUP_P = GetUpStockPageP_StockCode(); Thread.Sleep(cThreadSleepTime); if (!cIsRunning) { break; } Write("코스닥 상승종목 코드검색.."); string[] mStocksUP_Q = GetUpStockPageQ_StockCode(); Thread.Sleep(cThreadSleepTime); if (!cIsRunning) { break; } #endregion #region 코스피 /코스닥 거래량탑종목 검색 Write("코스피 거래량탑종목 코드검색.."); string[] mStocksTOP_P = GetTopStockPageP_StockCode(); Thread.Sleep(cThreadSleepTime); if (!cIsRunning) { break; } Write("코스닥 거래량탑종목 코드검색.."); string[] mStocksTOP_Q = GetTopStockPageQ_StockCode(); Thread.Sleep(cThreadSleepTime); if (!cIsRunning) { break; } #endregion #region 코스피 /코스닥 상한가종목 검색 Write("코스피 전날상한가종목 코드검색.."); string[] mStocksTTOP_P = GetTTopStockPageP_StockCode(); Thread.Sleep(cThreadSleepTime); if (!cIsRunning) { break; } Write("코스닥 전날상한가종목 코드검색.."); string[] mStocksTTOP_Q = GetTTopStockPageQ_StockCode(); Thread.Sleep(cThreadSleepTime); if (!cIsRunning) { break; } #endregion #endregion #region 검색된 주식목록에 매수패턴과 매도패턴을 대입하여 일치하는 데이타를 찾아낸다. #region 코스피 전날상한가종목 검색하여 패턴대입 for (int k = 0; k < mStocksTTOP_P.Length; k++) { Write("코스피 전날상한가종목 검색하여 패턴대입"); if (!cIsRunning) { break; } bool mIsError = true; if (mStocksTTOP_P[k] == null) { break; } for (int i = 1; i <= 5; i++) { Thread.Sleep(cThreadSleepTime); mIsError = ProcStockCheck.SetStockTrend("http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksTTOP_P[k] + "&modify=1"); if (!mIsError) { Write(mStocksTTOP_P[k] + " 검색 도중 에러 : " + "http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksTTOP_P[k] + "&modify=1"); break; } } if (!mIsError) { ProcStockCheck.ClearStockTrend(); continue; } ProcStockCheck.SetStorkMake5Line(); ProcStockCheck.SetStorkMake10Line(); ProcStockCheck.SetStorkMake20Line(); BuyReservStock(mStocksTTOP_P[k]); ProcStockCheck.ClearStockTrend(); SetBuyList(); } #endregion #region 코스닥 전날상한가종목 검색하여 패턴대입 for (int k = 0; k < mStocksTTOP_Q.Length; k++) { Write("코스닥 전날상한가종목 검색하여 패턴대입"); if (!cIsRunning) { break; } bool mIsError = true; if (mStocksTTOP_Q[k] == null) { break; } for (int i = 1; i <= 5; i++) { Thread.Sleep(cThreadSleepTime); mIsError = ProcStockCheck.SetStockTrend("http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksTTOP_Q[k] + "&modify=1"); if (!mIsError) { Write(mStocksTTOP_Q[k] + " 검색 도중 에러 : " + "http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksTTOP_Q[k] + "&modify=1"); break; } } if (!mIsError) { ProcStockCheck.ClearStockTrend(); continue; } ProcStockCheck.SetStorkMake5Line(); ProcStockCheck.SetStorkMake10Line(); ProcStockCheck.SetStorkMake20Line(); BuyReservStock(mStocksTTOP_Q[k]); ProcStockCheck.ClearStockTrend(); SetBuyList(); } #endregion #region 코스피 전종목을 검색하여 패턴대입 for (int k = 0; k < mStocks_P.Length; k++) { Write("코스피 전종목을 검색하여 패턴대입"); if (!cIsRunning) { break; } bool mIsError = true; if (mStocks_P[k] == null) { break; } mStocks_P[k] = "046120"; for (int i = 1; i <= 5; i++) { Thread.Sleep(cThreadSleepTime); mIsError = ProcStockCheck.SetStockTrend("http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocks_P[k] + "&modify=1"); if (!mIsError) { Write(mStocks_P[k] + " 검색 도중 에러 : " + "http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocks_P[k] + "&modify=1"); break; } } if (!mIsError) { ProcStockCheck.ClearStockTrend(); continue; } ProcStockCheck.SetStorkMake5Line(); ProcStockCheck.SetStorkMake10Line(); ProcStockCheck.SetStorkMake20Line(); BuyReservStock(mStocks_P[k]); ProcStockCheck.ClearStockTrend(); SetBuyList(); } #endregion #region 코스닥 전종목을 검색하여 패턴대입 for (int k = 0; k < mStocks_Q.Length; k++) { Write("코스닥 전종목을 검색하여 패턴대입"); if (!cIsRunning) { break; } bool mIsError = true; if (mStocks_Q[k] == null) { break; } for (int i = 1; i <= 5; i++) { Thread.Sleep(cThreadSleepTime); mIsError = ProcStockCheck.SetStockTrend("http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocks_Q[k] + "&modify=1"); if (!mIsError) { Write(mStocks_Q[k] + " 검색 도중 에러 : " + "http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocks_Q[k] + "&modify=1"); break; } } if (!mIsError) { ProcStockCheck.ClearStockTrend(); continue; } ProcStockCheck.SetStorkMake5Line(); ProcStockCheck.SetStorkMake10Line(); ProcStockCheck.SetStorkMake20Line(); BuyReservStock(mStocks_Q[k]); ProcStockCheck.ClearStockTrend(); SetBuyList(); } #endregion #region 코스피 전일상승종목 검색하여 패턴대입 for (int k = 0; k < mStocksUP_P.Length; k++) { Write("코스피 전일상승종목 검색하여 패턴대입"); if (!cIsRunning) { break; } bool mIsError = true; if (mStocksUP_P[k] == null) { break; } for (int i = 1; i <= 5; i++) { Thread.Sleep(cThreadSleepTime); mIsError = ProcStockCheck.SetStockTrend("http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksUP_P[k] + "&modify=1"); if (!mIsError) { Write(mStocksUP_P[k] + " 검색 도중 에러 : " + "http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksUP_P[k] + "&modify=1"); break; } } if (!mIsError) { ProcStockCheck.ClearStockTrend(); continue; } ProcStockCheck.SetStorkMake5Line(); ProcStockCheck.SetStorkMake10Line(); ProcStockCheck.SetStorkMake20Line(); BuyReservStock(mStocksUP_P[k]); ProcStockCheck.ClearStockTrend(); SetBuyList(); } #endregion #region 코스닥 전일상승종목 검색하여 패턴대입 for (int k = 0; k < mStocksUP_Q.Length; k++) { Write("코스닥 전일상승종목 검색하여 패턴대입"); if (!cIsRunning) { break; } bool mIsError = true; if (mStocksUP_Q[k] == null) { break; } for (int i = 1; i <= 5; i++) { Thread.Sleep(cThreadSleepTime); mIsError = ProcStockCheck.SetStockTrend("http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksUP_Q[k] + "&modify=1"); if (!mIsError) { Write(mStocksUP_Q[k] + " 검색 도중 에러 : " + "http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksUP_Q[k] + "&modify=1"); break; } } if (!mIsError) { ProcStockCheck.ClearStockTrend(); continue; } ProcStockCheck.SetStorkMake5Line(); ProcStockCheck.SetStorkMake10Line(); ProcStockCheck.SetStorkMake20Line(); BuyReservStock(mStocksUP_Q[k]); ProcStockCheck.ClearStockTrend(); SetBuyList(); } #endregion #region 코스피 거래량탑종목 검색하여 패턴대입 for (int k = 0; k < mStocksTOP_P.Length; k++) { Write("코스피 거래량탑종목 검색하여 패턴대입"); if (!cIsRunning) { break; } bool mIsError = true; if (mStocksTOP_P[k] == null) { break; } for (int i = 1; i <= 5; i++) { Thread.Sleep(cThreadSleepTime); mIsError = ProcStockCheck.SetStockTrend("http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksTOP_P[k] + "&modify=1"); if (!mIsError) { Write(mStocksTOP_P[k] + " 검색 도중 에러 : " + "http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksTOP_P[k] + "&modify=1"); break; } } if (!mIsError) { ProcStockCheck.ClearStockTrend(); continue; } ProcStockCheck.SetStorkMake5Line(); ProcStockCheck.SetStorkMake10Line(); ProcStockCheck.SetStorkMake20Line(); BuyReservStock(mStocksTOP_P[k]); ProcStockCheck.ClearStockTrend(); SetBuyList(); } #endregion #region 코스닥 거래량탑종목 검색하여 패턴대입 for (int k = 0; k < mStocksTOP_Q.Length; k++) { Write("코스닥 거래량탑종목 검색하여 패턴대입"); if (!cIsRunning) { break; } bool mIsError = true; if (mStocksTOP_Q[k] == null) { break; } for (int i = 1; i <= 5; i++) { Thread.Sleep(cThreadSleepTime); mIsError = ProcStockCheck.SetStockTrend("http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksTOP_Q[k] + "&modify=1"); if (!mIsError) { Write(mStocksTOP_Q[k] + " 검색 도중 에러 : " + "http://stock.daum.net/item/quote_yyyymmdd_sub.daum?page=" + i.ToString() + "&code=" + mStocksTOP_Q[k] + "&modify=1"); break; } } if (!mIsError) { ProcStockCheck.ClearStockTrend(); continue; } ProcStockCheck.SetStorkMake5Line(); ProcStockCheck.SetStorkMake10Line(); ProcStockCheck.SetStorkMake20Line(); BuyReservStock(mStocksTOP_Q[k]); ProcStockCheck.ClearStockTrend(); SetBuyList(); } #endregion #endregion } SelReservStock(); #endregion Thread.Sleep(cThreadSleepTime); } if (true) { #region HTS 프로그램 매수/매도 실행================================================================================================= KeyEnter(); Thread.Sleep(10000); Thread.Sleep(cThreadSleepTime); SetCursorPos(cCursorX, cCursorY); //거래비밀번호 입력처리 MoveMouse(cPasswordX, cPasswordY); MouseLeftClick(); KeyWrite("0809"); #region 매도할 종목 Write("매도 종목 검색"); cSellTb = mSD.SelListMustSell(); for (int i = 0; i < cSellTb.Rows.Count; i++) { int mIdx = Convert.ToInt32(cSellTb.Rows[i]["Index"].ToString()); string mStockCode = cSellTb.Rows[i]["Code"].ToString(); string mStockCost = "0"; try { mStockCost = cSellTb.Rows[i]["SellCost"].ToString(); } catch { } string mCount = cSellTb.Rows[i]["Count"].ToString(); string mStockBuyPatternCode = cSellTb.Rows[i]["BuyPatternCode"].ToString(); string mBuyPC = mStockBuyPatternCode.Substring(0, 1); //종목코드 입력 MoveMouse(cStockCodeX, cStockCodeY); MouseLeftClick(); KeyWrite(mStockCode); //라디오 매도 체크 MoveMouse(cRdoSellX, cRdoSellY); MouseLeftClick(); //if (mBuyPC == "3") //{ // //시장가 선택 // MoveMouse(cPriceTypeX, cPriceTypeY); // MouseLeftClick(); // MoveMouse(cPriceTypeX, cPriceTypeY + 30); // MouseLeftClick(); //} //else //{ // MoveMouse(cPriceTypeX, cPriceTypeY); // MouseLeftClick(); // MoveMouse(cPriceTypeX, cPriceTypeY + 15); // MouseLeftClick(); // //매도가격 입력 // MoveMouse(cBuyCostX, cBuyCostY); // MouseLeftClick(); // KeyWrite(mStockCost); //} //시장가 선택 (무조건 시장가로) MoveMouse(cPriceTypeX, cPriceTypeY); MouseLeftClick(); MoveMouse(cPriceTypeX, cPriceTypeY + 30); MouseLeftClick(); //매도수량 입력 MoveMouse(cBuyCountX, cBuyCountY); MouseLeftClick(); KeyWrite(mCount); //버튼클릭 MoveMouse(cBuyBtnX, cBuyBtnY); MouseLeftClick(); Thread.Sleep(3000); KeyEnter(); Thread.Sleep(7000); mSD.UpdSellComplete(mIdx); SetMyList(); } #endregion #region 매수할 종목 Write("매수 종목 검색"); //하루에 3개종목까지만 매수하고 총 10개 이하 종목으로 유지한다. int mTodayBuyCnt = 1; DataTable mProfitOrder = mSD.SelListBuyPatternReport(); for (int m = 0; m < mProfitOrder.Rows.Count; m++) { cBuyTb = mSD.SelListMustBuy(mProfitOrder.Rows[m]["KEY"].ToString()); for (int i = 0; i < cBuyTb.Rows.Count; i++) { if (mSD.GetMyStock() >= 10) { break; } //내가 보유한종목이 10개 이상이면 매수 중단. if (mTodayBuyCnt >= 3) { break; } else { mTodayBuyCnt++; } //오늘 매수종목이 3개 이상이면 매수 중단. int mIdx = Convert.ToInt32(cBuyTb.Rows[i]["Index"].ToString()); string mStockCode = cBuyTb.Rows[i]["Code"].ToString(); string mStockCost = cBuyTb.Rows[i]["BuyCost"].ToString(); string mCount = cBuyTb.Rows[i]["Count"].ToString(); string mStockBuyPatternCode = cBuyTb.Rows[i]["BuyPatternCode"].ToString(); string mBuyPC = mStockBuyPatternCode.Substring(0, 1); //종목코드 입력 MoveMouse(cStockCodeX, cStockCodeY); MouseLeftClick(); KeyWrite(mStockCode); //라디오 매수 체크 MoveMouse(cRdoBuyX, cRdoBuyY); MouseLeftClick(); //if (mBuyPC == "3") //{ // //시장가 선택 // MoveMouse(cPriceTypeX, cPriceTypeY); // MouseLeftClick(); // MoveMouse(cPriceTypeX, cPriceTypeY + 30); // MouseLeftClick(); //} //else //{ // //시장가 선택 // MoveMouse(cPriceTypeX, cPriceTypeY); // MouseLeftClick(); // MoveMouse(cPriceTypeX, cPriceTypeY + 15); // MouseLeftClick(); // //구매가격 입력 // MoveMouse(cBuyCostX, cBuyCostY); // MouseLeftClick(); // KeyWrite(mStockCost); //} //시장가 선택(무조건 시장가로) MoveMouse(cPriceTypeX, cPriceTypeY); MouseLeftClick(); MoveMouse(cPriceTypeX, cPriceTypeY + 30); MouseLeftClick(); //구매수량 입력 MoveMouse(cBuyCountX, cBuyCountY); MouseLeftClick(); KeyWrite(mCount); //버튼클릭 MoveMouse(cBuyBtnX, cBuyBtnY); MouseLeftClick(); Thread.Sleep(2000); KeyEnter(); Thread.Sleep(3000); mSD.UpdBuyComplete(mIdx); SetMyList(); } } mProfitOrder = null; mTodayBuyCnt = 1; cBuyTb = mSD.SelListMustBuy(); for (int i = 0; i < cBuyTb.Rows.Count; i++) { if (mSD.GetMyStock() >= 10) { break; } //내가 보유한종목이 10개 이상이면 매수 중단. if (mTodayBuyCnt >= 3) { break; } else { mTodayBuyCnt++; } //오늘 매수종목이 3개 이상이면 매수 중단. int mIdx = Convert.ToInt32(cBuyTb.Rows[i]["Index"].ToString()); string mStockCode = cBuyTb.Rows[i]["Code"].ToString(); string mStockCost = cBuyTb.Rows[i]["BuyCost"].ToString(); string mCount = cBuyTb.Rows[i]["Count"].ToString(); string mStockBuyPatternCode = cBuyTb.Rows[i]["BuyPatternCode"].ToString(); string mBuyPC = mStockBuyPatternCode.Substring(0, 1); //종목코드 입력 MoveMouse(cStockCodeX, cStockCodeY); MouseLeftClick(); KeyWrite(mStockCode); //라디오 매수 체크 MoveMouse(cRdoBuyX, cRdoBuyY); MouseLeftClick(); //if (mBuyPC == "3") //{ // //시장가 선택 // MoveMouse(cPriceTypeX, cPriceTypeY); // MouseLeftClick(); // MoveMouse(cPriceTypeX, cPriceTypeY + 30); // MouseLeftClick(); //} //else //{ // //시장가 선택 // MoveMouse(cPriceTypeX, cPriceTypeY); // MouseLeftClick(); // MoveMouse(cPriceTypeX, cPriceTypeY + 15); // MouseLeftClick(); // //구매가격 입력 // MoveMouse(cBuyCostX, cBuyCostY); // MouseLeftClick(); // KeyWrite(mStockCost); //} //시장가 선택(무조건 시장가로) MoveMouse(cPriceTypeX, cPriceTypeY); MouseLeftClick(); MoveMouse(cPriceTypeX, cPriceTypeY + 30); MouseLeftClick(); //구매수량 입력 MoveMouse(cBuyCountX, cBuyCountY); MouseLeftClick(); KeyWrite(mCount); //버튼클릭 MoveMouse(cBuyBtnX, cBuyBtnY); MouseLeftClick(); Thread.Sleep(2000); KeyEnter(); Thread.Sleep(3000); mSD.UpdBuyComplete(mIdx); SetMyList(); } #endregion #endregion Thread.Sleep(cThreadSleepTime); } SetReport(); SetSelReport(); SetSuik(); mSD = null; } else { Write("19:00~23:00시가 될때까지 대기중"); Thread.Sleep(1000*60*30); } } }
//매수할 목록 패턴검색후 매수처리 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 SetSuik() { if (this.lblSuik.InvokeRequired) { SetSuikCallback d = new SetSuikCallback(SetSelReport); this.Invoke(d, new object[] { }); } else { StockDB mSD = new StockDB(); lblSuik.Text = mSD.GetSuik().ToString() + " 원"; mSD = null; } }
private void SetSelReport() { if (this.dgReport.InvokeRequired) { SetReportSelCallback d = new SetReportSelCallback(SetSelReport); this.Invoke(d, new object[] { }); } else { StockDB mSD = new StockDB(); dgSellReport.DataSource = mSD.SelListSelPatternReport(); mSD = null; } }
private void SetMyList() { if (this.dgMyStock.InvokeRequired) { SetMyListCallback d = new SetMyListCallback(SetMyList); this.Invoke(d, new object[] { }); } else { StockDB mSD = new StockDB(); dgMyStock.DataSource = mSD.SelListMyStock(); mSD = 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; }
void ProcSupping() { while (C_IsRunning) { if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday || DateTime.Now.DayOfWeek == DayOfWeek.Sunday) { Write("토요일,일요일 작업중지"); Thread.Sleep(C_ThreadSleepTime); continue; } if (DateTime.Now.Day != C_ProcDay && (2 <= DateTime.Now.Hour && DateTime.Now.Hour <= 6)) { C_ProcDay = DateTime.Now.Day; return;//테스트용 KeyEnter(); Thread.Sleep(1000); Thread.Sleep(C_ThreadSleepTime); SetCursorPos(C_CursorX, C_CursorY); //거래비밀번호 입력처리 MoveMouse(POINT_PASSWORD_X, POINT_PASSWORD_Y); MouseLeftClick(); KeyWrite("0809"); StockDB mSD = new StockDB(); #region 매수할 종목 Write("매수 종목 검색"); C_BuyTb = mSD.SelListMustBuy(); for (int i = 0; i < C_BuyTb.Rows.Count; i++) { if (mSD.GetMyStock() >= 10) { break; } //내가 보유한종목이 10개 이상이면 매수 중단. int mIdx = Convert.ToInt32(C_BuyTb.Rows[i]["Index"].ToString()); string mStockCode = C_BuyTb.Rows[i]["Code"].ToString(); string mStockCost = C_BuyTb.Rows[i]["BuyCost"].ToString(); string mCount = C_BuyTb.Rows[i]["Count"].ToString(); //종목코드 입력 MoveMouse(POINT_STOCKCODE_X, POINT_STOCKCODDE_Y); MouseLeftClick(); KeyWrite(mStockCode); //라디오 매수 체크 MoveMouse(POINT_RDOBUY_X, POINT_RDOBUY_Y); MouseLeftClick(); //구매수량 입력 MoveMouse(POINT_BUYCOUNT_X, POINT_BUYCOUNT_Y); MouseLeftClick(); KeyWrite(mCount); //구매수량 입력 MoveMouse(POINT_BUYCOST_X, POINT_BUYCOST_Y); MouseLeftClick(); KeyWrite(mStockCost); //버튼클릭 MoveMouse(POINT_BUYBTN_X, POINT_BUYBTN_Y); MouseLeftClick(); Thread.Sleep(2000); KeyEnter(); Thread.Sleep(3000); mSD.UpdBuyComplete(mIdx); } #endregion #region 매도할 종목 Write("매도 종목 검색"); C_SellTb = mSD.SelListMustSell(); for (int i = 0; i < C_SellTb.Rows.Count; i++) { int mIdx = Convert.ToInt32(C_SellTb.Rows[i]["Index"].ToString()); string mStockCode = C_SellTb.Rows[i]["Code"].ToString(); string mStockCost = C_SellTb.Rows[i]["SellCost"].ToString(); string mCount = C_SellTb.Rows[i]["Count"].ToString(); //종목코드 입력 MoveMouse(POINT_STOCKCODE_X, POINT_STOCKCODDE_Y); MouseLeftClick(); KeyWrite(mStockCode); //라디오 매수 체크 MoveMouse(POINT_RDOSELL_X, POINT_RDOSELL_Y); MouseLeftClick(); //매도수량 입력 MoveMouse(POINT_BUYCOUNT_X, POINT_BUYCOUNT_Y); MouseLeftClick(); KeyWrite(mCount); //매도가격 입력 MoveMouse(POINT_BUYCOST_X, POINT_BUYCOST_Y); MouseLeftClick(); KeyWrite(mStockCost); //버튼클릭 MoveMouse(POINT_BUYBTN_X, POINT_BUYBTN_Y); MouseLeftClick(); Thread.Sleep(3000); KeyEnter(); Thread.Sleep(7000); mSD.UpdSellComplete(mIdx); } #endregion mSD = null; } else { Write("02시까지 대기중 : " + DateTime.Now.ToString()); KeyEnter(); Thread.Sleep(10000); //테스트용 SetCursorPos(C_CursorX, C_CursorY); Random random = new Random(); int mUp = random.Next(100, 1000); int mDn = random.Next(100, 1000); MoveMouse(mUp, mDn); mUp = random.Next(100, 1000); mDn = random.Next(100, 1000); MoveMouse(mUp, mDn); } } }