📄 stockdataprocess.cpp
字号:
//未分配利润: 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 + -