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

📄 stock.c

📁 这是本人早期开发的一个股票信息接收程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <windows.h>
#include <memory.h>
#include <string.h>
#include <stdio.h>
#include <time.h>


#include <stdlib.h>
#include <conio.h>
#include <ctype.h>


#include "stock.h"
#include "Fstrcv.h"
#include "index.h"
#include "stockrcv.h"
#include "stock.h"
#include "demo.h"
extern HWND hWndBak;
extern UINT MsgBak;
extern FILE *fp;




int Factor;
int factor[4]={ 1,10,100,1000 };
unsigned char nunit;
RCV_REPORT_STRUCTEx ReportData;
RCV_MINUTE_STRUCTEx  m_Minute[240];

RCV_DATA ReceiveData;


void SendIndexMessage(int Market)
{

	int j=0;
	ReportData.m_wMarket=Market;	
	memcpy(ReportData.m_szLabel,QL_Index.IndexCode,strlen(QL_Index.IndexCode));
	
	memcpy(ReportData.m_szName,"",0);
	if(Market==SH_MARKET_EX)
	{
		ReportData.m_szLabel[8]='\0';
		if(strcmp(ReportData.m_szLabel,"1A0001")==0)memcpy(ReportData.m_szName,"上证指数",8);
		if(strcmp(ReportData.m_szLabel,"1A0002")==0)memcpy(ReportData.m_szName,"上证A股",8);
		if(strcmp(ReportData.m_szLabel,"1A0003")==0)memcpy(ReportData.m_szName,"上证B股",8);
		if(strcmp(ReportData.m_szLabel,"1B0001")==0)memcpy(ReportData.m_szName,"上证工业",8);
		if(strcmp(ReportData.m_szLabel,"1B0002")==0)memcpy(ReportData.m_szName,"上证商业",8);
		if(strcmp(ReportData.m_szLabel,"1B0004")==0)memcpy(ReportData.m_szName,"上证地产",8);
		if(strcmp(ReportData.m_szLabel,"1B0005")==0)memcpy(ReportData.m_szName,"公共事业",8);
		if(strcmp(ReportData.m_szLabel,"1B0006")==0)memcpy(ReportData.m_szName,"上证综合",8);
		if(strcmp(ReportData.m_szLabel,"1B0007")==0)memcpy(ReportData.m_szName,"上证30",8);

	}
	if(Market==SZ_MARKET_EX)
	{
		ReportData.m_szLabel[4]='\0';
		if(strcmp(ReportData.m_szLabel,"2A01")==0)memcpy(ReportData.m_szName,"成分指数",8);
		if(strcmp(ReportData.m_szLabel,"2A02")==0)memcpy(ReportData.m_szName,"成分A股",8);
		if(strcmp(ReportData.m_szLabel,"2A03")==0)memcpy(ReportData.m_szName,"成分B股",8);
		if(strcmp(ReportData.m_szLabel,"2B01")==0)memcpy(ReportData.m_szName,"深证工业",8);
		if(strcmp(ReportData.m_szLabel,"2B02")==0)memcpy(ReportData.m_szName,"深证商业",8);
		if(strcmp(ReportData.m_szLabel,"2B03")==0)memcpy(ReportData.m_szName,"深证金融",8);
		if(strcmp(ReportData.m_szLabel,"2B04")==0)memcpy(ReportData.m_szName,"深证地产",8);
		if(strcmp(ReportData.m_szLabel,"2B05")==0)memcpy(ReportData.m_szName,"深证事业",8);
		if(strcmp(ReportData.m_szLabel,"2B06")==0)memcpy(ReportData.m_szName,"深证综合",8);
        if(strcmp(ReportData.m_szLabel,"2B07")==0)memcpy(ReportData.m_szName,"深证基金",8);
		if(strcmp(ReportData.m_szLabel,"2C01")==0)memcpy(ReportData.m_szName,"深证指数",8);
		if(strcmp(ReportData.m_szLabel,"2C02")==0)memcpy(ReportData.m_szName,"深证A股",8);
		if(strcmp(ReportData.m_szLabel,"2C03")==0)memcpy(ReportData.m_szName,"深证B股",8);
		
	}
	ReportData.m_fLastClose=(float)(QL_Index.LastCloseIndex/1000.0);
	ReportData.m_fOpen=(float)(QL_Index.OpenIndex/1000.0);
	ReportData.m_fHigh=(float)(QL_Index.HighestIndex/1000.0);
	ReportData.m_fLow=(float)(QL_Index.LowestIndex/1000.0);
	ReportData.m_fNewPrice=(float)(QL_Index.LatestIndex/1000.0);
	ReportData.m_fVolume=(float)QL_Index.Volume;
	ReportData.m_fAmount=(float)(QL_Index.Amount*100.0);

	for(j=0;j<3;j++)
	{
	ReportData.m_fBuyPrice[j]=0;
	ReportData.m_fBuyVolume[j]=0;
	ReportData.m_fSellPrice[j]=0;
	ReportData.m_fSellVolume[j]=0;

	}
	ReceiveData.m_wDataType=0;
	ReceiveData.m_nPacketNum=1;

	ReceiveData.m_File.m_dwAttrib=0;
	ReceiveData.m_File.m_dwLen=0;
	ReceiveData.m_File.m_dwSerialNo=0;
	memcpy(ReceiveData.m_File.m_szFileName,"",0);

	ReceiveData.m_bDISK=0;
	ReceiveData.m_pReport=&ReportData;


	SendMessage(hWndBak,MsgBak,RCV_REPORT,(LPARAM)&ReceiveData);

//		lpFunction = GetProcAddress(hLibrary, "CtrlIntr");
	//		(* lpFunction)(0);	

}
void SendStockMessage(int Market)
{
	ReportData.m_wMarket=Market;	
	sprintf(ReportData.m_szLabel,"%04ld",tn.StockNo);
	memcpy(ReportData.m_szName,tn.StockName,strlen(tn.StockName));

	ReportData.m_fLastClose=Divide100(tn.LastClose);
	ReportData.m_fOpen=Divide100(tn.Open);
	ReportData.m_fHigh=Divide100(tn.Highest);
	ReportData.m_fLow=Divide100(tn.Lowest);
	ReportData.m_fNewPrice=Divide100(tn.Newest);
	ReportData.m_fVolume=(float)tn.Volume;
	ReportData.m_fAmount=(float)(tn.Amount*10000.0);


	ReportData.m_fBuyPrice[0]=(float)(tn.Buy/100.0);
	ReportData.m_fBuyVolume[0]=(float)(tn.BuyHands1);
	ReportData.m_fSellPrice[0]=(float)(tn.Sell/100.0);
	ReportData.m_fSellVolume[0]=(float)(tn.SellHands1);

	ReportData.m_fBuyPrice[1]=(float)(tn.BuyPrice2/100.0);
	ReportData.m_fBuyVolume[1]=(float)(tn.BuyHands2);
	ReportData.m_fSellPrice[1]=(float)(tn.SellPrice2/100.0);
	ReportData.m_fSellVolume[1]=(float)(tn.SellHands2);

	ReportData.m_fBuyPrice[2]=(float)(tn.BuyPrice3/100.0);
	ReportData.m_fBuyVolume[2]=(float)(tn.BuyHands3);
	ReportData.m_fSellPrice[2]=(float)(tn.SellPrice3/100.0);
	ReportData.m_fSellVolume[2]=(float)(tn.SellHands3);

	ReceiveData.m_wDataType=FILE_HTML_EX;
	ReceiveData.m_nPacketNum=1;

	ReceiveData.m_File.m_dwAttrib=0;
	ReceiveData.m_File.m_dwLen=0;
	ReceiveData.m_File.m_dwSerialNo=0;
	memcpy(ReceiveData.m_File.m_szFileName,"",0);

	ReceiveData.m_bDISK=0;
	ReceiveData.m_pReport=&ReportData;
	SendMessage(hWndBak,MsgBak,RCV_REPORT,(LPARAM)&ReceiveData);
//			lpFunction = GetProcAddress(hLibrary, "CtrlIntr");
//			(* lpFunction)(0);

}
void ReceiveIndex(int Market)
{
	int j;
	memmove(uIndex.Str, rs.Info, rs.InfoLength);
	if(uIndex.Index.DataType == 0)
	{
		Factor = uIndex.Index.LineNumber & 0x60;
		Factor >>= 5;
		uIndex.Index.LineNumber &= 0x1f;
		memmove(QL_Index.IndexCode, uIndex.Index.IndexCode, 6);
		QL_Index.IndexCode[6] = '\0';

		ExpandData(&QL_Index.LastCloseIndex, uIndex.Index.LastCloseIndex, Factor);
		ExpandData(&QL_Index.OpenIndex, uIndex.Index.OpenIndex, Factor);
		ExpandData(&QL_Index.HighestIndex, uIndex.Index.HighestIndex, Factor);
		ExpandData(&QL_Index.LowestIndex, uIndex.Index.LowestIndex, Factor);
		ExpandData(&QL_Index.LatestIndex, uIndex.Index.LatestIndex, Factor);

		ExpandData(&QL_Index.Volume, uIndex.Index.Volume, 3);
		nunit=(uIndex.Index.Unit >> 4) & 0x0f;
		for(j=0; j<4; j++)
		{
			if(nunit & 0x01)
			{
				QL_Index.Volume *= factor[j];
				nunit>>=1;
				break;
			}
		}
		
		ExpandData(&QL_Index.Amount,uIndex.Index.Amount,3);
		nunit=(uIndex.Index.Unit) & 0x0f;
		for(j=0;j<4;j++)
		{
			if(nunit&0x01)
			{
				QL_Index.Amount *= factor[j];
				break;
			}
			nunit>>=1;
		}
			SendIndexMessage(Market);


	}
}
int MinNumber=0;
unsigned char MinLabelBak[7]="";
void ReceiveMin()
{
//	int j;
	struct tm when;
	time_t now,Time;
	unsigned long l=0;
	int Market=0;
	unsigned char Label[7];
	unsigned char Data[36];

	if(rs.Info[0]=0x16)
		Market=SH_MARKET_EX;
	else
		if(rs.Info[0]=0x26)
		Market=SZ_MARKET_EX;
	else return;

	time( &now );
	when = *localtime( &now );
	memmove(Data, rs.Info, rs.InfoLength);

	if(Market==SH_MARKET_EX)
	{
		memcpy(Label,Data+1,6);
		Label[6]='\0';
	}else
	if(Market==SZ_MARKET_EX)
	{

		memcpy(Label,Data+1,4);
		Label[4]='\0';
	}
	if(strcmp(MinLabelBak,Label)!=0)
	{
	ReceiveData.m_wDataType=FILE_MINUTE_EX;
	ReceiveData.m_nPacketNum=MinNumber;

	ReceiveData.m_File.m_dwAttrib=0;
	ReceiveData.m_File.m_dwLen=0;
	ReceiveData.m_File.m_dwSerialNo=0;
	memcpy(ReceiveData.m_File.m_szFileName,"",0);

	ReceiveData.m_bDISK=0;
	ReceiveData.m_pMinute=m_Minute;
	SendMessage(hWndBak,MsgBak,RCV_FILEDATA,(LPARAM)&ReceiveData);
//	fprintf(fp,"Label=%s\n",MinLabelBak);
//	fprintf(fp,"-------------------------------------------------Number=%d--\n",MinNumber);


////////////////////////////


	memcpy(MinLabelBak,Label,7);

	memcpy(m_Minute[0].m_head.m_szLabel,Label,7);
	m_Minute[0].m_head.m_dwHeadTag=EKE_HEAD_TAG;
	m_Minute[0].m_head.m_wMarket=Market;

	Time=0;
	*((unsigned char *)&Time+0)=Data[7];
	*((unsigned char *)&Time+1)=Data[8];

	if(Time<120)
	{

	when.tm_hour=9;
	when.tm_min=30;
	when.tm_min+=Time;
	when.tm_hour+=(when.tm_min/60);
	when.tm_min=(when.tm_min%60);
	m_Minute[1].m_time=mktime(&when);

	when.tm_hour=9;
	when.tm_min=30;
	when.tm_min+=Time+1;
	when.tm_hour+=(when.tm_min/60);
	when.tm_min=(when.tm_min%60);
	m_Minute[2].m_time=mktime(&when);


	}else
	{
	when.tm_hour=13;
	when.tm_min=0;
	when.tm_min+=Time-120;
	when.tm_hour+=(when.tm_min/60);
	when.tm_min=(when.tm_min%60);
	m_Minute[1].m_time=mktime(&when);

	when.tm_hour=13;
	when.tm_min=0;
	when.tm_min+=Time+1-120;
	when.tm_hour+=(when.tm_min/60);
	when.tm_min=(when.tm_min%60);
	m_Minute[2].m_time=mktime(&when);
	}

	memcpy(&l,Data+10,4);
	m_Minute[1].m_fPrice=(float)(l/1000.0);
	memcpy(&l,Data+14,4);
	m_Minute[1].m_fVolume=(float)(l/100.0);
	memcpy(&l,Data+18,4);
	m_Minute[1].m_fAmount=(float)(l/10000.0);

	memcpy(&l,Data+22,4);
	m_Minute[2].m_fPrice=(float)(l/1000.0);
	memcpy(&l,Data+26,4);
	m_Minute[2].m_fVolume=(float)(l/100.0);
	memcpy(&l,Data+30,4);
	m_Minute[2].m_fAmount=(float)(l/10000.0);

	MinNumber=3;
/*	fprintf(fp,"/n%s:\n",Label);
fprintf(fp,"1:\n");
	fprintf(fp,"	m_time=%d\n",m_Minute[1].m_time);
	fprintf(fp,"	m_fPrice=%7.2f\n",m_Minute[1].m_fPrice);
	fprintf(fp,"	m_fVolume=%7.2f\n",m_Minute[1].m_fVolume);
	fprintf(fp,"	m_fAmount=%7.2f\n",m_Minute[1].m_fAmount);	
*/
	}else
	{
	Time=0;
	*((unsigned char *)&Time+0)=Data[7];
	*((unsigned char *)&Time+1)=Data[8];
	if(Time<120)
	{
		when.tm_hour=9;
		when.tm_min=30;
		when.tm_min+=Time;
		when.tm_hour+=(when.tm_min/60);
		when.tm_min=(when.tm_min%60);
		m_Minute[MinNumber].m_time=mktime(&when);
		when.tm_hour=9;
		when.tm_min=30;
		when.tm_min+=Time+1;
		when.tm_hour+=(when.tm_min/60);
		when.tm_min=(when.tm_min%60);
		m_Minute[MinNumber+1].m_time=mktime(&when);
	}else
	{
		when.tm_hour=13;
		when.tm_min=0;
		when.tm_min+=Time-120;
		when.tm_hour+=(when.tm_min/60);
		when.tm_min=(when.tm_min%60);
		m_Minute[MinNumber].m_time=mktime(&when);
		when.tm_hour=13;
		when.tm_min=0;
		when.tm_min+=Time+1-120;
		when.tm_hour+=(when.tm_min/60);
		when.tm_min=(when.tm_min%60);
		m_Minute[MinNumber+1].m_time=mktime(&when);
	}
	memcpy(&l,Data+10,4);
	m_Minute[MinNumber].m_fPrice=(float)(l/1000.0);
	memcpy(&l,Data+14,4);
	m_Minute[MinNumber].m_fVolume=(float)(l/100.0);
	memcpy(&l,Data+18,4);
	m_Minute[MinNumber].m_fAmount=(float)(l/10000.0);

	memcpy(&l,Data+22,4);
	m_Minute[MinNumber+1].m_fPrice=(float)(l/1000.0);
	memcpy(&l,Data+26,4);
	m_Minute[MinNumber+1].m_fVolume=(float)(l/100.0);
	memcpy(&l,Data+30,4);
	m_Minute[MinNumber+1].m_fAmount=(float)(l/10000.0);
	/*	fprintf(fp,"%d:\n",MinNumber);

⌨️ 快捷键说明

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