⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stockdataprocess.cpp

📁 从联合证券数据读取股票数据以及画出K线。不完善
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	//未分配利润:          Wfply
	pST_StockReportInfo->fWfply = 0.1*TanslatChar2Double(pchInput,iLen);
	pchInput = pchInput+iLen;
	
	//季报调整净资:           Tzmgjz
	pST_StockReportInfo->fTzmgjz = TanslatChar2Double(pchInput,iLen);
	pchInput = pchInput+iLen;
	
	//所属地区3:         Dy   
	int iLength = 3;
	pST_StockReportInfo->chDy = TranslatChar2Uch(pchInput,iLength);
	pchInput = pchInput+iLength;
	
	
	//所属行业4:          Hy 
	iLength = 4;
	pST_StockReportInfo->chHy = TranslatChar2Uch(pchInput,iLength);
	pchInput = pchInput+iLength;
	
	//报告类别2:   Zbnb
	pchInput++;
	memcpy(&(pST_StockReportInfo->chZbnb),pchInput,1);
	pchInput++;
	
	//上市日期8:ssDate
	
	memcpy(pST_StockReportInfo->chSsDate,pchInput,8);
	pST_StockReportInfo->chSsDate[8] = '\0';


	//指标计算
	/*
	*	float fRatioZylr;                              ////主营业务利润率	= 主营利润 / 主营收入
	if(pST_StockReportInfo->fZysy ==0)
	{
				fRatioZylr = 0.0;
				}
				else
				{
				fRatioZylr= 100*iter->fZyly / pST_StockReportInfo->fZysy;      
				}
				
				  float fRatioJzcSy;                  //净资产收益率     =每股收益 /每股净资产
				  if(iter->fZzc ==0.0)
				  {
				  fRatioJzcSy= 0.0;
				  }
				  else
				  {
				  fRatioJzcSy = 100*fAvesy/fAveJzc;               
				  }
	 */
	pST_StockReportInfo->fAveJzc  = (pST_StockReportInfo->fJzc)/(pST_StockReportInfo->fZgb);          //每股净资产       =净资产 / 总股本
	pST_StockReportInfo->fAvesy  = (pST_StockReportInfo->fJly)/(pST_StockReportInfo->fZgb);          //每股收益        =净利润 / 总股本
	pST_StockReportInfo->fAvegjj = (pST_StockReportInfo->fZbgjj)/(pST_StockReportInfo->fZgb);        //每股公积金      = 资本公积金 / 总股本
	pST_StockReportInfo->fAveBtsy =  (pST_StockReportInfo->fBtsy)/(pST_StockReportInfo->fZgb);         //每股经营现金流= 经营现金流量 / 总股本 
	
	if(pST_StockReportInfo->fZysy ==0.0)
	{
		pST_StockReportInfo->fRatioZylr =0.0;
	}
	else
	{
		pST_StockReportInfo->fRatioZylr = 100*pST_StockReportInfo->fZyly / pST_StockReportInfo->fZysy;      //主营业务利润率	= 主营利润 / 主营收入
	}
			
	if(pST_StockReportInfo->fAveJzc ==0.0)
	{
		pST_StockReportInfo->fRatioJzcSy =0.0;
	}
	else
	{	
		pST_StockReportInfo->fRatioJzcSy  = 100*pST_StockReportInfo->fAvesy/pST_StockReportInfo->fAveJzc;               //净资产收益率     =每股收益 /每股净资产
	}

	if(pST_StockReportInfo->fZzc ==0.0)
	{
		pST_StockReportInfo->fRatioZcfz=0.0;
	}
	else
	{	
		pST_StockReportInfo->fRatioZcfz = 100*(pST_StockReportInfo->fCqfz + pST_StockReportInfo->fLdfz)/(pST_StockReportInfo->fZzc);  //资产负债率 =(长期负债+流动负债)/ 总资产 
	}
	pchInput = pchInput+8;
	
	//Skip Modidate Gdrs
	pchInput = pchInput+15;

	*piRet = pchInput - pchStart;


	return 0;
}

CString StockDataProcess::ParseJblx(unsigned char chCode)
{
	CString strRet;
	
	switch(chCode) 
	{
	case '3' :
		strRet = "第一季度季报";
		break;
	case '6' :
		strRet ="第二季度季报";
		break;
	case '9':
		strRet ="第三季度季报";  //3 吉林
		break;
	case '12':
		strRet ="第四季度季报";  //4 		
		break;
	default:
		strRet = "不清楚的季报";
	}
	return strRet;
}

int StockDataProcess::WriteFile(CString strWrite)
{
	CFile			oFile1;	
	CFileException	err;	
				
	CString strFileName1 = "D:\\板块信息.txt";
				
				
	if( !oFile1.Open( strFileName1, CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite, &err ) )
	{	
		//AfxMessageBox("Can't open the file , please try again!");
		return -2;	//_T("打开记录文件失败!"));						
	}
	oFile1.SetLength(0);		
				
	//CString strRealWrite = strStockName +"\n"+strWrite;			
	int iLen = strWrite.GetLength();//sizeof(StrOutput)*
	oFile1.Write(strWrite,iLen);
	
	oFile1.Close();
	return 0;

}

