📄 zplinewidget.ui.h
字号:
float DDIN[Days]; float SDIN[Days]; float DX[Days]; for(int i=1;i<Days;i++) { float A=fabs((data+i)->close()-(data+i)->low()); float B=fabs((data+i)->high()-(data+i-1)->close()); float C=fabs((data+i)->low()-(data+i-1)->close()); TR1[i]=(A>B)? A:B; TR1[i]=(TR1[i]>C)? TR1[i]:C; PDM[i]=(data+i)->high()-(data+i-1)->high(); PDM[i]=(PDM[i]>0)? PDM[i]:0; NDM[i]=(data+i-1)->low()-(data+i)->low(); NDM[i]=(NDM[i]>0)? NDM[i]:0; } const int N=7; for(int i=N;i<Days;i++) { TRN[i]=0; PDMN[i]=0; NDMN[i]=0; for(int j=0;j<N;j++) { TRN[i]+=TR1[i-j]; PDMN[i]+= PDM[i-j]; NDMN[i]+= NDM[i-j]; } PDIN[i]=PDMN[i]/TRN[i]; NDIN[i]=NDMN[i]/TRN[i]; DDIN[i]=PDIN[i]-NDIN[i]; SDIN[i]=PDIN[i]+NDIN[i]; DX[i]=SDIN[i]-DDIN[i]; } float ADX[Days]; float ADXR[Days]; ADX[N*2]=0; for(int i=N ;i<2*N ;i++) ADX[N *2]+= DX[i]/N; for(int i=2*N+1;i<Days;i++) { ADX[i]=(ADX[i-1]*6+DX[i])/7; } for(int i=3*N;i<Days;i++) { ADXR[i]=(ADX[i]+ADX[i-N])/2; } float MAX=PDIN[N];float MIN=NDIN[N]; for(int i=N;i<Days;i++) { MAX=(MAX>PDIN[i])? MAX:PDIN[i]; MIN=(MIN<PDIN[i])? MIN:PDIN[i]; MAX=(MAX>NDIN[i])? MAX:NDIN[i]; MIN=(MIN<NDIN[i])? MIN:NDIN[i]; } for(int i=2*N;i<Days;i++) { MAX=(MAX>ADX[i])? MAX:ADX[i]; MIN=(MIN<ADX[i])? MIN:ADX[i]; } for(int i=3*N;i<Days;i++) { MAX=(MAX>ADXR[i])? MAX:ADXR[i]; MIN=(MIN<ADXR[i])? MIN:ADXR[i]; } drawMaxMin(p,0,0,x,h,ht,MAX,MIN,5); zw->setWorld(x,y,w,h,-0.5,MIN,((float)(Days)-0.5),MAX); for(int i=N+1;i<Days;i++) { p->setPen(Avr1Color); p->drawLine(zw->x(i-1),zw->y(PDIN[i-1]),zw->x(i),zw->y(PDIN[i])); p->setPen(Avr2Color); p->drawLine(zw->x(i-1),zw->y(NDIN[i-1]),zw->x(i),zw->y(NDIN[i])); } p->setPen(Avr3Color); for(int i=2*N+1;i<Days;i++) { p->drawLine(zw->x(i-1),zw->y(ADX[i-1]),zw->x(i),zw->y(ADX[i])); } p->setPen(Avr4Color); for(int i=3*N+1;i<Days;i++) { p->drawLine(zw->x(i-1),zw->y(ADXR[i-1]),zw->x(i),zw->y(ADXR[i])); } }void ZPLineWidget::drawEMV(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float EMV[Days]; float MID[Days]; float BRO[Days]; float EMVA[Days]; for(int i=1;i<Days;i++) { float A=((data+i)->high()+(data+i)->low())/2; float B=((data+i-1)->high()+(data+i-1)->low())/2; MID[i]=A-B; BRO[i]=(data+i)->count() / ((data+i)->high()-(data+i)->low()); } int N1=14; for(int i=N1;i<Days;i++) { EMV[i]=0; for(int j=0;j<N1;j++)EMV[i]+=(MID[i-j] / BRO[i-j])/ N1; } int N2=9; for(int i=N1+N2-1;i<Days;i++) { EMVA[i]=0; for(int j=0;j<N2;j++)EMVA[i]+=EMV[i-j] / N2; } float MAX=EMV[N1];float MIN=EMV[N1]; for(int i=N1;i<Days;i++) { MAX=(MAX>EMV[i])?MAX:EMV[i]; MIN=(MIN<EMV[i])?MIN:EMV[i]; } for(int i=N1+N2-1;i<Days;i++) { MAX=(MAX>EMVA[i])?MAX:EMVA[i]; MIN=(MIN<EMVA[i])?MIN:EMVA[i]; } drawMaxMin(p,0,0,x,h,ht,MAX,MIN,5,5); zw->setWorld(x,y,w,h,-0.5,MIN,((float)(Days)-0.5),MAX); p->setPen(Avr1Color); for(int i=N1+1;i<Days;i++) { p->drawLine(zw->x(i-1),zw->y(EMV[i-1]),zw->x(i),zw->y(EMV[i])); } p->setPen(Avr2Color); for(int i=N1+N2;i<Days;i++) { p->drawLine(zw->x(i-1),zw->y(EMVA[i-1]),zw->x(i),zw->y(EMVA[i])); }}void ZPLineWidget::drawEXPMA(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float EXPMA1[Days]; float EXPMA2[Days]; int N1=12;int N2=50; EXPMA1[1]=((data+1)->close()-(data)->close())*2.0/ (N1+1)+(data)->close(); EXPMA2[1]=((data+1)->close()-(data)->close())*2.0/ (N2+1)+(data)->close(); for(int i=2;i<Days;i++) { EXPMA1[i]=((data+i)->close()-EXPMA1[i-1])*2.0/ (N1+1)+EXPMA1[i-1]; EXPMA2[i]=((data+i)->close()-EXPMA2[i-1])*2.0/ (N2+1)+EXPMA2[i-1]; } float MAX=EXPMA1[1];float MIN=EXPMA2[1]; for(int i=1;i<Days;i++) { MAX=(MAX>EXPMA1[i])?MAX:EXPMA1[i]; MIN=(MIN<EXPMA1[i])?MIN:EXPMA1[i]; MAX=(MAX>EXPMA2[i])?MAX:EXPMA2[i]; MIN=(MIN<EXPMA2[i])?MIN:EXPMA2[i]; } for(int i=0;i<Days;i++) { MAX=(MAX>(data+i)->high())?MAX:(data+i)->high(); MIN=(MIN<(data+i)->low())?MIN:(data+i)->low(); } drawMaxMin(p,0,0,x,h,ht,MAX,MIN,5); zw->setWorld(x,y,w,h,-0.5,MIN,((float)(Days)-0.5),MAX); for(int i=0;i<Days;i++) { ZDaysStruct *k=data+i; if(k->open() <= k->close()) { p->setPen( UpColor ); p->setBrush(UpColor); } else { p->setPen( DownColor ); p->setBrush(DownColor); } drawRectF(p,(-0.4+i),(k->close()),(0.4+i),(k->open())); p->drawLine(zw->x(i),zw->y(k->low()),zw->x(i),zw->y(k->high())); } p->setPen(Avr1Color); for(int i=1;i<Days;i++) { p->drawLine(zw->x(i-1),zw->y(EXPMA1[i-1]),zw->x(i),zw->y(EXPMA1[i])); } p->setPen(Avr2Color); for(int i=1;i<Days;i++) { p->drawLine(zw->x(i-1),zw->y(EXPMA2[i-1]),zw->x(i),zw->y(EXPMA2[i])); }}void ZPLineWidget::drawKDJ(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float RSV[Days]; float K[Days]; float D[Days]; float J[Days]; int N1=9;int N2=3; int N3=3; for(int i=N1-1;i<Days;i++) { float Ln=0;float Hn=0; for(int j=0;j<N1;j++) { Ln+=(data+i-j)->low()/N1; Hn+=(data+i-j)->high()/N1; } RSV[i]=((data+i)->close()-Ln)/ (Hn-Ln)*100.0; } K[N1-1]=RSV[N1-1]; for(int i=N1;i<Days;i++) { K[i]=K[i-1]*(N2-1)/ N2+RSV[i]/ N2; } D[N1-1]=RSV[N1-1]; for(int i=N1;i<Days;i++) { D[i]=D[i-1]*(N3-1)/ N3+K[i]/ N3; } for(int i=N1-1;i<Days;i++) { J[i]=D[i]*3-K[i]*2; } float MAX=K[N1-1];float MIN=K[N1-1]; for(int i=N1-1;i<Days;i++) { MAX=(MAX>K[i])?MAX:K[i]; MIN=(MIN<K[i])?MIN:K[i]; MAX=(MAX>D[i])?MAX:D[i]; MIN=(MIN<D[i])?MIN:D[i]; MAX=(MAX>J[i])?MAX:J[i]; MIN=(MIN<J[i])?MIN:J[i]; } drawMaxMin(p,0,0,x,h,ht,MAX,MIN,5); zw->setWorld(x,y,w,h,-0.5,MIN,((float)(Days)-0.5),MAX); for(int i=N1;i<Days;i++) { p->setPen(Avr1Color); p->drawLine(zw->x(i-1),zw->y(K[i-1]),zw->x(i),zw->y(K[i])); p->setPen(Avr2Color); p->drawLine(zw->x(i-1),zw->y(D[i-1]),zw->x(i),zw->y(D[i])); p->setPen(Avr3Color); p->drawLine(zw->x(i-1),zw->y(J[i-1]),zw->x(i),zw->y(J[i])); }}void ZPLineWidget::drawMIKE(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float TPX[Days]; float TPY[Days]; float WR[Days]; float MR[Days]; float SR[Days]; float WS[Days]; float MS[Days]; float SS[Days]; int N1=10;int N2=12; for(int i=0;i<Days;i++) { TPX[i]=((data+i)->high()+(data+i)->low()+(data+i)->close())/3; } for(int i=N1-1;i<Days;i++) { TPY[i]=0; for(int j=0;j<N1;j++) { TPY[i]+=TPX[i-j]/ N1; } } float Hn[Days];float Ln[Days]; for(int i=N2-1;i<Days;i++) { Hn[i]=0; Ln[i]=0; for(int j=0;j<N2;j++) { Hn[i]+=(data+i-j)->high()/ N2; Ln[i]+=(data+i-j)->low()/ N2; } } for(int i=N2-1;i<Days;i++) { WR[i]=TPY[i]+(TPY[i]-Ln[i]); MR[i]=TPY[i]+(Hn[i]-Ln[i]); SR[i]=2*Hn[i]-Ln[i]; } for(int i=N2-1;i<Days;i++) { WS[i]=TPY[i]-(Hn[i]-TPY[i]); MS[i]=TPY[i]-(Hn[i]-Ln[i]); SS[i]=2*Ln[i]-Hn[i]; } float MAX=WR[N2-1];float MIN=WR[N2-1]; for(int i=N2-1;i<Days;i++) { MAX=(MAX>WR[i])?MAX:WR[i]; MIN=(MIN<WR[i])?MIN:WR[i]; MAX=(MAX>MR[i])?MAX:MR[i]; MIN=(MIN<MR[i])?MIN:MR[i]; MAX=(MAX>SR[i])?MAX:SR[i]; MIN=(MIN<SR[i])?MIN:SR[i]; MAX=(MAX>WS[i])?MAX:WS[i]; MIN=(MIN<WS[i])?MIN:WS[i]; MAX=(MAX>MS[i])?MAX:MS[i]; MIN=(MIN<MS[i])?MIN:MS[i]; MAX=(MAX>SS[i])?MAX:SS[i]; MIN=(MIN<SS[i])?MIN:SS[i]; } drawMaxMin(p,0,0,x,h,ht,MAX,MIN,5); zw->setWorld(x,y,w,h,-0.5,MIN,((float)(Days)-0.5),MAX); for(int i=N2;i<Days;i++) { p->setPen(Line1Color); p->drawLine(zw->x(i-1),zw->y(WR[i-1]),zw->x(i),zw->y(WR[i])); p->setPen(Line2Color); p->drawLine(zw->x(i-1),zw->y(MR[i-1]),zw->x(i),zw->y(MR[i])); p->setPen(Line3Color); p->drawLine(zw->x(i-1),zw->y(SR[i-1]),zw->x(i),zw->y(SR[i])); p->setPen(Line4Color); p->drawLine(zw->x(i-1),zw->y(WS[i-1]),zw->x(i),zw->y(WS[i])); p->setPen(Line5Color); p->drawLine(zw->x(i-1),zw->y(MS[i-1]),zw->x(i),zw->y(MS[i])); p->setPen(Line6Color); p->drawLine(zw->x(i-1),zw->y(SS[i-1]),zw->x(i),zw->y(SS[i])); }}void ZPLineWidget::drawMACD(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float DIF[Days]; float DEA[Days]; float BAR[Days]; float EMA1[Days]; float EMA2[Days]; int N1=12;int N2=26; int N3=10; EMA1[0]=(data)->close(); EMA2[0]=(data)->close(); for(int i=1;i<Days;i++) { EMA1[i]=(data+i)->close()* 2/ (N1+1)+ EMA1[i-1] * (N1-1)/ (N1+1) ; EMA2[i]=(data+i)->close()* 2/ (N2+1)+ EMA2[i-1] * (N2-1)/ (N2+1) ; } for(int i=0;i<Days;i++) { DIF[i]=EMA1[i]-EMA2[i]; } for(int i=N3-1;i<Days;i++) { DEA[i]=0; for(int j=0;j<N3;j++) { DEA[i]+=DIF[i-j]/ N3; } BAR[i]=(DIF[i]-DEA[i])*2; } float MAX=BAR[N3-1];float MIN=BAR[N3-1]; for(int i=N3-1;i<Days;i++) { MAX=(MAX>BAR[i])?MAX:BAR[i]; MIN=(MIN<BAR[i])?MIN:BAR[i]; MAX=(MAX>DEA[i])?MAX:DEA[i]; MIN=(MIN<DEA[i])?MIN:DEA[i]; } for(int i=0;i<Days;i++) { MAX=(MAX>DIF[i])?MAX:DIF[i]; MIN=(MIN<DIF[i])?MIN:DIF[i]; } MAX=fabs(MAX); MIN=fabs(MIN); MAX=(MAX>MIN)?MAX:MIN; MIN=-MAX; drawMaxMin(p,0,0,x,h,ht,MAX,MIN,5,2); zw->setWorld(x,y,w,h,-0.5,MIN,((float)(Days)-0.5),MAX); for(int i=1;i<Days;i++) { p->setPen(Line1Color); p->drawLine(zw->x(i-1),zw->y(DIF[i-1]),zw->x(i),zw->y(DIF[i])); } for(int i=N3;i<Days;i++) { p->setPen(Line2Color); p->drawLine(zw->x(i-1),zw->y(DEA[i-1]),zw->x(i),zw->y(DEA[i])); } for(int i=N3-1;i<Days;i++) { ZDaysStruct *k=data+i; if(k->open() <= k->close()) { p->setPen( UpColor ); } else { p->setPen( DownColor ); } p->drawLine(zw->x(i),zw->y(0.0),zw->x(i),zw->y(BAR[i])); } }void ZPLineWidget::drawOBV(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float OBV[Days]; OBV[0]=data->count(); OBV[0]=(data->open()<data->close())?OBV[0]:-OBV[0]; for(int i=1;i<Days;i++) { OBV[i]=(data+i)->count(); OBV[i]=((data+i-1)->close()<(data+i)->close())?OBV[i]:-OBV[i]; OBV[i]+=OBV[i-1]; } float MAX=OBV[0];float MIN=OBV[0]; for(int i=0;i<Days;i++) { MAX=(MAX>OBV[i])?MAX:OBV[i]; MIN=(MIN<OBV[i])?MIN:OBV[i]; } drawMaxMin(p,0,0,x,h,ht,MAX,MIN,5); zw->setWorld(x,y,w,h,-0.5,MIN,((float)(Days)-0.5),MAX); for(int i=1;i<Days;i++)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -