Exemplo n.º 1
0
        private void ListViewSecurity_SelectedIndexChanged(object sender, EventArgs e)
        {
            Point        cursorPoint  = this.ListViewSecurity.PointToClient(Cursor.Position);
            ListViewItem listViewItem = this.ListViewSecurity.GetItemAt(cursorPoint.X, cursorPoint.Y);

            if (listViewItem == null)
            {
                return;
            }
            else
            {
                this.ListViewPrice.VirtualListSize = 0;
                this.ListViewPrice.Items.Clear();
            }

            IntPtr hSecurity = IntPtr.Zero;

            if (m_SecurityDictionary.TryGetValue(listViewItem, out hSecurity) == false)
            {
                return;
            }

            int iErr = MSFL.MSFL1_LockSecurity(hSecurity, MSFL.MSFL_LOCK_PREV_WRITE_LOCK);

            if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR)
            {
                return;
            }

            ushort wPriceRecCount = 0;

            iErr = MSFL.MSFL1_GetDataRecordCount(hSecurity, ref wPriceRecCount);
            if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR)
            {
                return;
            }

            if (wPriceRecCount > 0)
            {
                iErr = MSFL.MSFL1_SeekBeginData(hSecurity);
                if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR)
                {
                    return;
                }

                MSFL.DateTime          sDateTime = new MSFL.DateTime();
                MSFL.MSFLPriceRecord[] pPriceRec = new MSFL.MSFLPriceRecord[wPriceRecCount];

                iErr = MSFL.MSFL2_ReadMultipleRecs(hSecurity, pPriceRec, ref sDateTime, ref wPriceRecCount, (int)MSFL.MSFL_FIND.MSFL_FIND_USE_CURRENT_POS);
                if (iErr != (int)MSFL.MSFL_ERR.MSFL_NO_ERR)
                {
                    return;
                }

                // Unlock the security (we're done using it)
                iErr = MSFL.MSFL1_UnlockSecurity(hSecurity);

                // numbers for summing price info
                float fOpenSum = 0.0f, fHighSum = 0.0f, fLowSum = 0.0f, fCloseSum = 0.0f, fVolumeSum = 0.0f, fOpenIntSum = 0.0f;

                List <ListViewItem> listViewItemList = new List <ListViewItem>(2048);

                StringBuilder szBuf = new StringBuilder(MSFL.MSFL_MAX_NAME_LENGTH + 1);
                for (int iIndex = 0; iIndex < pPriceRec.Length; iIndex++)
                {
                    MSFL.MSFLPriceRecord msflPriceRecord = pPriceRec[iIndex];

                    listViewItem = new ListViewItem();
                    if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_DATE) == MSFL.MSFL_DATA_DATE)
                    {
                        MSFL.MSFL1_FormatDate(szBuf, (ushort)szBuf.Capacity, msflPriceRecord.lDate);
                        listViewItem.Text = szBuf.ToString();
                    }
                    else
                    {
                        listViewItem.Text = "N/A";
                    }

                    ListViewItem.ListViewSubItem subListViewItem1 = new ListViewItem.ListViewSubItem();
                    if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_TIME) == MSFL.MSFL_DATA_TIME)
                    {
                        MSFL.MSFL1_FormatTime(szBuf, (ushort)szBuf.Capacity, msflPriceRecord.lTime, true);
                        subListViewItem1.Text = szBuf.ToString();
                    }
                    else
                    {
                        subListViewItem1.Text = "N/A";
                    }

                    ListViewItem.ListViewSubItem subListViewItem2 = new ListViewItem.ListViewSubItem();
                    if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_OPEN) == MSFL.MSFL_DATA_OPEN)
                    {
                        fOpenSum += msflPriceRecord.fOpen;
                        subListViewItem2.Text = msflPriceRecord.fOpen.ToString("0.00", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        subListViewItem2.Text = "N/A";
                    }

                    ListViewItem.ListViewSubItem subListViewItem3 = new ListViewItem.ListViewSubItem();
                    if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_HIGH) == MSFL.MSFL_DATA_HIGH)
                    {
                        fHighSum += msflPriceRecord.fHigh;
                        subListViewItem3.Text = msflPriceRecord.fHigh.ToString("0.00", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        subListViewItem3.Text = "N/A";
                    }

                    ListViewItem.ListViewSubItem subListViewItem4 = new ListViewItem.ListViewSubItem();
                    if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_LOW) == MSFL.MSFL_DATA_LOW)
                    {
                        fLowSum += msflPriceRecord.fLow;
                        subListViewItem4.Text = msflPriceRecord.fLow.ToString("0.00", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        subListViewItem4.Text = "N/A";
                    }

                    ListViewItem.ListViewSubItem subListViewItem5 = new ListViewItem.ListViewSubItem();
                    if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_CLOSE) == MSFL.MSFL_DATA_CLOSE)
                    {
                        fCloseSum            += msflPriceRecord.fClose;
                        subListViewItem5.Text = msflPriceRecord.fClose.ToString("0.00", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        subListViewItem5.Text = "N/A";
                    }

                    ListViewItem.ListViewSubItem subListViewItem6 = new ListViewItem.ListViewSubItem();
                    if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_VOLUME) == MSFL.MSFL_DATA_VOLUME)
                    {
                        fVolumeSum           += msflPriceRecord.fVolume;
                        subListViewItem6.Text = msflPriceRecord.fVolume.ToString("0.", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        subListViewItem6.Text = "N/A";
                    }

                    ListViewItem.ListViewSubItem subListViewItem7 = new ListViewItem.ListViewSubItem();
                    if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_OPENINT) == MSFL.MSFL_DATA_OPENINT)
                    {
                        fOpenIntSum          += msflPriceRecord.fOpenInt;
                        subListViewItem7.Text = msflPriceRecord.fOpenInt.ToString("0.00", CultureInfo.InvariantCulture);
                    }
                    else
                    {
                        subListViewItem7.Text = "N/A";
                    }

                    listViewItem.SubItems.Add(subListViewItem1);
                    listViewItem.SubItems.Add(subListViewItem2);
                    listViewItem.SubItems.Add(subListViewItem3);
                    listViewItem.SubItems.Add(subListViewItem4);
                    listViewItem.SubItems.Add(subListViewItem5);
                    listViewItem.SubItems.Add(subListViewItem6);
                    listViewItem.SubItems.Add(subListViewItem7);

                    //this.ListViewPrice.Items.Add( listViewItem );
                    listViewItemList.Add(listViewItem);
                }

                m_PriceArray = listViewItemList.ToArray();
                this.ListViewPrice.VirtualListSize = m_PriceArray.Length;
            }
        }
