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

📄 fx.c

📁 站长96年写的一个Internet上用的股票行情、分析、交易、资讯程序源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	switch(Fx->range)	{		case MIN_5:	    case MIN_15:	    case MIN_30:	    case MIN_60:			if(!CreateHistoryData(Fx->range,Fx->gpdm))				return FALSE;   			wsprintf(temp,"%s\\%s.%d",szDataPath,Fx->gpdm,Fx->range);			//unlink(temp);		break;	    case WEEK:	    case MONTH:	    case DAY:			wsprintf(temp,"%s\\%s.day",szDataPath,Fx->gpdm);		break;	    default:			return FALSE;	}	  	hFile =OpenFile(temp, &os, OF_READ);	if(hFile ==HFILE_ERROR)	{		Fx->TotalCount=Fx->RecCount=Fx->ShowDot=0;		return FALSE;	}	else	{		Fx->TotalCount=Fx->RecCount=(int)_llseek(hFile,0L,SEEK_END)/sizeof(K_DATA); 		if(Fx->RecCount==0L) return FALSE;		if(Fx->ShowDot<=0) Fx->ShowDot=DEFSHOWDOT;		if(Fx->RecCount>MAXSHOWDOT) Fx->RecCount=MAXSHOWDOT;		if(Fx->ShowDot>Fx->RecCount) Fx->ShowDot=Fx->RecCount;	}	if(!Fx->MainData)		Fx->MainData=(MAIN_DATA *)_fmalloc(sizeof(MAIN_DATA)*Fx->RecCount);	else 		Fx->MainData=(MAIN_DATA *)_frealloc(Fx->MainData,sizeof(MAIN_DATA)*Fx->RecCount);			memset(Fx->MainData,0,sizeof(K_DATA)*Fx->RecCount);	    //取历史数据 加载主数据	for(i=Fx->TotalCount-Fx->RecCount,j=0;i<Fx->TotalCount&&!Fx->IsDataOk;i++)	{	    memset(&DayBuff,0,sizeof(DAY_DATA));	 	if(_llseek(hFile,i*sizeof(DAY_DATA),SEEK_SET)==HFILE_ERROR) 	 	{	 	    _lclose(hFile);	 		return FALSE;    	 	}			if(_lread(hFile,&DayBuff,sizeof(DAY_DATA))==HFILE_ERROR)		{                 			_lclose(hFile);			return FALSE;   	 	}   	 	if(Fx->range>MIN_60)   	 		sprintf(KBuff.date,"%ld",DayBuff.day);   	 	else   	 		sprintf(KBuff.date,"%04ld%02ld%02ld",DayBuff.day/1000,   	 			(DayBuff.day%1000L)/60L,(DayBuff.day%1000L)%60L);   	 	KBuff.ks=DayBuff.kpjg;   	 	KBuff.ss=DayBuff.spjg;   	 	KBuff.zg=DayBuff.zgjg;   	 	KBuff.zd=DayBuff.zdjg;   	 	KBuff.cj=DayBuff.cjss;   	 	    	 	if(KBuff.zg<=0||KBuff.zd<=0||KBuff.ss<=0||KBuff.ks<=0)    	 		continue;        memcpy(&Fx->MainData[j],&KBuff,sizeof(MAIN_DATA));	 	j++;	} 	_lclose(hFile);		Fx->RecCount=(int)j;		//计算周线 	if(Fx->range ==WEEK)	{		i=j=0;		while(i<Fx->RecCount)		{			strcpy(KBuff.date,Fx->MainData[i].date);			KBuff.cj =Fx->MainData[i].cj;			KBuff.zg =Fx->MainData[i].zg;			KBuff.zd =Fx->MainData[i].zd;			KBuff.ks =Fx->MainData[i].ks;			KBuff.ss =Fx->MainData[i].ss;		    		    i++;			while(i<Fx->RecCount&&CompWeek(KBuff.date,Fx->MainData[i].date)==0) 			{				KBuff.cj+=Fx->MainData[i].cj;				KBuff.ss =Fx->MainData[i].ss;				if(KBuff.zg<Fx->MainData[i].zg)					KBuff.zg=Fx->MainData[i].zg;				if(KBuff.zd>Fx->MainData[i].zd)					KBuff.zd=Fx->MainData[i].zd;				i++;			}			strcpy(Fx->MainData[j].date,KBuff.date);            Fx->MainData[j].ks =KBuff.ks;            Fx->MainData[j].ss =KBuff.ss;            Fx->MainData[j].zg =KBuff.zg;            Fx->MainData[j].zd =KBuff.zd;            Fx->MainData[j].cj =KBuff.cj;            j++;		}		Fx->RecCount=(int)j;	} 		//计算月线	if(Fx->range ==MONTH)	{		i=j=0;		while(i<Fx->RecCount)		{			strcpy(KBuff.date,Fx->MainData[i].date);			KBuff.cj =Fx->MainData[i].cj;			KBuff.zg =Fx->MainData[i].zg;			KBuff.zd =Fx->MainData[i].zd;			KBuff.ks =Fx->MainData[i].ks;			KBuff.ss =Fx->MainData[i].ss;		    		    i++;			while(i<Fx->RecCount&&strncmp(KBuff.date,Fx->MainData[i].date,6)==0)			{				KBuff.cj+=Fx->MainData[i].cj;				KBuff.ss =Fx->MainData[i].ss;				if(KBuff.zg<Fx->MainData[i].zg)					KBuff.zg=Fx->MainData[i].zg;				if(KBuff.zd>Fx->MainData[i].zd)					KBuff.zd=Fx->MainData[i].zd;				i++;			}			strcpy(Fx->MainData[j].date,KBuff.date);            Fx->MainData[j].ks =KBuff.ks;            Fx->MainData[j].ss =KBuff.ss;            Fx->MainData[j].zg =KBuff.zg;            Fx->MainData[j].zd =KBuff.zd;            Fx->MainData[j].cj =KBuff.cj;            j++;		}		Fx->RecCount=(int)j;	} 		Fx->ShowDot=DEFSHOWDOT;	if(Fx->ShowDot>Fx->RecCount) Fx->ShowDot=Fx->RecCount ;				//加载K线数据  	InitObjectOne();	//加载成交量数据	InitObjectTwo();	//计算分析数据    for(i=0;i<Fx->PaintPara.num;i++)    {    	if(INIT_TABLE[i].type ==Fx->type)    		break;    }    if(i>=Fx->PaintPara.num)    {    	i=0;    	Fx->type =IDM_FX_MACD;    }    strcpy(Fx->Para->name,INIT_TABLE[i].name);	GetAnalysePara(Fx->Para);          (*INIT_TABLE[i].CreateData)(Fx->MainData,Fx->RecCount,Fx->Data,Fx->Para);    	Fx->CurRecPrt=Fx->RecCount-Fx->ShowDot;	if(Fx->CurRecPrt<0)		Fx->CurRecPrt=0;	Fx->PaintPara.IsScroll=FALSE;	if(Fx->RecCount>0) 		Fx->IsDataOk=TRUE;	else		Fx->IsDataOk=FALSE;	Fx->PaintPara.IsMax=FALSE;	Fx->PaintPara.IsAvLineShow=TRUE;	return TRUE;}int FxExit(LPFX Fx){    int i;     	if(Fx==0) return TRUE;    if(Fx->MainData)    	_ffree(Fx->MainData);    for(i=0;i<10;i++)    {    	//unload object 1    	if(Fx->KxData.v[i]!=NULL)    	{       		_ffree(Fx->KxData.v[i]);    		Fx->KxData.v[i]=NULL;    	}    	//unload object 2    	if(Fx->CjlData.v[i]!=NULL)    	{       		_ffree(Fx->CjlData.v[i]);    		Fx->CjlData.v[i]=NULL;    	}    	//unload object 3        if(Fx->Data->v==NULL)         	continue;    	if(Fx->Data->v[i]!=NULL)    	{    		_ffree(Fx->Data->v[i]);    		Fx->Data->v[i]=NULL;    	}    }    	if(Fx->PaintPara.hFont!=NULL)    	DeleteObject(Fx->PaintPara.hFont);        if(Fx->Para)    	_ffree(Fx->Para);    if(Fx->Data)    	_ffree(Fx->Data);	_ffree(Fx);        _ffree(DIAGR_NAME);    _ffree(INIT_TABLE);	Fx->IsDataOk=FALSE;	return 	TRUE;}void FxFreeData(LPFX Fx){	int i;		if(Fx->MainData)	{    	_ffree(Fx->MainData);    	Fx->MainData=0;    }        for(i=0;i<10;i++)    {    	//unload object 1    	if(Fx->KxData.v[i]!=NULL)    	{       		_ffree(Fx->KxData.v[i]);    		Fx->KxData.v[i]=NULL;    	}    	//unload object 2    	if(Fx->CjlData.v[i]!=NULL)    	{       		_ffree(Fx->CjlData.v[i]);    		Fx->CjlData.v[i]=NULL;    	}    	//unload object 3        if(Fx->Data->v==NULL)         	continue;    	if(Fx->Data->v[i]!=NULL)    	{    		_ffree(Fx->Data->v[i]);    		Fx->Data->v[i]=NULL;    	}    }   		Fx->IsDataOk=FALSE;	Fx->ShowDot=0;} /*BOOL CreateHistoryData(int range,char *gpdm){	char f1[80],f2[80];	OFSTRUCT os;	HFILE hf1,hf2;	GRA_HEAD GraHead;	GRA_DATA GraData;	DAY_DATA HistData,buff;	long ltim;	int i;		sprintf(f1,"%s\\%s.dat",szDataPath,gpdm);	sprintf(f2,"%s\\%s.%d",szDataPath,gpdm,MIN_5);		hf2 =OpenFile(f2,&os,OF_READWRITE|OF_SHARE_DENY_NONE);	if(hf2==HFILE_ERROR)	{		hf2 =OpenFile(f2,&os,OF_READWRITE|OF_SHARE_DENY_NONE|OF_CREATE);		if(hf2==HFILE_ERROR) return FALSE;	}	hf1 =OpenFile(f1,&os,OF_READ|OF_SHARE_DENY_NONE);	if(hf1!=HFILE_ERROR)	{		_lread(hf1,&GraHead,sizeof(GRA_HEAD));		_lseek(hf1,sizeof(GRA_HEAD)+sizeof(GRA_DATA)*(GraHead.minTotal-1),			SEEK_SET);		_lread(hf1,&GraData,sizeof(GRA_DATA));		if(filelength(hf2)>0)		{			_lseek(hf2,-1L*sizeof(DAY_DATA),SEEK_END);			_lread(hf2,&HistData,sizeof(DAY_DATA));					}		if(filelength(hf2)==0||HistData.day/1000<GraHead.dateNum)		{			memset(&HistData,0,sizeof(DAY_DATA));			_lseek(hf1,sizeof(GRA_HEAD),SEEK_SET);		 	for(i=0;i<GraHead.minTotal;i++)		 	{		 				 		if(_lread(hf1,&GraData,sizeof(GRA_DATA))!=sizeof(GRA_DATA))		 			break;		 		if(GraData.tim ==0)		 			continue;		 		if(HistData.day !=0&&GraData.tim>=HistData.day%1000+5)		 		{		 			_lwrite(hf2,&HistData,sizeof(DAY_DATA));		 			memset(&HistData,0,sizeof(DAY_DATA));		 		}			 		if(HistData.day ==0)		 					 			HistData.kpjg =GraData.zjjg +GraHead.zrsp;		 		HistData.spjg =GraData.zjjg+GraHead.zrsp;		 		if(HistData.day ==0)		 			HistData.zgjg =HistData.zdjg =GraData.zjjg+GraHead.zrsp;		 		else		 		{		 			if(HistData.zgjg<GraData.zjjg+GraHead.zrsp)		 				HistData.zgjg=GraData.zjjg+GraHead.zrsp;		 			if(HistData.zdjg>GraData.zjjg+GraHead.zrsp)		 				HistData.zdjg=GraData.zjjg+GraHead.zrsp;		 		}		 		HistData.cjss +=GraData.lc;		 		if(HistData.day ==0)		 			HistData.day =(long)GraHead.dateNum*1000 +GraData.tim;		 	}		 	if(HistData.day!=0)		 		_lwrite(hf2,&HistData,sizeof(DAY_DATA));		 			}		else if(HistData.day/1000==GraHead.dateNum&&				GraData.tim>HistData.day%1000+5)		{						_lseek(hf1,sizeof(GRA_HEAD),SEEK_SET);			ltim =HistData.day%1000;			memset(&HistData,0,sizeof(DAY_DATA));		 	for(i=0;i<GraHead.minTotal;i++)		 	{		 		if(_lread(hf1,&GraData,sizeof(GRA_DATA))!=sizeof(GRA_DATA))		 			break;		 		if(GraData.tim ==0)		 			continue;		 		if(ltim>=GraData.tim)		 			continue;		 		if(HistData.day !=0&&GraData.tim>=HistData.day%1000+5)		 		{		 			_lwrite(hf2,&HistData,sizeof(DAY_DATA));		 			memset(&HistData,0,sizeof(DAY_DATA));		 		}		 					 		if(HistData.day ==0)		 			HistData.kpjg =GraData.zjjg+GraHead.zrsp;		 		HistData.spjg =GraData.zjjg+GraHead.zrsp;		 		if(HistData.day ==0)		 			HistData.zgjg =HistData.zdjg =GraData.zjjg+GraHead.zrsp;		 		else		 		{		 			if(HistData.zgjg<GraData.zjjg+GraHead.zrsp)		 				HistData.zgjg=GraData.zjjg+GraHead.zrsp;		 			if(HistData.zdjg>GraData.zjjg+GraHead.zrsp)		 				HistData.zdjg=GraData.zjjg+GraHead.zrsp;		 		}		 		HistData.cjss +=GraData.lc;		 		if(HistData.day ==0)		 			HistData.day =(long)GraHead.dateNum*1000 +GraData.tim;		 	}				 	if(HistData.day !=0)		 		_lwrite(hf2,&HistData,sizeof(DAY_DATA));		 			}		_lclose(hf1);	}	if(range!=MIN_5)	{		sprintf(f1,"%s\\%s.%d",szDataPath,gpdm,range);			hf1 =OpenFile(f1,&os,OF_WRITE|OF_SHARE_DENY_NONE|OF_CREATE);		if(hf1==HFILE_ERROR) return FALSE;		memset(&HistData,0,sizeof(DAY_DATA));		if(filelength(hf2)/sizeof(DAY_DATA)>MAXSHOWDOT)			_lseek(hf2,-1L*sizeof(DAY_DATA)*MAXSHOWDOT,SEEK_END);		else			_lseek(hf2,0L,SEEK_SET);		for(;;)		{		 	if(_lread(hf2,&buff,sizeof(DAY_DATA))!=sizeof(DAY_DATA))		 		break;		 	if(HistData.day!=0&&buff.day%1000>=HistData.day%1000+atoi(RANGE_NAME[range]))		 	{		 		_lwrite(hf1,&HistData,sizeof(DAY_DATA));		 		memset(&HistData,0,sizeof(DAY_DATA));		 			 	}		 	if(HistData.day ==0) HistData.kpjg =buff.kpjg;		 	HistData.spjg =buff.spjg;		 	if(HistData.day ==0)		 	{		 		HistData.zgjg =buff.zgjg;		 		HistData.zdjg =buff.zdjg;		 	}		 	else		 	{		 		if(HistData.zgjg<buff.zgjg)		 			HistData.zgjg=buff.zgjg;		 		if(HistData.zdjg>buff.zdjg)		 			HistData.zdjg=buff.zdjg;		 	}		 	HistData.cjss +=buff.cjss;		 	if(HistData.day ==0)		 		HistData.day =buff.day;		}		 if(HistData.day !=0)		 	_lwrite(hf1,&HistData,sizeof(DAY_DATA));				_lclose(hf1);	}	_lclose(hf2);	return TRUE;} */BOOL CreateHistoryData(int range,char *gpdm){	char f1[80],f2[80];	OFSTRUCT os;	HFILE hf1,hf2;	GRA_HEAD GraHead;	GRA_DATA GraData;	DAY_DATA HistData,buff;	int i,am_start,am_end,jys,pm_start,pm_end;	int area_start,area_end;		jys =strlen(gpdm)==4?0:1;		am_start =HqTime[jys].am_min_start;	am_end =HqTime[jys].am_min_start+ HqTime[jys].am_min_count;	pm_start =HqTime[jys].pm_min_start;	pm_end =HqTime[jys].pm_min_start+ HqTime[jys].pm_min_count;		area_start =HqTime[jys].am_min_start;	area_end =area_start+5<=am_end?area_start+5:area_start+5+pm_start-am_end;			sprintf(f1,"%s\\%s.dat",szDataPath,gpdm);	sprintf(f2,"%s\\%s.%d",szDataPath,gpdm,MIN_5);		hf2 =OpenFile(f2,&os,OF_READWRITE|OF_SHARE_DENY_NONE|OF_CREATE);	if(hf2==HFILE_ERROR) return FALSE;		hf1 =OpenFile(f1,&os,OF_READ|OF_SHARE_DENY_NONE);	if(hf1!=HFILE_ERROR)	{		_lread(hf1,&GraHead,sizeof(GRA_HEAD));		_lread(hf1,&GraData,sizeof(GRA_DATA));				for(;;)		{			if(GraData.tim>area_end)			{				area_start =area_end;				area_end =area_start+5<=am_end?area_start+5:					area_start>pm_start?area_start+5:area_start+5+pm_start-am_end;								}			else break;			if(area_start>pm_end)				break;		}		

⌨️ 快捷键说明

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