Esempio n. 1
0
        void myTimer_OnTick(object state)
        {
            try
            {
                //if (isTimerProcess)
                //{
                myTimer.Stop();

                //if (!myXASessionClass.IsConnected())
                //{
                //    LogWrite(LogType.INFORMATION, "서버 Disconnected");
                //    myXASessionClass.DisconnectServer();
                //    AutoLogIn_Exec();

                //    //for (int i = 0; i < 3000; i++)
                //    //    Thread.Sleep(1);
                //}
                //else
                //    //LogWrite(LogType.INFORMATION, "서버 Connected");

                if (DateTime.Now.DayOfWeek == DayOfWeek.Saturday ||
                    DateTime.Now.DayOfWeek == DayOfWeek.Sunday)
                {
                    myTimer.Start();
                    return;
                }

                DateTime sDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 9, 0, 0);
                DateTime eDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 15, 30, 0);

                DateTime EndMarketSDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 15, 10, 0);
                DateTime EndMarketEDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 15, 30, 0);

                if ((DateTime.Now >= sDate && DateTime.Now < eDate) ||
                    (DateTime.Now >= EndMarketSDate && DateTime.Now < EndMarketEDate)
                    )
                {
                    SqlDal  sd         = new SqlDal(ConnectionString);
                    DataSet dsSellItem = sd.GetSellItem();

                    if (dsSellItem != null && dsSellItem.Tables.Count > 0 && dsSellItem.Tables[0].Rows.Count > 0)
                    {
                        //foreach (DataRow dr in dsBuyItem.Tables[0].Rows)
                        //{
                        //Thread t = new Thread(OrderAction);
                        //t.Start(dr);
                        SellAction(dsSellItem.Tables[0].Rows[0]);
                        //}
                    }
                    else //if (DateTime.Now <= sd.GetBuyLimitTime())
                    {
                        DataSet dsBuyItem = sd.GetBuyItem();

                        if (dsBuyItem != null && dsBuyItem.Tables.Count > 0 && dsBuyItem.Tables[0].Rows.Count > 0)
                        {
                            if (dsBuyItem.Tables[0].Rows[0]["buy_method"].ToString().ToUpper().StartsWith("BUY"))
                            {
                                if (sd.isOverTotalEarningRate())
                                {
                                    LogWrite(LogType.INFORMATION, string.Format("전체 목표수익율 달성으로 가상주문 : {0} ", dsBuyItem.Tables[0].Rows[0]["STOCKCODE"].ToString()));
                                    OrderActionVirtual(dsBuyItem.Tables[0].Rows[0]);
                                    myTimer.Start();
                                    return;
                                }

                                if (sd.isOverStockEarningRate(dsBuyItem.Tables[0].Rows[0]["STOCKCODE"].ToString()))
                                {
                                    LogWrite(LogType.INFORMATION, string.Format("개별종목 목표수익율 달성으로 가상주문 : {0} ", dsBuyItem.Tables[0].Rows[0]["STOCKCODE"].ToString()));
                                    OrderActionVirtual(dsBuyItem.Tables[0].Rows[0]);
                                    myTimer.Start();
                                    return;
                                }

                                if (sd.GetHasTodayFailHistoryInSomeMin(dsBuyItem.Tables[0].Rows[0]["STOCKCODE"].ToString(), dsBuyItem.Tables[0].Rows[0]["buy_method"].ToString()))
                                {
                                    LogWrite(LogType.INFORMATION, string.Format("개별종목 동일매수조건으로 5분내 Fail 이력존재 가상주문 : {0} ", dsBuyItem.Tables[0].Rows[0]["STOCKCODE"].ToString()));
                                    OrderActionVirtual(dsBuyItem.Tables[0].Rows[0]);
                                    myTimer.Start();
                                    return;
                                }
                            }

                            if (sd.GetIsSideCar() == true)
                            {
                                LogWrite(LogType.WARNING, "자체 SIDE CAR 발동");
                                OrderActionVirtual(dsBuyItem.Tables[0].Rows[0]);
                                myTimer.Start();
                                return;
                            }

                            if (sd.GetIsSideCar2() == true)
                            {
                                LogWrite(LogType.WARNING, "자체 SIDE CAR - 2 발동");
                                OrderActionVirtual(dsBuyItem.Tables[0].Rows[0]);
                                myTimer.Start();
                                return;
                            }

                            if (sd.isDayBottom(dsBuyItem.Tables[0].Rows[0]["STOCKCODE"].ToString()) == true)
                            {
                                LogWrite(LogType.WARNING, "하한가 종목 매수 금지");
                                OrderActionVirtual(dsBuyItem.Tables[0].Rows[0]);
                                myTimer.Start();
                                return;
                            }

                            if (sd.isGoodStockStatus(dsBuyItem.Tables[0].Rows[0]["STOCKCODE"].ToString()) == false)
                            {
                                LogWrite(LogType.WARNING, "종목상태 불량(CB,관리종목,투자경고,거래정지,불성실공시)");
                                OrderActionVirtual(dsBuyItem.Tables[0].Rows[0]);
                                myTimer.Start();
                                return;
                            }

                            if (sd.isTradingToday(dsBuyItem.Tables[0].Rows[0]["STOCKCODE"].ToString()) == false)
                            {
                                LogWrite(LogType.WARNING, "당일 거래이력 없음");
                                OrderActionVirtual(dsBuyItem.Tables[0].Rows[0]);
                                myTimer.Start();
                                return;
                            }


                            OrderAction(dsBuyItem.Tables[0].Rows[0]);

                            //}
                        }
                    }
                }
                //}
            }
            catch (Exception e)
            {
                EventLog.WriteEntry("OrderForm-myTimer_OnTick", e.ToString());
            }

            myTimer.Start();
        }