📄 fx.c
字号:
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 + -