unsigned char StockDataProcess::GenerateStockType(CString strStockCode ,CString strStockType)
{
	unsigned char chRet = 0;

	//shanghai

	if(strStockType =="上海")
	{
		if( (memcmp(strStockCode,"600000",6)>=0) && (memcmp(strStockCode,"602000",6)<0) )
		{
			chRet = SH_A_SHARE;
		}
		
		// if( (memcmp(strStockCode,"200002",6)>=0) && (memcmp(strStockCode,"200999",6)<0) ) SZ
		if( (memcmp(strStockCode,"900900",6)>=0) && (memcmp(strStockCode,"900960",6)<0) )
		{
			chRet = SH_B_SHARE;
		}
	}
	else if(strStockType =="深圳")    //shenzhen
	{
		if( (memcmp(strStockCode,"000001",6)>=0) && (memcmp(strStockCode,"002280",6)<0) )
		{
			chRet = SZ_A_SHARE;
		}
		
		// if( (memcmp(strStockCode,"200002",6)>=0) && (memcmp(strStockCode,"200999",6)<0) ) SZ
		if( (memcmp(strStockCode,"200000",6)>=0) && (memcmp(strStockCode,"200999",6)<0) )
		{
			chRet = SZ_B_SHARE;
		}
	}

	return chRet;
}

CString StockDataProcess::TranslateStockType(unsigned char chStockType)
{
	CString strTemp;
	switch(chStockType) 
	{
	case SH_A_SHARE:
		strTemp = "上海A股";
		break;
	case SH_B_SHARE:
		strTemp = "上海B股";
		break;
	case SZ_A_SHARE:
		strTemp = "深圳A股";
		break;
	case SZ_B_SHARE:
		strTemp = "深圳B股";
		break;
	default:
		strTemp ="不知类型";
	}
	return strTemp;
	
}

int StockDataProcess::GenerateEmaArray(float* pfArray,const int ciArrayLen, const int ciEMALen)
{

	if(pfArray ==NULL)
	{
		return -1;
	}

	if(ciEMALen>ciArrayLen/2)
	{
		return -2;
	}

	float* pfTemp = new float[ciArrayLen];

	memset(pfTemp,0.0,ciArrayLen*sizeof(float));

	/*
	for(int i=0;i<ciEMALen;i++)
		{
			*(pfTemp+i) = 0.0;
		}*/
	

	for(int i=ciEMALen;i<ciArrayLen;i++)
	{
		*(pfTemp+i) = ((*(pfTemp+i-1) *(ciEMALen-1))
			         /
					 (ciEMALen+1))
					 +
					 (
					 *(pfArray+i)*2 / (ciEMALen+1)
					 );
	

	}

	memcpy(pfArray,pfTemp,ciArrayLen*sizeof(float));
	delete [] pfTemp;
	return 0;
}

int StockDataProcess::GenerateDifDeaArray(float* pfArray,float* pfDEA,const int ciArrayLen)
{
	if(pfArray ==NULL)
	{
		return -1;
	}
	if(pfDEA ==NULL)
	{
		return -1;
	}

	float* pfDmaSlow = new float[ciArrayLen];
	float* pfDmaFast = new float[ciArrayLen];

	//chushi hua
	memcpy(pfDmaSlow,pfArray,ciArrayLen*sizeof(float));
	memcpy(pfDmaFast,pfArray,ciArrayLen*sizeof(float));
	

	float* pfDif = new float[ciArrayLen];
	memset(pfDif,0.0,ciArrayLen*sizeof(float));
	

	const int ciDMaSlow = 26;
	const int ciDMaFast = 14;
	const int ciDEA = 9;
	GenerateEmaArray(pfDmaSlow,ciArrayLen,ciDMaSlow);
	GenerateEmaArray(pfDmaFast,ciArrayLen,ciDMaFast);

	for(int i=0;i<ciArrayLen;i++)
	{
		*(pfDif+i) = *(pfDmaSlow+i) - *(pfDmaFast+i);
	}

	for(i=1;i<ciDEA;i++)
	{
		*(pfDEA+i) = 0.0;

	}

	for(i=ciDEA;i<ciArrayLen;i++)
	{
		*(pfDEA+i) = (*(pfDEA+i-1)*(ciDEA-1) + (*(pfDif+i) *2) ) /(ciDEA+1);
	}

	memcpy(pfArray,pfDif,ciArrayLen*sizeof(float));

	delete[] pfDmaFast;
	delete[] pfDmaSlow;
	delete[] pfDif;

	return 0;
	
	
}


