/// <summary> /// /// </summary> /// <param name="stockInfo"></param> public void AddStockInfo( StockInfo stockInfo ) { StockInfo outStockInfo = null; if ( m_StockInfoByCode.TryGetValue( stockInfo.StockCode, out outStockInfo ) == true ) return; m_StockInfoByCode.Add( stockInfo.StockCode, stockInfo ); // m_StockInfoArray.Add( stockInfo ); }
public static bool LoadGlobalSetting() { PlateInfo[] plateInfos = LoadConfigSetting( GlobalSetting.ConfigFilePath ); if ( plateInfos == null ) return false; if ( LoadingGlobalSetting != null ) LoadingGlobalSetting( null, EventArgs.Empty ); s_SecurityDictionary.Clear(); s_PriceDictionary.Clear(); GlobalStockManager.Clear(); s_PlateInfos = plateInfos; for ( int iIndex = 0; iIndex < s_PlateInfos.Length; iIndex++ ) { PlateInfo plateInfo = s_PlateInfos[iIndex]; for ( int iIndex2 = 0; iIndex2 < plateInfo.VarietyInfos.Length; iIndex2++ ) { VarietyInfo varietyInfo = plateInfo.VarietyInfos[iIndex2]; StockManager stockManager = new StockManager(); stockManager.StockPlate = plateInfo.Name; stockManager.StockVariety = varietyInfo.Name; for ( int iIndex3 = 0; iIndex3 < varietyInfo.FileInfos.Length; iIndex3++ ) { FileInfo FileInfo = varietyInfo.FileInfos[iIndex3]; StockInfo stockInfo = new StockInfo(); if ( StockInfo.LoadFileFormatForMetaStock( FileInfo.StockName, FileInfo.StockSymbol, FileInfo.FilePath, ref stockInfo ) == true ) stockManager.AddStockInfo( stockInfo ); } GlobalStockManager.AddStockManager( stockManager ); } } s_IsLoadGlobalSetting = true; if ( LoadedGlobalSetting != null ) LoadedGlobalSetting( null, EventArgs.Empty ); return true; }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void ButtonFile_Click( object sender, EventArgs e ) { char[] codeArray = this.RichTextBoxCode.Text.ToCharArray(); char[] nameArray = this.RichTextBoxName.Text.ToCharArray(); for ( int iIndex = 0; iIndex < m_RandomFileCount; iIndex++ ) { StockInfo stockInfo = new StockInfo(); StringBuilder strCode = new StringBuilder(); for ( int i = 0; i < 6; i++ ) strCode.Append( RandomEx.RandomArray( codeArray ) ); StringBuilder strName = new StringBuilder(); for ( int i = 0; i < 10; i++ ) strName.Append( RandomEx.RandomArray( nameArray ) ); //stockInfo.StockCode = strCode.ToString(); //stockInfo.StockName = strName.ToString(); DateTime[] allTradingTime = this.GetAllTradingTime(); for ( int iIndex2 = 0; iIndex2 < allTradingTime.Length; iIndex2++ ) { StockData stockData = new StockData(); stockData.TradingTime = allTradingTime[iIndex2]; stockData.OpenPrice = this.GetRandomOpenPrice(); stockData.ClosePrice = this.GetRandomClosePrice(); stockData.HighestPrice = this.GetRandomHighestPrice(); stockData.MinimumPrice = this.GetRandomMinimumPrice( (uint)stockData.HighestPrice ); stockData.TradingVolume = this.GetRandomDailyTurnover(); stockData.OpenInterest = this.GetRandomDailyAmount(); //stockInfo.AddStockData( stockData ); } StockInfo.SaveFileFormatForDStock( this.TextBoxFolder.Text + "\\" + stockInfo.StockCode + ".DStock", stockInfo ); } }
public static void SaveFileFormatForDStock( string strFile, StockInfo stockInfo ) { /* FileStream fileStream = File.Open( strFile, FileMode.CreateNew ); byte[] fileSignNone = Encoding.ASCII.GetBytes( "123456" ); fileStream.Write( fileSignNone, 0, fileSignNone.Length ); fileStream.WriteByte( (byte)stockInfo.StockInfoVer ); byte[] byteStockCode = ConvertByteArray.ToByteArray( stockInfo.StockCode ); byte[] byteStockCodeSize = ConvertByteArray.ToByteArray( byteStockCode.Length ); fileStream.Write( byteStockCodeSize, 0, byteStockCodeSize.Length ); fileStream.Write( byteStockCode, 0, byteStockCode.Length ); Debug.WriteLine( stockInfo.StockCode ); byte[] byteStockName = ConvertByteArray.ToByteArray( stockInfo.StockName ); byte[] byteStockNameSize = ConvertByteArray.ToByteArray( byteStockName.Length ); fileStream.Write( byteStockNameSize, 0, byteStockNameSize.Length ); fileStream.Write( byteStockName, 0, byteStockName.Length ); Debug.WriteLine( stockInfo.StockName ); uint uiStockDataCount = 0; long lStockDataCountPosition = fileStream.Position; byte[] byteStockDataCount = ConvertByteArray.ToByteArray( uiStockDataCount ); fileStream.Write( byteStockDataCount, 0, byteStockDataCount.Length ); foreach ( StockData stockData in stockInfo.ToArray() ) { fileStream.WriteByte( (byte)stockData.StockDataVer ); byte[] byteTradingTime = ConvertByteArray.ToByteArray( stockData.TradingTime.Ticks ); fileStream.Write( byteTradingTime, 0, byteTradingTime.Length ); byte[] byteOpenPrice = ConvertByteArray.ToByteArray( stockData.OpenPrice ); fileStream.Write( byteOpenPrice, 0, byteOpenPrice.Length ); byte[] byteClosePrice = ConvertByteArray.ToByteArray( stockData.ClosePrice ); fileStream.Write( byteClosePrice, 0, byteClosePrice.Length ); byte[] byteHighestPrice = ConvertByteArray.ToByteArray( stockData.HighestPrice ); fileStream.Write( byteHighestPrice, 0, byteHighestPrice.Length ); byte[] byteMinimumPrice = ConvertByteArray.ToByteArray( stockData.MinimumPrice ); fileStream.Write( byteMinimumPrice, 0, byteMinimumPrice.Length ); byte[] byteDailyTurnover = ConvertByteArray.ToByteArray( stockData.TradingVolume ); fileStream.Write( byteDailyTurnover, 0, byteDailyTurnover.Length ); byte[] byteDailyAmount = ConvertByteArray.ToByteArray( stockData.DailyAmount ); fileStream.Write( byteDailyAmount, 0, byteDailyAmount.Length ); uiStockDataCount++; } fileStream.Seek( lStockDataCountPosition, SeekOrigin.Begin ); byteStockDataCount = ConvertByteArray.ToByteArray( uiStockDataCount ); fileStream.Write( byteStockDataCount, 0, byteStockDataCount.Length ); // 最后写入代表文件成功 fileStream.Seek( 0, SeekOrigin.Begin ); byte[] fileSign = Encoding.ASCII.GetBytes( "DStock" ); fileStream.Write( fileSign, 0, fileSign.Length ); fileStream.Flush(); fileStream.Close(); */ }
public static bool LoadFileFormatForDStock( string strFile, ref StockInfo stockInfo ) { /* if ( File.Exists( strFile ) == false ) return false; //else // 修改去掉只读 // File.SetAttributes( strFile, FileAttributes.Archive ); FileStream fileStream = File.Open( strFile, FileMode.Open ); byte[] fileSign = new byte[6]; fileStream.Read( fileSign, 0, fileSign.Length ); if ( Encoding.ASCII.GetString( fileSign ) != "DStock" ) return false; byte byStockInfoVer = (byte)fileStream.ReadByte(); //stockInfo.StockInfoVer = (StockInfoVer)byStockInfoVer; byte[] byteStockCodeSize = new byte[4]; fileStream.Read( byteStockCodeSize, 0, byteStockCodeSize.Length ); byte[] byteStockCode = new byte[ConvertByteArray.ToInt( byteStockCodeSize )]; fileStream.Read( byteStockCode, 0, byteStockCode.Length ); stockInfo.StockCode = ConvertByteArray.ToString( byteStockCode ); Debug.WriteLine( ConvertByteArray.ToString( byteStockCode ) ); byte[] byteStockNameSize = new byte[4]; fileStream.Read( byteStockNameSize, 0, byteStockNameSize.Length ); byte[] byteStockName = new byte[ConvertByteArray.ToInt( byteStockNameSize )]; fileStream.Read( byteStockName, 0, byteStockName.Length ); stockInfo.StockName = ConvertByteArray.ToString( byteStockName ); Debug.WriteLine( ConvertByteArray.ToString( byteStockName ) ); byte[] byteStockDataCount = new byte[4]; fileStream.Read( byteStockDataCount, 0, byteStockDataCount.Length ); uint uiStockDataCount = ConvertByteArray.ToUInt( byteStockDataCount ); for ( int iIndex = 0; iIndex < uiStockDataCount; iIndex++ ) { StockData stockData = new StockData(); byte byStockDataVer = (byte)fileStream.ReadByte(); //stockData.StockDataVer = (StockDataVer)byStockDataVer; byte[] byteTradingTime = new byte[8]; fileStream.Read( byteTradingTime, 0, byteTradingTime.Length ); stockData.TradingTime = new DateTime( ConvertByteArray.ToLong( byteTradingTime ) ); byte[] byteOpenPrice = new byte[4]; fileStream.Read( byteOpenPrice, 0, byteOpenPrice.Length ); stockData.OpenPrice = ConvertByteArray.ToUInt( byteOpenPrice ); byte[] byteClosePrice = new byte[4]; fileStream.Read( byteClosePrice, 0, byteClosePrice.Length ); stockData.ClosePrice = ConvertByteArray.ToUInt( byteClosePrice ); byte[] byteHighestPrice = new byte[4]; fileStream.Read( byteHighestPrice, 0, byteHighestPrice.Length ); stockData.HighestPrice = ConvertByteArray.ToUInt( byteHighestPrice ); byte[] byteMinimumPrice = new byte[4]; fileStream.Read( byteMinimumPrice, 0, byteMinimumPrice.Length ); stockData.MinimumPrice = ConvertByteArray.ToUInt( byteMinimumPrice ); byte[] byteDailyTurnover = new byte[8]; fileStream.Read( byteDailyTurnover, 0, byteDailyTurnover.Length ); stockData.TradingVolume = ConvertByteArray.ToULong( byteDailyTurnover ); byte[] byteDailyAmount = new byte[8]; fileStream.Read( byteDailyAmount, 0, byteDailyAmount.Length ); stockData.OpenInterest = ConvertByteArray.ToULong( byteDailyAmount ); stockInfo.AddStockData( stockData ); } fileStream.Close(); stockInfo.m_StockFilePath = strFile; stockInfo.m_IsLoadFile = true; */ return true; }
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; }