コード例 #1
0
        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;
            }
        }
コード例 #2
0
        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;
        }
コード例 #3
0
        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;
        }
コード例 #4
0
        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;
        }
コード例 #5
0
 public abstract void InitDayData(Define.TTdxDllShareData data);
コード例 #6
0
 public abstract void UpdateCurrentDayNode(Define.TTdxDllShareData data);
コード例 #7
0
 public abstract void UpdateFiveMinsLine(Define.TTdxDllShareData data);
コード例 #8
0
ファイル: StockForm.cs プロジェクト: inksmallfrog/CSStock
        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);
        }