CString StockDataProcess::StockCode2StockName(CString strStockCode, ST_StockNameInfoList oST_StockNameInfoList)
{
	CString strRet;
	ST_StockNameInfoList::iterator iter;
	for(iter=oST_StockNameInfoList.begin();iter!= oST_StockNameInfoList.end();++iter)
	{
		CString strTemp = iter->chStockCode;
		if(strTemp == strStockCode)
		{
			strRet = iter->chStockName;
			return strRet;
		}
	}

	//have not find the stockcode
	strRet = "Unkonwn";
	return strRet;
		
}

int StockDataProcess::GenerateRalationList(CString strFileName, CString strStockType, ST_StockNameInfoList* pST_StockNameInfoList)
{

	CFile			oFile;	
	CFileException	err;	
	const int ci_FILE_LEN=600*1024*1024;
	const int ci_Len=10;
	
	
	if( !oFile.Open( strFileName, CFile::modeRead, &err ) )
	{	
		AfxMessageBox("Can't open the file , please try again!");
		return -1;	//_T("打开记录文件失败!"));						
	}		
	//////////////////////////////////////////////////////////////////////////
	
	int  dwFileSize=oFile.GetLength();
	
	if(dwFileSize > ci_FILE_LEN)
	{
		CString strLen;
		strLen.Format(_T("The File is too long, the lengh is less than %d !"), ci_FILE_LEN);
		AfxMessageBox(strLen);
		return -2;
	}
	
	/*
	int i_FileRecordLen = dwFileSize/sizeof(unsigned short);*/
	
	//////////////////////////////////////////////////////////////////////////
	//////////////////////////////////////////////////////////////////////////
	
	
	HANDLE s_hHeap = NULL;
	s_hHeap = HeapCreate(HEAP_NO_SERIALIZE,0,0);
	
	if(s_hHeap == NULL)
	{
		oFile.Close();
		//m_oLock.Unlock(); 
		return -3;
	}
	
	
	if (0<dwFileSize) 
	{		
		unsigned char* pBuf	=(unsigned char*) HeapAlloc(s_hHeap,0,dwFileSize);		
		if (!pBuf	)
		{
			oFile.Close();
			
			return -4;
		}		
		//delete the corresponding records.
		
		
		
		//////////////////////////////////////////////////////////////////////////
		//unsigned char *pBuf=new unsigned char [dwFileSize+1];
		
		const int STR_LEN = 256;
		
		const int ciOffset = 0x32;
		//			const int ciSZOffset = 0x5815;
		
		//	int iOffSet=0;
		//			if(strFileName =="szex.tnf")
		//			{
		//				iOffSet = ciSZOffset;
		//			}
		
		
		
		int iRet = oFile.Seek(ciOffset,CFile::begin);
		
		if(iRet != ciOffset)
		{
			return -5;
		}
		
		//oFile.SeekToBegin();	
		int iRealLenth = dwFileSize-ciOffset;
		oFile.Read(pBuf,  iRealLenth);
		//unsigned char* pchTemp;
		unsigned char* pchMax;
		pchMax = pBuf+iRealLenth;
		
		
		//int index=0x1e58c;//0x18a;	
		//			pBuf = pBuf+index;
		
		while(*pBuf==0)
		{
			pBuf++;
		}
		
		//m_ST_StockNameInfoList.clear();
		// const int ciSize = 47;
		const int ciSize = 250;
		int loop =0;
		
		
		unsigned char uchStockName[980][8]={0};
		
		while (1) 
		{			
			
			if(pBuf > pchMax-ciSize)
			{
				break;
			}
			
			unsigned char * pchOffset =pBuf;
			//unsigned char chStockCode[8];
			
			ST_StockNameInfo oST_StockNameInfo;
			memset(&oST_StockNameInfo,0,sizeof(ST_StockNameInfo));
			
			//read stock code 
			memcpy(oST_StockNameInfo.chStockCode,pchOffset,7);
			
			
			//read stock name
			pchOffset = pchOffset+24;
			//unsigned char chName[12];
			memcpy(oST_StockNameInfo.chStockName,pchOffset,12);
			
			CString strStockCode;
			strStockCode = oST_StockNameInfo.chStockCode;
			
			oST_StockNameInfo.iType = GenerateStockType(strStockCode,strStockType);
			
			
			
			if( (oST_StockNameInfo.iType == SH_A_SHARE)  ||
				(oST_StockNameInfo.iType == SZ_A_SHARE)  ||
				(oST_StockNameInfo.iType == SH_B_SHARE)  ||
				(oST_StockNameInfo.iType == SZ_B_SHARE) 					
				)
			{
				pST_StockNameInfoList->push_back(oST_StockNameInfo);
				
				memcpy(uchStockName[loop],oST_StockNameInfo.chStockCode,7);
				++loop;
			}
			
			pBuf = pBuf+ciSize;		
			
		}			
		
	}

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -