Example #1
0
        public static bool LoadFileFormatForMetaStock(string stockName, string stockSymbol, string strFilePath, ref StockInfo stockInfo)
        {
            MSFL.MSFLSecurityInfo[] msflSecurityInfoArray = null;
            if (GlobalSetting.TryLoadMsflSecurityInfo(strFilePath, out msflSecurityInfoArray) == false)
            {
                return(false);
            }

            int           iErr       = (int)MSFL.MSFL_ERR.MSFL_NO_ERR;
            StringBuilder dateString = new StringBuilder(MSFL.MSFL_MAX_NAME_LENGTH + 1);

            for (int iIndex = 0; iIndex < msflSecurityInfoArray.Length; iIndex++)
            {
                MSFL.MSFLSecurityInfo msflSecurityInfo = msflSecurityInfoArray[iIndex];

                if (msflSecurityInfo.szName == stockName && msflSecurityInfo.szSymbol == stockSymbol)
                {
                    stockInfo.m_StockCode = GlobalSetting.GetStockCode(msflSecurityInfo.szName, msflSecurityInfo.szSymbol);

                    stockInfo.m_StockName   = msflSecurityInfo.szName;
                    stockInfo.m_StockSymbol = msflSecurityInfo.szSymbol;

                    stockInfo.m_Periodicity = msflSecurityInfo.cPeriodicity;

                    iErr = MSFL.MSFL1_FormatDate(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lFirstDate);
                    stockInfo.m_FirstDate = DateTime.Parse(dateString.ToString());

                    iErr = MSFL.MSFL1_FormatDate(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lLastDate);
                    stockInfo.m_LastDate = DateTime.Parse(dateString.ToString());

                    iErr = MSFL.MSFL1_FormatTime(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lFirstTime, true);
                    string strFirstTime = dateString.ToString();
                    strFirstTime          = strFirstTime.Substring(0, strFirstTime.Length - 1);
                    stockInfo.m_FirstTime = DateTime.Parse(strFirstTime);

                    iErr = MSFL.MSFL1_FormatTime(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lLastTime, true);
                    string strLastTime = dateString.ToString();
                    strLastTime          = strLastTime.Substring(0, strLastTime.Length - 1);
                    stockInfo.m_LastTime = DateTime.Parse(strLastTime);

                    iErr = MSFL.MSFL1_FormatTime(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lStartTime, false);
                    stockInfo.m_StartTime = DateTime.Parse(dateString.ToString());

                    iErr = MSFL.MSFL1_FormatTime(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lEndTime, false);
                    stockInfo.m_EndTime = DateTime.Parse(dateString.ToString());

                    iErr = MSFL.MSFL1_FormatDate(dateString, (ushort)dateString.Capacity, msflSecurityInfo.lCollectionDate);
                    stockInfo.m_CollectionDate = DateTime.Parse(dateString.ToString());


                    MSFL.MSFLPriceRecord[] msflPriceInfoArray = null;
                    if (GlobalSetting.TryLoadMsflPriceInfo(stockName, stockSymbol, strFilePath, out msflPriceInfoArray) == false)
                    {
                        return(true);
                    }

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

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

                        StockData stockData = new StockData();

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_DATE) == MSFL.MSFL_DATA_DATE)
                        {
                            iErr = MSFL.MSFL1_FormatDate(szBuf, (ushort)szBuf.Capacity, msflPriceRecord.lDate);
                            stockData.TradingDate = DateTime.Parse(szBuf.ToString());
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_TIME) == MSFL.MSFL_DATA_TIME)
                        {
                            iErr = MSFL.MSFL1_FormatTime(szBuf, (ushort)szBuf.Capacity, msflPriceRecord.lTime, true);
                            string strTradingTime = szBuf.ToString();
                            strTradingTime        = strLastTime.Substring(0, strTradingTime.Length - 1);
                            stockData.TradingTime = DateTime.Parse(strTradingTime);
                        }

                        stockData.TradingDateTime = stockData.TradingDate + stockData.TradingTime.TimeOfDay;
                        //Debug.WriteLine( stockData.TradingDateTime.ToString() );

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_OPEN) == MSFL.MSFL_DATA_OPEN)
                        {
                            fOpenSum           += msflPriceRecord.fOpen;
                            stockData.OpenPrice = msflPriceRecord.fOpen;
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_HIGH) == MSFL.MSFL_DATA_HIGH)
                        {
                            fHighSum += msflPriceRecord.fHigh;
                            stockData.HighestPrice = msflPriceRecord.fHigh;
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_LOW) == MSFL.MSFL_DATA_LOW)
                        {
                            fLowSum += msflPriceRecord.fLow;
                            stockData.MinimumPrice = msflPriceRecord.fLow;
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_CLOSE) == MSFL.MSFL_DATA_CLOSE)
                        {
                            fCloseSum           += msflPriceRecord.fClose;
                            stockData.ClosePrice = msflPriceRecord.fClose;
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_VOLUME) == MSFL.MSFL_DATA_VOLUME)
                        {
                            fVolumeSum += msflPriceRecord.fVolume;
                            stockData.TradingVolume = msflPriceRecord.fVolume;
                        }

                        if ((msflPriceRecord.wDataAvailable & MSFL.MSFL_DATA_OPENINT) == MSFL.MSFL_DATA_OPENINT)
                        {
                            fOpenIntSum           += msflPriceRecord.fOpenInt;
                            stockData.OpenInterest = msflPriceRecord.fOpenInt;
                        }

                        stockInfo.AddStockData(stockData);
                    }

                    return(true);
                }
            }

            return(false);
        }