Exemplo n.º 2
0
        private void FillData()
        {
            StringBuilder szBuf = new StringBuilder(MSFL.MSFL_MAX_NAME_LENGTH + 1);

            // The number of days for stock data
            int period = m_PriceRecordArray.Length > 60 ? 60 : m_PriceRecordArray.Length;

            // numbers for summing price info
            double fHigh = 0.0f, fLow = 0.0f;
            double fVolumeHigh = 0.0f, fVolumeLow = 0.0f;

            for (int iIndex = 0; iIndex < period; iIndex++)
            {
                MSFL.MSFLPriceRecord msflPriceRecord = m_PriceRecordArray[iIndex];

                // The first High value
                double high = Math.Round(msflPriceRecord.fHigh, 2);
                if (high > fHigh)
                {
                    fHigh = high;
                }

                // The first Close value
                double close = Math.Round(msflPriceRecord.fClose, 2);

                // The first Low value
                double low = Math.Round(msflPriceRecord.fLow, 2);
                if (fLow == 0.0f)
                {
                    fLow = low;
                }
                else if (low < fLow)
                {
                    fLow = low;
                }

                // The first Open value
                double open = Math.Round(msflPriceRecord.fOpen, 2);

                // The first Volume value
                double volume = Math.Truncate(msflPriceRecord.fVolume);
                if (volume > fVolumeHigh)
                {
                    fVolumeHigh = volume;
                }

                if (volume == 0.0f)
                {
                    fVolumeLow = volume;
                }
                else if (volume < fVolumeLow)
                {
                    fVolumeLow = volume;
                }

                // Set data points values
                MSFL.MSFL1_FormatDate(szBuf, (ushort)szBuf.Capacity, msflPriceRecord.lDate);
                DateTime dateTime = DateTime.Parse(szBuf.ToString());

                chart1.Series["PriceSeries"].Points.AddXY(dateTime, high);
                //chart1.Series["PriceSeries"].Points[iIndex].XValue = dateTime;

                if ((iIndex % 7) == 0)
                {
                    chart1.Series["CurveAtPriceSeries"].Points.AddXY(dateTime, high);
                }

                double isUpOrDown = open <= close ? UP : DOWN;

                chart1.Series["PriceSeries"].Points[iIndex].YValues[1] = low;
                chart1.Series["PriceSeries"].Points[iIndex].YValues[2] = isUpOrDown == UP ? open : close; // open
                chart1.Series["PriceSeries"].Points[iIndex].YValues[3] = isUpOrDown == UP ? close : open; // close

                //chart1.Series["PriceSeries"].Points[iIndex].YValues[4] = isUpOrDown;

                if (isUpOrDown == UP)
                {
                    chart1.Series["PriceSeries"].Points[iIndex].Color = Color.Green;
                    chart1.Series["PriceSeries"].Points[iIndex].BackGradientEndColor = Color.White;
                    chart1.Series["PriceSeries"].Points[iIndex].BackGradientType     = GradientType.VerticalCenter;

                    chart1.Series["PriceSeries"].Points[iIndex].BorderWidth = 1;
                    chart1.Series["PriceSeries"].Points[iIndex].BorderColor = Color.Green;
                    chart1.Series["PriceSeries"].Points[iIndex].BorderStyle = ChartDashStyle.Solid;
                }
                else
                {
                    chart1.Series["PriceSeries"].Points[iIndex].Color = Color.Red;
                    chart1.Series["PriceSeries"].Points[iIndex].BackGradientEndColor = Color.White;
                    chart1.Series["PriceSeries"].Points[iIndex].BackGradientType     = GradientType.VerticalCenter;

                    chart1.Series["PriceSeries"].Points[iIndex].BorderWidth = 1;
                    chart1.Series["PriceSeries"].Points[iIndex].BorderColor = Color.Red;
                    chart1.Series["PriceSeries"].Points[iIndex].BorderStyle = ChartDashStyle.Solid;
                }

                // Set volume values
                chart1.Series["VolumeSeries"].Points.AddXY(dateTime, volume);

                if (isUpOrDown == UP)
                {
                    chart1.Series["VolumeSeries"].Points[iIndex].Color = Color.Green;
                    chart1.Series["VolumeSeries"].Points[iIndex].BackGradientEndColor = Color.White;
                    chart1.Series["VolumeSeries"].Points[iIndex].BackGradientType     = GradientType.VerticalCenter;

                    chart1.Series["VolumeSeries"].Points[iIndex].BorderColor = Color.Green;
                }
                else
                {
                    chart1.Series["VolumeSeries"].Points[iIndex].Color = Color.Red;
                    chart1.Series["VolumeSeries"].Points[iIndex].BackGradientEndColor = Color.White;
                    chart1.Series["VolumeSeries"].Points[iIndex].BackGradientType     = GradientType.VerticalCenter;

                    chart1.Series["VolumeSeries"].Points[iIndex].BorderColor = Color.Red;
                }
            }


            double fSun = fHigh - fLow;

            chart1.ChartAreas["PriceArea"].AxisY.Interval = fSun / 10;

            //fSun = fVolumeHigh - fVolumeLow;
            //chart1.ChartAreas["VolumeArea"].AxisY2.Interval = Math.Truncate( fSun ) / 5;
        }