using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient; using System.Collections; using System.Reflection; namespace upper_limit_crawler { //struct ITEM //{ // string m_strCode; // DateTime m_Time; // int m_iCurPrice; // int m_iAskCount; // int m_iBidCount; // int m_iStartPrice; // int m_iTradingVolume; // float m_fRatePerStart; //} public partial class MainForm : Form { ArrayList m_TraceList = new ArrayList(); Timer m_MainTimer = new Timer(); int m_iLastTime = 0; static ULDataMgr m_DataMgr = new ULDataMgr(); ULMonitor m_Monitor = new ULMonitor(m_DataMgr); ULWatch m_Watch = new ULWatch(m_DataMgr); ULDealing m_Dealing = new ULDealing(m_DataMgr); ULOwn m_Own = new ULOwn(m_DataMgr); ULBalanceDlg m_BalanceDlg = null; public MainForm() { InitializeComponent(); m_DataMgr.m_Setting.m_fSearchMin = float.Parse(tbSearchMin.Text); m_DataMgr.m_Setting.m_fSearchMax = float.Parse(tbSearchMax.Text); m_DataMgr.m_Setting.m_fBidMin = float.Parse(tbBidMin.Text); m_DataMgr.m_Setting.m_fBidMax = float.Parse(tbBidMax.Text); m_DataMgr.m_Setting.m_fBidAmount = float.Parse(tbBidAmount.Text); m_DataMgr.m_Setting.m_fTimeout = float.Parse(tbTimeout.Text); m_DataMgr.m_Setting.m_fTrailing = float.Parse(tbTrailing.Text); m_DataMgr.m_Setting.m_fLossCut = float.Parse(tbLossCut.Text); SetDoubleBuffered(lvWatch); m_Monitor.SetView(lvWatch); m_MainTimer.Interval = 10; m_MainTimer.Tick += Refresh; m_MainTimer.Start(); } public static void SetDoubleBuffered(Control control) { // set instance non-public property with name "DoubleBuffered" to true typeof(Control).InvokeMember("DoubleBuffered", BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.NonPublic, null, control, new object[] { true }); } private bool IsOnTime() { DateTime CurTime = DateTime.Now; if (CurTime.DayOfWeek == DayOfWeek.Sunday || CurTime.DayOfWeek == DayOfWeek.Saturday) return false; if (CurTime.Hour < 8 || CurTime.Hour > 15) return false; if (CurTime.Hour == 8 && CurTime.Minute < 50) return false; if (CurTime.Hour == 15 && CurTime.Minute > 15) return false; return true; } private void Refresh(object sender, EventArgs e) { //if(IsOnTime() == false) // return; int iCurTime = Environment.TickCount; int iDeltaT = iCurTime - m_iLastTime; m_Monitor.Refresh(iCurTime); m_Watch.Refresh(iCurTime); m_Dealing.Refresh(iCurTime); m_Own.Refresh(iCurTime); m_iLastTime = iCurTime; } private void AddTrace(string strCode) { if (m_TraceList.Contains(strCode) == true) return; m_TraceList.Add(strCode); } private void btApply_Click(object sender, EventArgs e) { try { m_DataMgr.m_Setting.m_fSearchMin = float.Parse(tbSearchMin.Text); m_DataMgr.m_Setting.m_fSearchMax = float.Parse(tbSearchMax.Text); m_DataMgr.m_Setting.m_fBidMin = float.Parse(tbBidMin.Text); m_DataMgr.m_Setting.m_fBidMax = float.Parse(tbBidMax.Text); m_DataMgr.m_Setting.m_fBidAmount = float.Parse(tbBidAmount.Text); m_DataMgr.m_Setting.m_fTimeout = float.Parse(tbTimeout.Text); m_DataMgr.m_Setting.m_fTrailing = float.Parse(tbTrailing.Text); m_DataMgr.m_Setting.m_fLossCut = float.Parse(tbLossCut.Text); } catch(Exception ex) { UlUtil.Trace(ex.ToString()); } } private void btCancel_Click(object sender, EventArgs e) { tbSearchMin.Text = m_DataMgr.m_Setting.m_fSearchMin.ToString("0.0"); tbSearchMax.Text = m_DataMgr.m_Setting.m_fSearchMax.ToString("0.0"); tbBidMin.Text = m_DataMgr.m_Setting.m_fBidMin.ToString("0.0"); tbBidMax.Text = m_DataMgr.m_Setting.m_fBidMax.ToString("0.0"); tbBidAmount.Text = m_DataMgr.m_Setting.m_fBidAmount.ToString("###,###,###,###,###"); tbTimeout.Text = m_DataMgr.m_Setting.m_fTimeout.ToString("0.###"); tbTrailing.Text = m_DataMgr.m_Setting.m_fTrailing.ToString("0.0"); tbLossCut.Text = m_DataMgr.m_Setting.m_fLossCut.ToString("0.0"); } private void btBalance_Click(object sender, EventArgs e) { if (m_BalanceDlg == null) m_BalanceDlg = new ULBalanceDlg(m_DataMgr); m_BalanceDlg.Show(); } } }