📄 cl_hq.c
字号:
int rec_num; memcpy(&LastDp, &DpData[jys], sizeof(DP_DATA)); DpData[jys].cjzje =CalcCjzje(jys); DpData[jys].npbl =CalcNpbl(jys); DpData[jys].cjss =CalcCjss(jys); DpData[jys].upCount =DpData[jys].downCount =DpData[jys].equalCount =0; for(i =0; i<HqData[jys].recCount; i++) { oldjg =HqData[jys].lpRefData[i].zjcj; //如果不是指数,则计算升跌家数 if(!clIsZsRec(jys, i)) { if(HqData[jys].lpRefData[i].zdf >0) DpData[jys].upCount ++; else if(HqData[jys].lpRefData[i].zdf <0) DpData[jys].downCount ++; else DpData[jys].equalCount ++; } else { memcpy(&LastHq, &HqData[jys].lpRefData[i], sizeof(HQ_REF_DATA)); HqData[jys].lpRefData[i].cjss =DpData[jys].cjss; HqData[jys].lpRefData[i].cjje =DpData[jys].cjzje; HqData[jys].lpRefData[i].npzl =(int)((double)DpData[jys].npbl*(double)DpData[jys].cjss); HqData[jys].lpRefData[i].wb =0; HqData[jys].lpRefData[i].lc =DpData[jys].cjss-LastDp.cjss; if(HqData[jys].lpRefData[i].lc <0) HqData[jys].lpRefData[i].lc =0L; if(jys ==0) rec_num =HqData[jys].recCount-i; else rec_num =i; if(!fFirst) { if(tim_seconds -zs_times[jys][rec_num] >gnHqRefreshTime) { GraphData[jys].lpGraData[i].lc = DpData[jys].cjss-oldDpCjss2[jys][rec_num]; GetDpGraData(jys, i); if(GraphData[jys].lpGraData[i].lc) WriteGraData(jys, i); zs_times[jys][rec_num] =tim_seconds; oldDpCjss2[jys][rec_num] =DpData[jys].cjss; } } else { zs_times[jys][rec_num] =tim_seconds; oldDpCjss2[jys][rec_num] =DpData[jys].cjss; } } } if(memcmp(&LastDp, &DpData[jys], sizeof(DP_DATA))) return 1; return 0;}int GetMaxMin10(int jys){ int ret =0; MAXMIN_DATA LastMaxMin[2]; memcpy(&LastMaxMin[0], &MaxMinData[jys][0], sizeof(MAXMIN_DATA)); memcpy(&LastMaxMin[1], &MaxMinData[jys][1], sizeof(MAXMIN_DATA)); GetMaxZd10(jys); GetMaxZdf10(jys); GetMaxCjss10(jys); GetMaxCjje10(jys); if(memcmp(&MaxMinData[jys][0], &LastMaxMin[0], sizeof(MAXMIN_DATA))) ret++; GetMinZd10(jys); GetMinZdf10(jys); GetMinCjss10(jys); GetMinCjje10(jys); if(memcmp(&MaxMinData[jys][1], &LastMaxMin[1], sizeof(MAXMIN_DATA))) ret+=2; return ret;}void GetMaxZdf10(int jys){ GetFloatSort10(jys, 8, SORT_UP, &MaxMinData[jys][0].recNum[0][0]);}void GetMinZdf10(int jys){ GetFloatSort10(jys, 8, SORT_DOWN, &MaxMinData[jys][1].recNum[0][0]);}void GetMaxCjss10(int jys){ GetLongSort10(jys, 9, SORT_UP, &MaxMinData[jys][0].recNum[2][0]);}void GetMinCjss10(int jys){ GetLongSort10(jys, 9, SORT_DOWN, &MaxMinData[jys][1].recNum[2][0]);}void GetMaxCjje10(int jys){ GetLongSort10(jys, 13, SORT_UP, &MaxMinData[jys][0].recNum[3][0]);}void GetMinCjje10(int jys){ GetLongSort10(jys, 13, SORT_DOWN, &MaxMinData[jys][1].recNum[3][0]);}void GetMaxZd10(int jys){ int key, i, j, n; float fval, f1, f; int count =0; int fldNum =8; for(i =0; i<10; i++) MaxMinData[jys][0].recNum[1][i] =i; for(i =0; i<HqData[jys].recCount; i++) keys[i] =i; for(i =0; i<HqData[jys].recCount; i++) { if(!IsMaxMin(jys, keys[i])) continue; if(HqData[jys].lpRefData[keys[i]].zjcj ==0) continue; key =i; if(HqData[jys].lpPreData[keys[key]].zrsp) fval =HqData[jys].lpRefData[keys[key]].zjcj -HqData[jys].lpPreData[keys[key]].zrsp; else fval =-100; for(j =i+1; j<HqData[jys].recCount; j++) { if(!IsMaxMin(jys, keys[j])) continue; if(HqData[jys].lpRefData[keys[j]].zjcj ==0) continue; if(HqData[jys].lpPreData[keys[j]].zrsp) f1 =HqData[jys].lpRefData[keys[j]].zjcj -HqData[jys].lpPreData[keys[j]].zrsp; else f1 =-100; f =f1-fval; if(f1>fval) { key =j; fval =f1; } } if(key >i) { n =keys[i]; keys[i] =keys[key]; keys[key] =n; } MaxMinData[jys][0].recNum[1][count] =key; if(++count >=10) break; }}void GetMinZd10(int jys){ int key, i, j, n; float fval, f1, f; int count =0; int fldNum =8; for(i =0; i<10; i++) MaxMinData[jys][1].recNum[1][i] =i; for(i =0; i<HqData[jys].recCount; i++) keys[i] =i; for(i =0; i<HqData[jys].recCount; i++) { if(!IsMaxMin(jys, keys[i])) continue; if(HqData[jys].lpRefData[keys[i]].zjcj ==0) continue; key =i; if(HqData[jys].lpPreData[keys[key]].zrsp) fval =HqData[jys].lpRefData[keys[key]].zjcj -HqData[jys].lpPreData[keys[key]].zrsp; else fval =100; for(j =i+1; j<HqData[jys].recCount; j++) { if(!IsMaxMin(jys, keys[j])) continue; if(HqData[jys].lpRefData[keys[j]].zjcj ==0) continue; if(HqData[jys].lpPreData[keys[j]].zrsp) f1 =HqData[jys].lpRefData[keys[j]].zjcj -HqData[jys].lpPreData[keys[j]].zrsp; else f1 =100; f =f1-fval; if(f1<fval) { key =j; fval =f1; } } if(key >i) { n =keys[i]; keys[i] =keys[key]; keys[key] =n; } MaxMinData[jys][1].recNum[1][count] =key; if(++count >=10) break; }}BOOL CheckTpbz(int jys, LPSTR buffer){ return FALSE;}BOOL clIsZsRec(int jys, int rec_num){ if(jys ==0) { if(!strncmp(HqData[jys].lpPreData[rec_num].zqdm, "99", 2)) return TRUE; } else if(!strncmp(HqData[jys].lpPreData[rec_num].zqdm, "0000", 4) && (HqData[jys].lpPreData[rec_num].zqdm[4] =='0' ||HqData[jys].lpPreData[rec_num].zqdm[4] =='1')) return TRUE; return FALSE;}LPSTR GetHqFldPos(int jys, int rec_num, int fld_num){ switch(fld_num) { case 0: return (LPSTR)&HqData[jys].lpPreData[rec_num].zqdm[0]; case 1: return (LPSTR)&HqData[jys].lpPreData[rec_num].zrsp; case 2: return (LPSTR)&HqData[jys].lpPreData[rec_num].jrkp; case 3: return (LPSTR)&HqData[jys].lpRefData[rec_num].zgjg; case 4: return (LPSTR)&HqData[jys].lpRefData[rec_num].zdjg; case 5: return (LPSTR)&HqData[jys].lpRefData[rec_num].zgjm; case 6: return (LPSTR)&HqData[jys].lpRefData[rec_num].zdjm; case 7: return (LPSTR)&HqData[jys].lpRefData[rec_num].zjcj; case 8: return (LPSTR)&HqData[jys].lpRefData[rec_num].zdf; case 9: return (LPSTR)&HqData[jys].lpRefData[rec_num].cjss; case 10: return (LPSTR)&HqData[jys].lpRefData[rec_num].lc; case 11: return (LPSTR)&HqData[jys].lpRefData[rec_num].npzl; case 12: return (LPSTR)&HqData[jys].lpRefData[rec_num].wb; case 13: return (LPSTR)&HqData[jys].lpRefData[rec_num].cjje; }}int GetFloatSort10(int jys, short fldNum, int type, short *lpKeys){ int key, i, j, n; float fval, f1, f; int count =0; for(i =0; i<10; i++) lpKeys[i] =i; for(i =0; i<HqData[jys].recCount; i++) keys[i] =i; for(i =0; i<HqData[jys].recCount; i++) { if(!IsMaxMin(jys, keys[i])) continue; if(HqData[jys].lpRefData[keys[i]].zjcj ==0) continue; key =i; fval =*(float*)GetHqFldPos(jys, keys[key], fldNum); for(j =i+1; j<HqData[jys].recCount; j++) { if(!IsMaxMin(jys, keys[j])) continue; if(HqData[jys].lpRefData[keys[j]].zjcj ==0) continue; f1 =*(float *)GetHqFldPos(jys, keys[j], fldNum); f =f1-fval; if(type ==SORT_UP && f>.0) { key =j; fval =f1; } else if(type ==SORT_DOWN && f<.0) { key =j; fval =f1; } } if(key >i) { n =keys[i]; keys[i] =keys[key]; keys[key] =n; } lpKeys[count] =key; if(++count >=10) break; } return 0;}int GetLongSort10(int jys, short fldNum, int type, short *lpKeys){ int key, i, j, n; int lval, l1, l; int count =0; for(i =0; i<10; i++) lpKeys[i] =i; for(i =0; i<HqData[jys].recCount; i++) keys[i] =i; for(i =0; i<HqData[jys].recCount; i++) { if(!IsMaxMin(jys, keys[i])) continue; if(HqData[jys].lpRefData[keys[i]].zjcj ==0) continue; key =i; lval =*(int*)GetHqFldPos(jys, keys[key], fldNum); for(j =i+1; j<HqData[jys].recCount; j++) { if(!IsMaxMin(jys, keys[j])) continue; if(HqData[jys].lpRefData[keys[j]].zjcj ==0) continue; l1 =*(int *)GetHqFldPos(jys, keys[j], fldNum); l =l1-lval; if(type ==SORT_UP && l>.0) { key =j; lval =l1; } else if(type ==SORT_DOWN && l<.0) { key =j; lval =l1; } } if(key >i) { n =keys[i]; keys[i] =keys[key]; keys[key] =n; } lpKeys[count] =key; if(++count >=10) break; } return 0;}long CalcCjzje(int jys){ int i; long l =0; for(i =0; i<HqData[jys].recCount; i++) { if(jys==0) { if(HqData[jys].lpPreData[i].zqdm[0]=='1'||HqData[jys].lpPreData[i].zqdm[0]=='9') continue; if(HqData[jys].lpPreData[i].zqdm[0]=='3'||HqData[jys].lpPreData[i].zqdm[0]=='8') continue; } if(jys==1) { //if(strncmp(HqData[jys].lpPreData[i].zqdm,"70",2)!=0&&strncmp(HqData[jys].lpPreData[i].zqdm,"71",2)!=0) { if(HqData[jys].lpPreData[i].zqdm[0]=='0'||HqData[jys].lpPreData[i].zqdm[0]=='1'|| HqData[jys].lpPreData[i].zqdm[0]=='2'||HqData[jys].lpPreData[i].zqdm[0]=='7') continue; } } if(!clIsZsRec(jys, i)) l +=HqData[jys].lpRefData[i].cjje; } return l;}float CalcNpbl(int jys){ int i; long double lfbuy =0, lftotal =0; float lf; for(i =0; i<HqData[jys].recCount; i++) { if(jys==0) { if(HqData[jys].lpPreData[i].zqdm[0]=='1'||HqData[jys].lpPreData[i].zqdm[0]=='9') continue; if(HqData[jys].lpPreData[i].zqdm[0]=='3'||HqData[jys].lpPreData[i].zqdm[0]=='8') continue; } if(jys==1) { //if(strncmp(HqData[jys].lpPreData[i].zqdm,"70",2)!=0&&strncmp(HqData[jys].lpPreData[i].zqdm,"71",2)!=0) { if(HqData[jys].lpPreData[i].zqdm[0]=='0'||HqData[jys].lpPreData[i].zqdm[0]=='1'|| HqData[jys].lpPreData[i].zqdm[0]=='2'||HqData[jys].lpPreData[i].zqdm[0]=='7') continue; } } if(!clIsZsRec(jys, i)) { lfbuy +=(long double)HqData[jys].lpRefData[i].npzl; lftotal +=(long double)HqData[jys].lpRefData[i].cjss; } } if(lftotal ==0) return (float)0; lf =(float)(lfbuy/lftotal); return lf;}long CalcCjss(int jys){ int i; long l =0; for(i =0; i<HqData[jys].recCount; i++) { if(jys==0) { if(HqData[jys].lpPreData[i].zqdm[0]=='1'||HqData[jys].lpPreData[i].zqdm[0]=='9') continue; if(HqData[jys].lpPreData[i].zqdm[0]=='3'||HqData[jys].lpPreData[i].zqdm[0]=='8') continue; } if(jys==1) { //if(strncmp(HqData[jys].lpPreData[i].zqdm,"70",2)!=0&&strncmp(HqData[jys].lpPreData[i].zqdm,"71",2)!=0) { if(HqData[jys].lpPreData[i].zqdm[0]=='0'||HqData[jys].lpPreData[i].zqdm[0]=='1'|| HqData[jys].lpPreData[i].zqdm[0]=='2'||HqData[jys].lpPreData[i].zqdm[0]=='7') continue; } } if(!clIsZsRec(jys, i)) l +=HqData[jys].lpRefData[i].cjss; } return l;}int UDPBlockingHook(void){ MSG msg; if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if(!ghWndMain || !IsDialogMessage(ghWndMain, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); if(msg.message ==WM_QUIT) { PostQuitMessage(0); run_cancelled =TRUE; return FALSE; } } return TRUE; } return FALSE;}int clHqAllocMem(int jys, int recCount){ static MAX_REC_NUM =1000; unsigned int ReqBytes; if(recCount>MAX_REC_NUM) return -1; if(HqData[jys].recCount ==0) { HqData[jys].recCount =recCount; ReqBytes =MAX_REC_NUM*sizeof(HQ_PRE_DATA); HqData[jys].lpPreData =(LPHQ_PRE_DATA)GlobalAllocPtr(GHND, ReqBytes); ReqBytes =MAX_REC_NUM*sizeof(HQ_REF_DATA); HqData[jys].lpRefData =(LPHQ_REF_DATA)GlobalAllocPtr(GHND, ReqBytes); ReqBytes =MAX_REC_NUM*HQ_REF_ITEM_COUNT; HqData[jys].lpbChanged =(BYTE *)GlobalAllocPtr(GHND, ReqBytes); ReqBytes =MAX_REC_NUM*sizeof(GRA_DATA); GraphData[jys].lpGraData =(LPGRA_DATA)GlobalAllocPtr(GHND, HqData[jys].recCount*sizeof(GRA_DATA)); ReqBytes =MAX_REC_NUM*sizeof(GRA_HEAD); GraphData[jys].lpGraHead =(LPGRA_HEAD)GlobalAllocPtr(GHND, ReqBytes); ReqBytes =MAX_REC_NUM*sizeof(MMP); MmpData[jys].lpMmp =(LPMMP)GlobalAllocPtr(GHND, ReqBytes); ReqBytes =MAX_REC_NUM; MmpData[jys].lpChanged =(BYTE *)GlobalAllocPtr(GHND, ReqBytes); ReqBytes =MAX_REC_NUM*sizeof(HQ_REF_DATA_V202)+sizeof(short); LzwData202[jys].recCount =(short *)GlobalAllocPtr(GHND, ReqBytes); LzwData202[jys].lpData202 =(LPHQ_REF_DATA_V202)(LzwData202[jys].recCount +1); } /* else if(HqData[jys].recCount <recCount) { HqData[jys].recCount =recCount; HqData[jys].lpPreData =(LPHQ_PRE_DATA)GlobalReAllocPtr(HqData[jys].lpPreData, HqData[jys].recCount*sizeof(HQ_PRE_DATA), GMEM_MOVEABLE); HqData[jys].lpRefData =(LPHQ_REF_DATA)GlobalReAllocPtr(HqData[jys].lpRefData, HqData[jys].recCount*sizeof(HQ_REF_DATA), GMEM_MOVEABLE); HqData[jys].lpbChanged =(BYTE *)GlobalReAllocPtr(HqData[jys].lpbChanged, HqData[jys].recCount*HQ_REF_ITEM_COUNT, GMEM_MOVEABLE); GraphData[jys].lpGraHead =(LPGRA_HEAD)GlobalReAllocPtr(GraphData[jys].lpGraHead, HqData[jys].recCount*sizeof(GRA_HEAD),GMEM_MOVEABLE); GraphData[jys].lpGraData =(LPGRA_DATA)GlobalReAllocPtr(GraphData[jys].lpGraData, HqData[jys].recCount*sizeof(GRA_DATA),GMEM_MOVEABLE); MmpData[jys].lpMmp =(LPMMP)GlobalReAllocPtr(MmpData[jys].lpMmp, HqData[jys].recCount*sizeof(MMP), GMEM_MOVEABLE); MmpData[jys].lpChanged =(BYTE *)GlobalReAllocPtr(MmpData[jys].lpChanged, HqData[jys].recCount, GHND); LzwData202[jys].recCount =(short *)GlobalReAllocPtr(LzwData202[jys].recCount, HqData[jys].recCount*sizeof(HQ_REF_DATA_V202)+sizeof(short), GMEM_MOVEABLE); LzwData202[jys].lpData202 =(LPHQ_REF_DATA_V202)( LzwData202[jys].recCount+1); } */ if(HqData[jys].lpPreData ==NULL) { ErrMsg(ghWndMain, "alloc mem pre data failed!"); return -1; } if(HqData[jys].lpRefData ==NULL) { ErrMsg(ghWndMain, "alloc mem ref data failed!"); return -1; } if(HqData[jys].lpbChanged ==NULL) { ErrMsg(ghWndMain, "alloc mem chg data failed!"); return -1; } if(GraphData[jys].lpGraData ==NULL || GraphData[jys].lpGraHead ==NULL) { ErrMsg(ghWndMain, "alloc mem graph data failed!"); return -1; } if(MmpData[jys].lpMmp ==NULL) { ErrMsg(ghWndMain, "alloc mem mmp failed!"); return -1; } if(MmpData[jys].lpChanged ==NULL) { ErrMsg(ghWndMain, "alloc mem mmp changed failed!"); return -1; } if(LzwData202[jys].recCount==NULL) { ErrMsg(ghWndMain, "alloc mem DataV202 failed!"); return -1; } return 0; }BOOL IsMaxMin(int jys, int rec_num){ char c; c =HqData[jys].lpPreData[rec_num].zqdm[0]; if(clIsZsRec(jys, rec_num)) return FALSE; if(jys ==0) { if(c =='0' || c =='4') return TRUE; } else if((c =='0' && !clIsZsRec(jys, rec_num)) || c =='5' || c=='6') return TRUE; return FALSE;}BOOL IsB(int jys, int rec_num){ if((jys ==0 && HqData[jys].lpPreData[rec_num].zqdm[0] =='2') || (jys ==1 && HqData[jys].lpPreData[rec_num].zqdm[0] =='2')) return TRUE; return FALSE;}BOOL IsGuoZhai(int jys, int rec_num){ return FALSE;}int GetGraData(int jys, int i, LPHQ_REF_DATA lpLastHq){ float jg1, jg2; if(HqData[jys].lpRefData[i].lc>0) { //计算内盘 //GraphData[jys].lpGraHead[i].dateNum==date_num; GraphData[jys].lpGraData[i].tim=tim; if(GraphData[jys].lpGraHead[i].recCount==0) { //第一次有正量差,开市初始化 //HqData[jys].lpPreData[i].jrkp=lpLastHq->zjcj; //初始化分时数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -