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