public override void UpdateFiveMinsLine(Define.TTdxDllShareData data) { if (data.count > dealtMinsData) { Define.TTDX_MIN minsData = new Define.TTDX_MIN(); int pos = (data.count - 1) * Marshal.SizeOf(minsData); minsData = (Define.TTDX_MIN)Utility.BytesToStuct(data.buf, minsData.GetType(), pos); currentMinsNode.volumn += minsData.Volume; if (data.count % 5 == 0) { float lastClose = currentMinsNode.close; WriteToFiveMinsLine(currentMinsNode); currentMinsNode = new StockNode(); currentMinsNode.time = DateTime.Now.ToString("yyyyMMddhhmm"); currentMinsNode.open = lastClose; currentMinsNode.high = lastClose; currentMinsNode.low = lastClose; currentMinsNode.close = lastClose; currentMinsNode.high = Math.Max(currentMinsNode.high, minsData.Close); currentMinsNode.low = Math.Min(currentMinsNode.low, minsData.Close); currentMinsNode.close = minsData.Close; } ++dealtMinsData; } }
public override void UpdateCurrentDayNode(Define.TTdxDllShareData data) { Define.TTDX_PKBASE pkData = new Define.TTDX_PKBASE(); pkData = (Define.TTDX_PKBASE)Utility.BytesToStuct(data.buf, pkData.GetType(), 0); currentDayNode.time = DateTime.Now.ToString("yyyyMMddhhmm"); currentDayNode.open = pkData.Open; currentDayNode.close = pkData.Close; currentDayNode.high = pkData.High; currentDayNode.low = pkData.Low; currentDayNode.volumn = pkData.Volume; currentMinsNode.high = Math.Max(currentMinsNode.high, pkData.Close); currentMinsNode.low = Math.Min(currentMinsNode.low, pkData.Close); currentMinsNode.close = pkData.Close; currentMinsNode.volumn += pkData.LastVolume; lastDealTime = (int)pkData.LastDealTime; }
public override void InitDayData(Define.TTdxDllShareData data) { Define.TTDX_DAYInfo dayInfo = new Define.TTDX_DAYInfo(); for (int pos = 0, readData = 0; readData < data.count; pos += Marshal.SizeOf(dayInfo), ++readData) { dayInfo = (Define.TTDX_DAYInfo)Utility.BytesToStuct(data.buf, dayInfo.GetType(), pos); StockNode node = new StockNode(); node.time = dayInfo.DAY.ToString(); node.open = dayInfo.Open; node.close = dayInfo.Close; node.low = dayInfo.Low; node.high = dayInfo.High; node.volumn = dayInfo.Volume; WriteToDayLine(node); } dayInit = true; }
public override void InitMinsData(Define.TTdxDllShareData data) { Define.TTDX_MIN minsData = new Define.TTDX_MIN(); float lastClose = CurrentDayNode.open; int count = data.count - data.count % 5; int pos = 0; for (; dealtMinsData < count;) { StockNode node = new StockNode(); node.open = lastClose; node.high = lastClose; node.low = lastClose; node.volumn = 0; if (dealtMinsData < 120) { node.time = string.Format(DateTime.Now.ToString("yyyyMMdd") + "{0:D2}{1:D2}", (dealtMinsData + 30) / 60 + 9, (dealtMinsData + 30) % 60); } else { node.time = string.Format(DateTime.Now.ToString("yyyyMMdd") + "{0:D2}{1:D2}", (dealtMinsData - 120) / 60 + 13, dealtMinsData % 60); } for (int i = 0; i < 5 && dealtMinsData < count; ++i) { minsData = (Define.TTDX_MIN)Utility.BytesToStuct(data.buf, minsData.GetType(), pos); if (4 == i) { node.close = minsData.Close; lastClose = node.close; } node.high = Math.Max(node.high, minsData.Close); node.low = Math.Min(node.low, minsData.Close); node.volumn += minsData.Volume; ++dealtMinsData; pos += Marshal.SizeOf(minsData); } WriteToFiveMinsLine(node); } currentMinsNode.open = lastClose; currentMinsNode.high = lastClose; currentMinsNode.low = lastClose; currentMinsNode.close = lastClose; currentMinsNode.volumn = 0; if (dealtMinsData < 120) { currentMinsNode.time = string.Format(DateTime.Now.ToString("yyyyMMdd") + "{0:D2}{1:D2}", (dealtMinsData + 30) / 60 + 9, (dealtMinsData + 30) % 60); } else { currentMinsNode.time = string.Format(DateTime.Now.ToString("yyyyMMdd") + "{0:D2}{1:D2}", (dealtMinsData - 120) / 60 + 13, dealtMinsData % 60); } for (int i = 0; i < data.count % 5; ++i) { minsData = (Define.TTDX_MIN)Utility.BytesToStuct(data.buf, minsData.GetType(), pos); if ((data.count % 5) - 1 == i) { currentMinsNode.close = minsData.Close; } currentMinsNode.high = Math.Max(currentMinsNode.high, minsData.Close); currentMinsNode.low = Math.Min(currentMinsNode.low, minsData.Close); currentMinsNode.volumn += minsData.Volume; ++dealtMinsData; pos += Marshal.SizeOf(minsData); } fiveMinsInit = true; }
public abstract void InitDayData(Define.TTdxDllShareData data);
public abstract void UpdateCurrentDayNode(Define.TTdxDllShareData data);
public abstract void UpdateFiveMinsLine(Define.TTdxDllShareData data);
protected override void WndProc(ref Message m) { if (m.Msg == Define.WM_TDX_DEPACKDATA - 1) { if (4 == m.WParam.ToInt32()) { } } if (m.Msg == Define.WM_TDX_DEPACKDATA) { if (m.WParam.ToInt32() == Define.TDX_MSG_GETPK) { Define.TTdxDllShareData data = new Define.TTdxDllShareData(); data = (Define.TTdxDllShareData)m.GetLParam(data.GetType()); stock.UpdateCurrentDayNode(data); if (lineType == "日线") { UpdateOneDataToGraph(stock.CurrentDayNode); this.chartGraph1.RefreshGraph(); } System.Timers.Timer updatePkTimer = new System.Timers.Timer(); updatePkTimer.Enabled = true; updatePkTimer.Interval = 2000; updatePkTimer.Start(); updatePkTimer.Elapsed += new System.Timers.ElapsedEventHandler(UpdatePk); } else if (m.WParam.ToInt32() == Define.TDX_MSG_TESTREALPK) { Define.TTdxDllShareData data = new Define.TTdxDllShareData(); data = (Define.TTdxDllShareData)m.GetLParam(data.GetType()); stock.UpdateCurrentDayNode(data); if (lineType == "日线") { UpdateOneDataToGraph(stock.CurrentDayNode); this.chartGraph1.RefreshGraph(); } if (updatePkTimer == null) { updatePkTimer = new System.Timers.Timer(); updatePkTimer.Enabled = true; updatePkTimer.Interval = 2000; updatePkTimer.Start(); updatePkTimer.Elapsed += new System.Timers.ElapsedEventHandler(UpdatePk); } } else if (m.WParam.ToInt32() == Define.TDX_MSG_GET_K_DAY) { Define.TTdxDllShareData data = new Define.TTdxDllShareData(); data = (Define.TTdxDllShareData)m.GetLParam(data.GetType()); if (!stock.DayInit) { stock.InitDayData(data); } if (lineType == "日线") { UpdateDataToGraph(stock.DayLine); this.chartGraph1.RefreshGraph(); } } else if (m.WParam.ToInt32() == Define.TDX_MSG_GET_MINS) { Define.TTdxDllShareData data = new Define.TTdxDllShareData(); data = (Define.TTdxDllShareData)m.GetLParam(data.GetType()); if (!stock.FiveMinsInit) { stock.InitMinsData(data); if (lineType == "5分钟") { UpdateDataToGraph(stock.FiveMinsLine); this.chartGraph1.RefreshGraph(); } } else { stock.UpdateFiveMinsLine(data); if (lineType == "5分钟") { UpdateOneDataToGraph(stock.CurrentMinsNode); this.chartGraph1.RefreshGraph(); } } if (updateFiveMinsTimer == null) { updateFiveMinsTimer = new System.Timers.Timer(); updateFiveMinsTimer.Enabled = true; updateFiveMinsTimer.Interval = 10000; updateFiveMinsTimer.Start(); updateFiveMinsTimer.Elapsed += new System.Timers.ElapsedEventHandler(UpdateFiveMinsLine); } } } base.WndProc(ref m); }