Exemplo n.º 1
0
        //매수할 목록 패턴검색후 매수처리
        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;
        }
Exemplo n.º 2
0
        //가지고 있는 종목 중 매도해야 하는 종목이 있는지 검색하여 매도예약 할 수있게 한다.
        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;

        }