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

📄 stock.c

📁 这是本人早期开发的一个股票信息接收程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	fprintf(fp,"	m_time=%d\n",m_Minute[MinNumber].m_time);
	fprintf(fp,"	m_fPrice=%7.2f\n",m_Minute[MinNumber].m_fPrice);
	fprintf(fp,"	m_fVolume=%7.2f\n",m_Minute[MinNumber].m_fVolume);
	fprintf(fp,"	m_fAmount=%7.2f\n",m_Minute[MinNumber].m_fAmount);	

	fflush(fp);*/
	MinNumber+=2;
	}
//////////////////////////////////////////

}


//extern char NewsPath[80];


void ReceiveNews()
{
	int i,j=0;
	int x=0;
	unsigned char *Data=NULL;//[256*34];
	int DataLen=0;

//	FILE *fpNew=NULL;
	unsigned char End=(rs.Info[0]&0x10)>>4;
	unsigned char Address=(unsigned char)rs.Address;
	unsigned char InfoCode=rs.Info[0]&0x07;
	int NewsNumber[256];
	char Tag[3]="";
	char Serial[5]="";	
	char FileName[256];
	struct tm when;
	time_t now;

	for(i=0;i<MAX_NEW_NUMBER;i++)
	{

		if(!g_News[i].Flag)
		{

			if((rs.Info[0]&0x08)<<3)
			{
				if(rs.Info[2]>34)
				{
#ifdef _DEBUG
	fprintf(fp,"InfoLength=%d\n",rs.InfoLength);
	for(x=0;x<36;x++)
		fprintf(fp,"%02x,",rs.Info[x]);
	fprintf(fp,"\n");
	fprintf(fp,"===========Error! rs.Info Len=%d.\n",rs.Info[2]);
	fflush(fp);	
#endif
				continue;
				}
				memcpy(g_News[i].Info,rs.Info+3,rs.Info[2]);
				g_News[i].InfoLen=rs.Info[2];
			}
			else
			{
				if(rs.InfoLength>36)
				{

#ifdef _DEBUG
	fprintf(fp,"InfoLength=%d\n",rs.InfoLength);
	for(x=0;x<36;x++)
		fprintf(fp,"%02x,",rs.Info[x]);
	fprintf(fp,"\n");
	fprintf(fp,"===========Error! rs.InfoLength Len=%d.\n",rs.InfoLength);
	fflush(fp);	
#endif
				continue;
				}
				memcpy(g_News[i].Info,rs.Info+2,rs.InfoLength-2);
				g_News[i].InfoLen=rs.InfoLength-2;
			}
			g_News[i].Flag=1;
			g_News[i].Address=Address;
			g_News[i].End=End;
			g_News[i].InfoCode=InfoCode;
			g_News[i].LineNumber=rs.Info[1];


			for(j=0;j<g_News[i].InfoLen;j++)
				if((g_News[i].Info[j]==0x0a)&&(g_News[i].Info[j+1]==0x00))
				{
					g_News[i].Info[j]=0x0c;
					g_News[i].Info[j+1]=0x0a;
				}

			break;
		}
	}
/////////
	

//	if(i==MAX_NEW_NUMBER)printf("not enogh memory!");
	if(!End)return;
	for(i=0;i<256;i++)NewsNumber[i]=-1;



	for(i=0;i<MAX_NEW_NUMBER;i++)
		if(g_News[i].Flag)//
		if((Address==g_News[i].Address)&&(InfoCode==g_News[i].InfoCode))
		{
			NewsNumber[j++]=i;
			if(g_News[i].LineNumber==0)
			{
				memcpy(Tag,g_News[i].Info+0,2);Tag[2]='\0';
				memcpy(Serial,g_News[i].Info+8,4);
				Serial[4]='\0';
			}
			if(strcmp(Tag,"")==0)return;
		}


//	memcpy(FileName,NewsPath,strlen(NewsPath));
	if(strcmp(Tag,"15")==0)	
		memcpy(FileName,"上证公告\\",9);
		else
	if(strcmp(Tag,"25")==0)
		memcpy(FileName,"深证公告\\",9);
	else
	if(strcmp(Tag,"05")==0)
		memcpy(FileName,"财经新闻\\",9);
	else return;
	time( &now );
	when = *localtime( &now );
	sprintf(FileName+9,"%2d%2d",when.tm_mon+1,when.tm_mday);
	memcpy(FileName+13,Serial,4);
	memcpy(FileName+13+4,".txt",4);
	FileName[13+8]='\0';


	for(i=0;i<j;i++)	DataLen+=g_News[NewsNumber[i]].InfoLen;

	Data=(unsigned char *)malloc(DataLen);
	if(Data==NULL)
	{
#ifdef _DEBUG
	fprintf(fp,"Not enough memory!.\n");
	fflush(fp);	
#endif
	return;
	}
	DataLen=0;
	for(i=0;i<j;i++)
	{
		memcpy(Data+DataLen,g_News[NewsNumber[i]].Info,g_News[NewsNumber[i]].InfoLen);
		DataLen+=g_News[NewsNumber[i]].InfoLen;
/*
		g_News[NewsNumber[i]].Address=0;
		g_News[NewsNumber[i]].End=0;
		g_News[NewsNumber[i]].Flag=0;
		g_News[NewsNumber[i]].Info="";
		g_News[NewsNumber[i]].InfoCode=0;
		g_News[NewsNumber[i]].InfoLen=0;
		g_News[NewsNumber[i]].LineNumber=0;
		
		*/
		g_News[NewsNumber[i]].Flag=0;
	}
	/////////////////////////////
	ReceiveData.m_wDataType=FILE_NEWS_EX;
	ReceiveData.m_nPacketNum=1;

	ReceiveData.m_File.m_dwAttrib=0;
	ReceiveData.m_File.m_dwLen=DataLen;
	ReceiveData.m_File.m_dwSerialNo=0;
	memcpy(ReceiveData.m_File.m_szFileName,FileName,21);

	ReceiveData.m_bDISK=0;
	ReceiveData.m_pData=Data;
	SendMessage(hWndBak,MsgBak,RCV_FILEDATA,(LPARAM)&ReceiveData);
	free(Data);
/*
	fpNew=fopen(FileName,"wb+");
	if(fpNew==NULL)	return;
	fseek(fpNew,0,SEEK_SET);
//排序
////////////////

	for(i=0;i<j;i++)
	{
		fwrite(g_News[NewsNumber[i]].Info,g_News[NewsNumber[i]].InfoLen,1,fpNew);
		g_News[NewsNumber[i]].Flag=0;
	}
	fclose(fpNew);*/
}
void ReceiveStock(int Market)
{
	RowNumber = rs.Info[1];
	RowNumber <<=8;
	RowNumber |= rs.Info[0];
	
	if(RowNumber == 0)	// 指数
	{
		memmove(IndexStr.str,rs.Info,rs.InfoLength);
		PackedIndex = IndexStr.Index;
		
		Index.RowNumber=RowNumber;
		Index.TotalRows=PackedIndex.TotalRows;
		Index.Date=s3tol(PackedIndex.Date);
		Index.Time=s3tol(PackedIndex.Time);
		Index.Index=s3tol(PackedIndex.Index);
		Index.AIndex=s3tol(PackedIndex.AIndex);
		Index.BIndex=s3tol(PackedIndex.BIndex);
		Index.Volume=s3tol(PackedIndex.Volume);

//							SHIndex++;
//							if(SHIndex>=SHMAX) SHIndex=0;
//							sprintf(SHData[SHIndex],
//							"[Index]  %u  %lx  %lx  %8.3f  %8.3f  %8.3f  %8ld",
//							Index.TotalRows, Index.Date, Index.Time,Index.Index,
//							Index.AIndex,Index.BIndex,Index.Volume);
//							SHData[SHIndex][100]='\0';
	}
	else	// 各股
	{
		if((RowNumber &0x8000)==0)	// 不变量/微变量
		{
			RowNumber = RowNumber & 0x7fff;
			if(RowNumber>=STOCKMAX) return;
			pShNode[RowNumber].RowNumber = RowNumber;
			memmove(IF.String,rs.Info,rs.InfoLength);
			pShNode[RowNumber].StockNo = s3tol(IF.CR[0].StockNumber);
			memmove(pShNode[RowNumber].StockName,IF.CR[0].StockName,8);
			pShNode[RowNumber].StockName[8]='\0';
			pShNode[RowNumber].LastClose=(unsigned short)IF.String[14];
			pShNode[RowNumber].LastClose<<=8;
			pShNode[RowNumber].LastClose|=(unsigned short)IF.String[13];
			pShNode[RowNumber].Open=(unsigned short)IF.String[16];
			pShNode[RowNumber].Open<<=8;
			pShNode[RowNumber].Open|=(unsigned short)IF.String[15];
			pShNode[RowNumber].flag = 0x01;
			
			if(rs.InfoLength >= sizeof(IF.CR[0]) *2)
			{
				RowNumber = IF.CR[1].RowNumber & 0xfff;
				if(RowNumber>=STOCKMAX) return;
				pShNode[RowNumber].RowNumber=RowNumber;
				memmove(IF.String,rs.Info,rs.InfoLength);
				pShNode[RowNumber].StockNo = s3tol(IF.CR[1].StockNumber);
				memmove(pShNode[RowNumber].StockName,IF.CR[1].StockName,8);
				pShNode[RowNumber].StockName[8]='\0';
				pShNode[RowNumber].LastClose=(unsigned short)IF.String[31];
				pShNode[RowNumber].LastClose<<=8;
				pShNode[RowNumber].LastClose|=IF.String[30];
				pShNode[RowNumber].Open=(unsigned short)IF.String[33];
				pShNode[RowNumber].Open<<=8;
				pShNode[RowNumber].Open|=IF.String[32];
				pShNode[RowNumber].flag = 0x01;
			}
		}
		else						// 变化量
		{
			memmove(IF.String,rs.Info,rs.InfoLength);
			RowNumber = IF.VR.RowNumber & 0x7fff;
			if(RowNumber>=STOCKMAX) return;
				
			pShNode[RowNumber].Volume = (unsigned long)IF.String[4];
			pShNode[RowNumber].Volume <<= 8;
			pShNode[RowNumber].Volume |= (unsigned long)IF.String[3];
			if(IF.VR.Factor & 1)
				pShNode[RowNumber].Volume *= 100L;
			pShNode[RowNumber].Amount = (unsigned long)IF.String[6];
			pShNode[RowNumber].Amount <<= 8;
			pShNode[RowNumber].Amount |= (unsigned long)IF.String[5];
			if(IF.VR.Factor & 2)
				pShNode[RowNumber].Amount *=10L;
			pShNode[RowNumber].Highest = (unsigned long)IF.String[8];
			pShNode[RowNumber].Highest <<= 8;
			pShNode[RowNumber].Highest |= (unsigned long)IF.String[7];
			pShNode[RowNumber].Lowest = (unsigned long)IF.String[10];
			pShNode[RowNumber].Lowest <<= 8;
			pShNode[RowNumber].Lowest |= (unsigned long)IF.String[9];
			pShNode[RowNumber].Newest = (unsigned long)IF.String[12];
			pShNode[RowNumber].Newest <<= 8;
			pShNode[RowNumber].Newest |= (unsigned long)IF.String[11];
			pShNode[RowNumber].Buy = (unsigned long)IF.String[14];
			pShNode[RowNumber].Buy <<= 8;
			pShNode[RowNumber].Buy |= (unsigned long)IF.String[13];
			pShNode[RowNumber].Sell = (unsigned long)IF.String[16];
			pShNode[RowNumber].Sell <<= 8;
			pShNode[RowNumber].Sell |= (unsigned long)IF.String[15];
			
			pShNode[RowNumber].BuyHands1 = (unsigned short)IF.String[18];
			pShNode[RowNumber].BuyHands1 <<= 8;
			pShNode[RowNumber].BuyHands1 |= (unsigned short)IF.String[17];
			pShNode[RowNumber].BuyHands2 = (unsigned short)IF.String[20];
			pShNode[RowNumber].BuyHands2 <<= 8;
			pShNode[RowNumber].BuyHands2 |= (unsigned short)IF.String[19];
			pShNode[RowNumber].BuyHands3 = (unsigned short)IF.String[22];
			pShNode[RowNumber].BuyHands3 <<= 8;
			pShNode[RowNumber].BuyHands3 |= (unsigned short)IF.String[21];
			
			pShNode[RowNumber].BuyPrice2 =  pShNode[RowNumber].Buy - (unsigned long)IF.String[23];
			pShNode[RowNumber].BuyPrice3 =  pShNode[RowNumber].Buy - (unsigned long)IF.String[24];
			
			pShNode[RowNumber].SellHands1 = (unsigned short)IF.String[26];
			pShNode[RowNumber].SellHands1 <<= 8;
			pShNode[RowNumber].SellHands1 |= (unsigned short)IF.String[25];
			pShNode[RowNumber].SellHands2 = (unsigned short)IF.String[28];
			pShNode[RowNumber].SellHands2 <<= 8;
			pShNode[RowNumber].SellHands2 |= (unsigned short)IF.String[27];
			pShNode[RowNumber].SellHands3 = (unsigned short)IF.String[30];
			pShNode[RowNumber].SellHands3 <<= 8;
			pShNode[RowNumber].SellHands3 |= (unsigned short)IF.String[29];
			
			pShNode[RowNumber].SellPrice2 = pShNode[RowNumber].Sell + (unsigned long)IF.String[31];
			pShNode[RowNumber].SellPrice3 = pShNode[RowNumber].Sell + (unsigned long)IF.String[32];
			pShNode[RowNumber].flag |= 2;
			
			tn=pShNode[RowNumber];
		if(tn.flag == 3)
			{
				SendStockMessage(Market);

			}
	
		}
	}				
}
//extern "C"


void ExpandData(unsigned long * target, unsigned char * source, int Factor)
{
	int i;
	long l;

	l=0;
	Factor = 3 - Factor;

	for(i = 2; i >= 0; i--)
	{
		l <<= 8;
		l |= source[i];
	}
	for(i=0; i<Factor; i++)
		l *= 10;
	*target = l;
	return;
}

unsigned long s3tol(unsigned char string[])
{
	int i;
	unsigned long l=0L;
	unsigned long l1;

	for(i=0;i<3;i++)
	{
		l1 = string[i];
		l1 <<= 8*(2-i);
		l |= l1;
	}
	return l;
}
float Divide100(unsigned long Number)
{
	return((float)(Number/100.0));
}

//#ifdef __cplusplus
//}
//#endif

⌨️ 快捷键说明

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