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

📄 cl_hq.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
📖 第 1 页 / 共 3 页
字号:
	if(rec_count <=0) return -1;	fldnum =GpkData[jys].fldCount;		buffer =(char *)malloc(reclen+1);	if (buffer==NULL) 	{		ErrMsg(ghWndMain, "GetZqmc:alloc buffer failed!");		return -1;    }    //用记录数定位	if(rec<rec_count)	{		_llseek(GpkData[jys].hf,(long)(headlen+reclen*rec),SEEK_SET);		if(_lread(GpkData[jys].hf,buffer,reclen) ==(UINT)reclen)		{			FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[0], tmp);			if(!strcmp(tmp, gpdm))			{				FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[1],gpmc);		    	free(buffer);				return 0;					}		}	}	//线性搜索	_llseek(GpkData[jys].hf,(long)headlen,SEEK_SET);	for (i=0;i<rec_count;i++) 	{		if(_lread(GpkData[jys].hf,buffer,reclen) !=(UINT)reclen) break;				FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[0], tmp);		if(!strcmp(tmp, gpdm))		{			FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[1],gpmc);		    			    free(buffer);			return 0;		}	}	free(buffer);	return -1;}///////////////////////////////////////////////////功能		:刷新行情数据//参数		://     		jys---交易所编码//返回码	://			0---成功//          -1--失败//修改日期	:1997/10/15int HqRefresh(int jys){	int i, j;	short reclen, headlen ;	int zs_num[2] ={0, 0};	char *buffer;	char *lpTmp;	LPSTR lpFld;	char tmp[50];	long l,bytes;	HQ_REF_DATA LastHq;	char LastZqdm[MAX_ZQDM_SIZE];	    int recCount;			if(HqkData[jys].hf ==-1)	{   		ErrMsg(ghWndMain, "HqRefresh:不能打开行情库文件句柄");		return FALSE;    }	if(jys ==0) MsgLocal("刷新深圳行情");	else MsgLocal("刷新上海行情");		reclen=*(short *)HqkData[jys].dbfStruct.rlen;	headlen=*(short *)HqkData[jys].dbfStruct.hlen;		//recCount =(int)GetDbfRecCount(HqkData[jys].hf,headlen,reclen);		recCount =GetValidRecNum(jys);	//检查行情库记录数有无增减,如有效记录数发生变化,则应从新调整内存 ,	if(recCount ==0)	{		ErrMsg(ghWndMain,"HqRefresh:GetDbfRecCount =0");				return FALSE;	}		//上海行情库少采集一条记录		if(jys ==1) recCount --;		if(recCount <=0)	{			ErrMsg(ghWndMain,"HqRefresh:调整recCount <=0");				return FALSE;			}	//HqData[jys].recCount =recCount;  ///add for deal with GetV function	if(recCount!=HqData[jys].recCount)	{		MsgLocal("HqRefresh:记录数不匹配,重新初始化");		return FALSE;	}	if(HqData[jys].recCount <=0)	{   	    ErrMsg(ghWndMain, "HqRefresh:行情库记录数错");	 	return FALSE;	}	l =HqData[jys].recCount;	if ((buffer=(char *)GlobalAllocPtr(GHND, l*reclen+1))==NULL) 	{		ErrMsg(ghWndMain, "HqRefresh:行情采集分配缓冲区错!");		return FALSE;	}		_llseek(HqkData[jys].hf,(long)headlen,SEEK_SET);        //上海行情库第一条记录不能采集	if(jys ==1)		_llseek(HqkData[jys].hf, reclen, SEEK_CUR);			bytes =hRead(HqkData[jys].hf, buffer, l*reclen);		if(bytes == -1)	{		ErrMsg(ghWndMain,"HqRefresh:bytes == -1");				GlobalFreePtr(buffer);		return FALSE;	}		if(bytes!=l*reclen)	{		ErrMsg(ghWndMain, "HqRefresh:bytes!=l*reclen");		GlobalFreePtr(buffer);		return FALSE;	}		else	{		lpTmp =buffer;		for (i=0;i<HqData[jys].recCount;i++) 		{    			while(UDPBlockingHook());			if(run_cancelled) break;			//拷贝行情老数据,作增量判断			memcpy(&LastHq,&HqData[jys].lpRefData[i],				sizeof(HQ_REF_DATA));			//拷贝股票代码,以下用于股票数量加减判断			strcpy(LastZqdm,HqData[jys].lpPreData[i].zqdm);					for(j =0; j<HQ_FLDS_COUNT; j++)			{				lpFld =GetHqFldPos(jys, i, j);				if(HqFldPoss[jys][j] >=0)				{					FldToString(lpTmp,(FieldStruct *)&HqkData[jys].fldStruct[HqFldPoss[jys][j]],								tmp);					switch(HqFldTypes[j])					{						case FLD_TYPE_STRING:							strcpy(lpFld, tmp);						break;						case FLD_TYPE_FLOAT:							*(float *)lpFld =(float)atof(tmp);						break;						case FLD_TYPE_LONG:							*(int *)lpFld =atol(tmp);						break;					}				}			}			//判断股票代码有无改变,如改变,则应获取正确的行情老数据			//如股票代码有改变,则相应的名称也应改变			if(strcmp(HqData[jys].lpPreData[i].zqdm,LastZqdm)!=0)			{		    	//重读股票名称				if(jys==0)				{					if(GetZqmc(jys,i,HqData[jys].lpPreData[i].zqdm,						HqData[jys].lpPreData[i].zqmc)!=0)					{						strcpy(HqData[jys].lpPreData[i].zqmc,							HqData[jys].lpPreData[i].zqdm);					}				}				if(jys==1)				{					FldToString(lpTmp,(FieldStruct *)&HqkData[jys].fldStruct[1],						HqData[jys].lpPreData[i].zqmc);							}				//放弃该次采集,处理下一条				lpTmp +=reclen;				continue;			}					if(IsGuoZhai(jys, i))				HqData[jys].lpRefData[i].cjss /=10;     //单位:手			else				HqData[jys].lpRefData[i].cjss /=100;    //单位:手			HqData[jys].lpRefData[i].cjje /=1000;       //单位:万			if(jys ==1)			{				//FldToString(lpTmp,(FieldStruct *)&HqkData[jys].fldStruct[1],				//	HqData[jys].lpPreData[i].zqmc);						if(clIsZsRec(jys, i))				{					RefreshShZs(lpTmp, zs_num[1]);					zs_num[1] ++;				}				else GetShMmp(FALSE, i, lpTmp);			}			HqData[jys].lpRefData[i].lc =				HqData[jys].lpRefData[i].cjss -LastHq.cjss;			//没有成交	,处理下一条			if(HqData[jys].lpRefData[i].lc <=0)			{				lpTmp +=reclen;				continue;			}					//有成交,计算涨跌              			if(HqData[jys].lpPreData[i].zrsp ==0				||HqData[jys].lpRefData[i].zjcj ==0)				HqData[jys].lpRefData[i].zdf =0;			else				HqData[jys].lpRefData[i].zdf =						(HqData[jys].lpRefData[i].zjcj						- HqData[jys].lpPreData[i].zrsp)						/HqData[jys].lpPreData[i].zrsp*100;					//如果是指数,则不处理			if(!clIsZsRec(jys, i))			{				GetGraData(jys, i, &LastHq);				if(HqData[jys].lpRefData[i].lc >0)					WriteGraData(jys, i);			}					lpTmp +=reclen;		}       	}	GlobalFreePtr(buffer);	MsgLocal("OK.");		if(jys ==0)	{		ReadSzMmp(FALSE);		RefreshSzZs();	}		GetMaxMin10(jys);	GetDpData(jys, FALSE);		return TRUE;}int ReadSzZsFirst(void){	int i ; 	short reclen, headlen;	char *buffer;    char tmp[100];    	if(SzZskData.hf <0)	{		    ErrMsg(ghWndMain, "ReadSzZsFirst:SzZskData.hf <0!");		return FALSE;    }	DpData[0].zsCount =*(int *)SzZskData.dbfStruct.recnum;		if(DpData[0].zsCount >15) DpData[0].zsCount =15;		reclen=*(short *)SzZskData.dbfStruct.rlen;	headlen=*(short *)SzZskData.dbfStruct.hlen;		if(DpData[0].zsCount <=0) 	{	    ErrMsg(ghWndMain, "ReadSzZsFirst:DpData[0].recCount <=0!");		return FALSE;	}		buffer =(char *)malloc(reclen*DpData[0].zsCount+1);	if (buffer==NULL) 	{		ErrMsg(ghWndMain, "ReadSzZsFirst:alloc buffer failed!");		return FALSE;    }	memset(buffer, 0, reclen*DpData[0].zsCount+1);		_llseek(SzZskData.hf,(long)headlen,SEEK_SET);	_lread(SzZskData.hf,buffer, reclen*DpData[0].zsCount);	for (i=0;i<DpData[0].zsCount;i++) 	{		FldToString(buffer+i*reclen,			(FieldStruct *)&SzZskData.fldStruct[2],tmp);		DpData[0].sp[i] =(float)atof(tmp);		FldToString(buffer+i*reclen,			(FieldStruct *)&SzZskData.fldStruct[6],			tmp);		DpData[0].zs[i] =(float)atof(tmp);		DpData[0].zd[i] =DpData[0].zs[i] -DpData[0].sp[i];	}	free(buffer);	return TRUE;}int GetShZsFirst(LPSTR lpbuf, int zsnum){	char tmp[100];		if(zsnum >15) return 0;	FldToString(lpbuf,(FieldStruct *)&HqkData[1].fldStruct[7],				tmp);	DpData[1].zs[zsnum] =(float)atof(tmp);	FldToString(lpbuf,(FieldStruct *)&HqkData[1].fldStruct[2],				tmp);	DpData[1].sp[zsnum] =(float)atof(tmp);	//FldToString(lpbuf,(FieldStruct *)&HqkData[1].fldStruct[3],	//			tmp);	//if((float)atof(tmp)!=0.00)	//	DpData[1].zd[zsnum] =(float)atof(tmp)-DpData[1].sp[zsnum];    //else		DpData[1].zd[zsnum] =DpData[1].zs[zsnum]-DpData[1].sp[zsnum];    	return 0;}int GetShMmp(BOOL fFirst, int rec_num, LPSTR buffer){	int i;	char tmp[100];    double f1, f2;	MMP LastMmp;    long tmpl;    float tmpf;    	memcpy(&LastMmp, &MmpData[1].lpMmp[rec_num], sizeof(MMP));	MmpData[1].lpMmp[rec_num].jwBuy[0]		=HqData[1].lpRefData[rec_num].zgjm;	MmpData[1].lpMmp[rec_num].jwSell[0]		=HqData[1].lpRefData[rec_num].zdjm;	f1 =f2 =0;	for(i =0; i<3; i++)	{		FldToString(buffer,(FieldStruct *)&HqkData[1].fldStruct[12+i*2],			tmp);		MmpData[1].lpMmp[rec_num].slBuy[i] =atol(tmp)/100;		if(i !=2)		{			FldToString(buffer,(FieldStruct *)&HqkData[1].fldStruct[12+i*2+1],				tmp);			MmpData[1].lpMmp[rec_num].jwBuy[i+1] =(float)atof(tmp);		}		f2+=MmpData[1].lpMmp[rec_num].slBuy[i];	}	for(i =0; i<3; i++)	{		FldToString(buffer,(FieldStruct *)&HqkData[1].fldStruct[17+i*2],			tmp);		MmpData[1].lpMmp[rec_num].slSell[i] =atol(tmp)/100;		if(i !=2)		{			FldToString(buffer,(FieldStruct *)&HqkData[1].fldStruct[17+i*2+1],				tmp);			MmpData[1].lpMmp[rec_num].jwSell[i+1] =(float)atof(tmp);		}		f1+=MmpData[1].lpMmp[rec_num].slSell[i];	}		tmpl=MmpData[1].lpMmp[rec_num].slSell[0];	tmpf=MmpData[1].lpMmp[rec_num].jwSell[0];	MmpData[1].lpMmp[rec_num].slSell[0]=		MmpData[1].lpMmp[rec_num].slSell[2];	MmpData[1].lpMmp[rec_num].jwSell[0]=		MmpData[1].lpMmp[rec_num].jwSell[2];	MmpData[1].lpMmp[rec_num].slSell[2]=tmpl;	MmpData[1].lpMmp[rec_num].jwSell[2]=tmpf;	                                       	if(f1+f2 ==0)		HqData[1].lpRefData[rec_num].wb =0;	else		HqData[1].lpRefData[rec_num].wb =(float)((f2-f1)/(f2+f1));                                               		if(memcmp(&LastMmp, &MmpData[1].lpMmp[rec_num], sizeof(MMP)))		MmpData[1].lpChanged[rec_num] =TRUE;	else MmpData[1].lpChanged[rec_num] =FALSE;	return 0;}int ReadSzMmp(BOOL fFirst){	int i, j ;	short reclen, headlen;	char *buffer;	char *lpTmp;	char tmp[100];	double f1, f2;	int rec_count;	MMP LastMmp;	long bytes;		if(SzMmpkData.hf <0)	{	    ErrMsg(ghWndMain, "ReadSzMmp:SzMmpkData.hf <0!");		return FALSE;	}		MsgLocal("read Sz_Mmp...");		rec_count =HqData[0].recCount*6;		reclen=*(short *)SzMmpkData.dbfStruct.rlen;	headlen=*(short *)SzMmpkData.dbfStruct.hlen;		//加入以下代码处理买卖盘库尚未传完的情况	i=(int)GetDbfRecCount(SzMmpkData.hf,headlen,reclen);	if(rec_count>i) rec_count =i;			buffer =(char *)GlobalAllocPtr(GHND, (long)rec_count*reclen+1);	if (buffer==NULL) 	{		ErrMsg(ghWndMain, "ReadSzMmp:alloc buffer failed!");		return FALSE;	}		_llseek(SzMmpkData.hf,(long)headlen,SEEK_SET);		bytes =hRead(SzMmpkData.hf, buffer, (long)rec_count*reclen);		if(bytes ==-1)	{			MsgLocal("HqRefresh:重新初化szmmpk");		GlobalFreePtr(buffer);		return FALSE;		}		if(bytes !=(long)rec_count*reclen)	{		ErrMsg(ghWndMain, "error read sz_mmpk");	}	else	{		lpTmp =buffer;	for(i =0; i<rec_count/6; i++)	{		while(UDPBlockingHook());		if(run_cancelled) break;				if(clIsZsRec(0, i)) continue;		memcpy(&LastMmp, &MmpData[0].lpMmp[i], sizeof(MMP));		f1 =f2 =0;		//应加入股票代码检查		for(j =0; j<3; j++)		{			//if(_lread(SzMmpkData.hf,buffer, reclen) !=(UINT)reclen) break;			//if(fFirst && j==0)			//      FldToString(lpTmp,			//              (FieldStruct *)&SzMmpkData.fldStruct[0],			//              MmpData[0].lpMmp[i].zqdm);			FldToString(lpTmp,(FieldStruct *)&SzMmpkData.fldStruct[2],				tmp);			MmpData[0].lpMmp[i].jwSell[j] =(float)atof(tmp);			FldToString(lpTmp,(FieldStruct *)&SzMmpkData.fldStruct[4],				tmp);			MmpData[0].lpMmp[i].slSell[j] =atol(tmp)/100;			f1+=(double)MmpData[0].lpMmp[i].slSell[j];			lpTmp +=reclen;		}		if(j !=3) break;		for(j =0; j<3; j++)		{			//if(_lread(SzMmpkData.hf,buffer, reclen) !=(UINT)reclen) break;;			FldToString(lpTmp,(FieldStruct *)&SzMmpkData.fldStruct[2],				tmp);			MmpData[0].lpMmp[i].jwBuy[j] =(float)atof(tmp);			FldToString(lpTmp,(FieldStruct *)&SzMmpkData.fldStruct[3],				tmp);			MmpData[0].lpMmp[i].slBuy[j] =atol(tmp)/100;			f2+=(double)MmpData[0].lpMmp[i].slBuy[j];			lpTmp +=reclen;		}                                               		if(j !=3) break;		if(f1+f2 !=0)			HqData[0].lpRefData[i].wb					=(float)((f2-f1)/(f1+f2));		else HqData[0].lpRefData[i].wb =0;		if(memcmp(&LastMmp, &MmpData[0].lpMmp[i], sizeof(MMP)))			MmpData[0].lpChanged[i] =TRUE;		else MmpData[0].lpChanged[i] =FALSE;		//rec_num++;	}	}	//没有初始化的买卖盘数据	if(rec_count/6<HqData[0].recCount)	{         		memset(&MmpData[0].lpMmp[rec_count/6],0,			sizeof(MMP)*(HqData[0].recCount -rec_count/6));	}	GlobalFreePtr(buffer);	MsgLocal("OK.");	return TRUE;}int RefreshSzZs(void){	int i ;	short reclen, headlen;	char *buffer;	char tmp[100];	static int times =0;	if(SzZskData.hf <0)		return 0;		reclen=*(short *)SzZskData.dbfStruct.rlen;	headlen=*(short *)SzZskData.dbfStruct.hlen;		buffer =(char *)malloc(reclen*DpData[0].zsCount+1);	if (buffer==NULL) 	{		ErrMsg(ghWndMain, "RefreshSzZs:alloc buffer failed!");		return -1;	}	memset(buffer, 0, reclen*DpData[0].zsCount+1);		_llseek(SzZskData.hf,(long)headlen,SEEK_SET);	_lread(SzZskData.hf,buffer, reclen*DpData[0].zsCount);	for (i=0;i<DpData[0].zsCount;i++) 	{		FldToString(buffer+i*reclen,			(FieldStruct *)&SzZskData.fldStruct[6],			tmp);		DpData[0].zs[i] =(float)atof(tmp);		DpData[0].zd[i] =DpData[0].zs[i]-DpData[0].sp[i];	}	free(buffer);	return 0;}int RefreshShZs(LPSTR lpbuf, int zsnum){	char tmp[100];		if(zsnum >15) return 0;	FldToString((char *)lpbuf,(FieldStruct *)&HqkData[1].fldStruct[7],				tmp);	DpData[1].zs[zsnum] =(float)atof(tmp);    	FldToString((char *)lpbuf,(FieldStruct *)&HqkData[1].fldStruct[2],				tmp);	DpData[1].sp[zsnum] =(float)atof(tmp);    	DpData[1].zd[zsnum] =DpData[1].zs[zsnum]-DpData[1].sp[zsnum];	return 0;}int GetSzZqmc(int jys){	int i, j ;	short reclen, headlen, fldnum;	int rec_count;	char *buffer;	char tmp[40];		if(GpkData[jys].hf ==-1)	{		ErrMsg(ghWndMain, "GetSzZqmc:GpkData[jys].hf ==-1!");		return FALSE;	}	rec_count =*(int *)GpkData[jys].dbfStruct.recnum;	if(rec_count <HqData[jys].recCount) rec_count =HqData[jys].recCount;		fldnum =GpkData[jys].fldCount;	reclen=*(short *)GpkData[jys].dbfStruct.rlen;	headlen=*(short *)GpkData[jys].dbfStruct.hlen;	if(rec_count <=0)	{   	     ErrMsg(ghWndMain, "GetSzZqmc:rec_count <=0!");		 return FALSE;	}	buffer =(char *)malloc(reclen+1);	if (buffer==NULL) 	{		ErrMsg(ghWndMain, "GetSzZqmc:alloc buffer failed!");		return FALSE;    }		_llseek(GpkData[jys].hf,(long)headlen,SEEK_SET);	for (i=0;i<rec_count;i++) 	{		if(_lread(GpkData[jys].hf,buffer,reclen) !=(UINT)reclen) break;				// get zqdm		FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[0], tmp);		for(j =0; j<HqData[jys].recCount; j++)			if(!strcmp(tmp, HqData[jys].lpPreData[j].zqdm))				break;		if(j <HqData[jys].recCount)			FldToString(buffer,(FieldStruct *)&GpkData[jys].fldStruct[1],						HqData[jys].lpPreData[j].zqmc);	}	if(i <rec_count)	{		for(; i<HqData[jys].recCount; i++)		{			strcpy(HqData[jys].lpPreData[i].zqmc,					HqData[jys].lpPreData[i].zqdm);		}	}	free(buffer);		return TRUE;}int CheckZqdm(LPSTR lpzqdm){	return 0;}extern long tim_seconds;//取大盘数据int GetDpData(int jys, BOOL fFirst){	int i;	//int jys;	float oldjg;	long b_lc =0L, s_lc =0L;	HQ_REF_DATA LastHq;	DP_DATA LastDp;

⌨️ 快捷键说明

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