📄 zplinewidget.ui.h
字号:
{ p->setPen(Line1Color); p->drawLine(zw->x(i-1),zw->y(OBV[i-1]),zw->x(i),zw->y(OBV[i])); }}void ZPLineWidget::drawRSI(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float RSI1[Days]; float RSI2[Days]; float RSI3[Days]; int N1=5;int N2=9; int N3=14; float dd[Days]; for(int i=1;i<Days;i++) { dd[i]=(data+i)->close()-(data+i-1)->close(); } for(int i=N1;i<Days;i++) { float A=0;float B=0; for(int j=0;j<N1;j++) { if(dd[i-j]>0) { A=A+dd[i-j]; } else { B=B+dd[i-j]; } } B=fabs(B); RSI1[i]=A/ (A+B) *100; } for(int i=N2;i<Days;i++) { float A=0;float B=0; for(int j=0;j<N2;j++) { if(dd[i-j]>0) { A=A+dd[i-j]; } else { B=B+dd[i-j]; } } B=fabs(B); RSI2[i]=A/ (A+B) *100; } for(int i=N3;i<Days;i++) { float A=0;float B=0; for(int j=0;j<N3;j++) { if(dd[i-j]>0) { A=A+dd[i-j]; } else { B=B+dd[i-j]; } } B=fabs(B); RSI3[i]=A/ (A+B) *100; } float MAX=RSI1[N1];float MIN=RSI1[N1]; for(int i=N1;i<Days;i++) { MAX=(MAX>RSI1[i])?MAX:RSI1[i]; MIN=(MIN<RSI1[i])?MIN:RSI1[i]; } for(int i=N2;i<Days;i++) { MAX=(MAX>RSI2[i])?MAX:RSI2[i]; MIN=(MIN<RSI2[i])?MIN:RSI2[i]; } for(int i=N3;i<Days;i++) { MAX=(MAX>RSI3[i])?MAX:RSI3[i]; MIN=(MIN<RSI3[i])?MIN:RSI3[i]; }///////////// MAX=100.0; MIN=0.0;//////// 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+1;i<Days;i++) { p->setPen(Line1Color); p->drawLine(zw->x(i-1),zw->y(RSI1[i-1]),zw->x(i),zw->y(RSI1[i])); } for(int i=N2+1;i<Days;i++) { p->setPen(Line2Color); p->drawLine(zw->x(i-1),zw->y(RSI2[i-1]),zw->x(i),zw->y(RSI2[i])); } for(int i=N3+1;i<Days;i++) { p->setPen(Line3Color); p->drawLine(zw->x(i-1),zw->y(RSI3[i-1]),zw->x(i),zw->y(RSI3[i])); }}void ZPLineWidget::drawROC(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float ROC[Days]; int N=12; for(int i=N;i<Days;i++) { float BX=(data+i-N)->close(); float AX=(data+i)->close()-BX; ROC[i]=AX/ BX; } float MAX=ROC[N];float MIN=ROC[N]; for(int i=N;i<Days;i++) { MAX=(MAX>ROC[i])?MAX:ROC[i]; MIN=(MIN<ROC[i])?MIN:ROC[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(Line1Color); p->drawLine(zw->x(i-1),zw->y(ROC[i-1]),zw->x(i),zw->y(ROC[i])); }}void ZPLineWidget::drawVR(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float VR[Days]; int N=24; for(int i=N-1;i<Days;i++) { float AVS=0; float BVS=0; float CVS=0; for(int j=0;j<N;j++) { float d=(data+i-j)->close()-(data+i-j)->open(); if(d>=0.01) { AVS+=(data+i-j)->count(); } else if(d<=-0.01) { BVS+=(data+i-j)->count(); } else { CVS+=(data+i-j)->count(); } } VR[i]=(AVS+ CVS/ 2)/ (BVS+CVS/ 2); } float MAX=VR[N-1];float MIN=VR[N-1]; for(int i=N-1;i<Days;i++) { MAX=(MAX>VR[i])?MAX:VR[i]; MIN=(MIN<VR[i])?MIN:VR[i]; } ///////// MIN=0; 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;i<Days;i++) { p->setPen(Line1Color); p->drawLine(zw->x(i-1),zw->y(VR[i-1]),zw->x(i),zw->y(VR[i])); }}void ZPLineWidget::drawTRIX(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float TRIX[Days]; float TMA[Days]; int N=24; int M=10; float AX[Days]; float BX[Days]; AX[0]=data->close(); for(int i=1;i<Days;i++) { AX[i]=(data+i)->close()*2 / (N+1) + AX[i-1] *(N-1)/ (N+1); } BX[0]=AX[0]; for(int i=1;i<Days;i++) { BX[i]=AX[i]*2 / (N+1) + BX[i-1] *(N-1)/ (N+1); } TRIX[0]=BX[0]; for(int i=1;i<Days;i++) { TRIX[i]=BX[i]*2 / (N+1) + TRIX[i-1] *(N-1)/ (N+1); } for(int i=M-1;i<Days;i++) { TMA[i]=0; for(int j=0;j<M;j++) { TMA[i]+=TRIX[i-j] / M; } } float MAX=TRIX[0];float MIN=TRIX[0]; for(int i=0;i<Days;i++) { MAX=(MAX>TRIX[i])?MAX:TRIX[i]; MIN=(MIN<TRIX[i])?MIN:TRIX[i]; } for(int i=M-1;i<Days;i++) { MAX=(MAX>TMA[i])?MAX:TMA[i]; MIN=(MIN<TMA[i])?MIN:TMA[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++) { p->setPen(Line1Color); p->drawLine(zw->x(i-1),zw->y(TRIX[i-1]),zw->x(i),zw->y(TRIX[i])); } for(int i=M;i<Days;i++) { p->setPen(Line2Color); p->drawLine(zw->x(i-1),zw->y(TMA[i-1]),zw->x(i),zw->y(TMA[i])); }}void ZPLineWidget::drawPSY(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float PSY1[Days]; float PSY2[Days]; int N1=10; int N2=20; for(int i=N1-1;i<Days;i++) { PSY1[i]=0; for(int j=0;j<N1;j++) { if((data+i-j)->close()>(data+i-j)->open()) { PSY1[i]+=1.0; } } PSY1[i]=PSY1[i]/ N1*100; } for(int i=N2-1;i<Days;i++) { PSY2[i]=0; for(int j=0;j<N2;j++) { if((data+i-j)->close()>(data+i-j)->open()) { PSY2[i]+=1.0; } } PSY2[i]=PSY2[i]/ N2*100; } float MAX=PSY1[N1-1];float MIN=PSY1[N1-1]; for(int i=N1-1;i<Days;i++) { MAX=(MAX>PSY1[i])?MAX:PSY1[i]; MIN=(MIN<PSY1[i])?MIN:PSY1[i]; } for(int i=N2-1;i<Days;i++) { MAX=(MAX>PSY2[i])?MAX:PSY2[i]; MIN=(MIN<PSY2[i])?MIN:PSY2[i]; }////// MAX=100; MIN=0;////// 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(Line1Color); p->drawLine(zw->x(i-1),zw->y(PSY1[i-1]),zw->x(i),zw->y(PSY1[i])); } for(int i=N2;i<Days;i++) { p->setPen(Line2Color); p->drawLine(zw->x(i-1),zw->y(PSY2[i-1]),zw->x(i),zw->y(PSY2[i])); }}void ZPLineWidget::drawWR(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float WR[Days]; int N=10; ; for(int i=N-1;i<Days;i++) { float Hn=(data+i)->high(); float Ln=(data+i)->low(); for(int j=0;j<N;j++) { Hn=(((data+i-j)->high())>Hn)?((data+i-j)->high()):Hn; Ln=(((data+i-j)->low())<Ln)?((data+i-j)->low()):Ln; } WR[i]=(Hn-(data+i)->close())/ (Hn-Ln) *100 ; } float MAX=WR[N-1];float MIN=WR[N-1]; for(int i=N-1;i<Days;i++) { MAX=(MAX>WR[i])?MAX:WR[i]; MIN=(MIN<WR[i])?MIN:WR[i]; } ////// MAX=100; MIN=0;////// 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;i<Days;i++) { p->setPen(Line1Color); p->drawLine(zw->x(i-1),zw->y(WR[i-1]),zw->x(i),zw->y(WR[i])); } }void ZPLineWidget::drawWVAD(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float WVAD[Days]; float ABV[Days]; int N=24; for(int i=0;i<Days;i++) { float A=(data+i)->close()-(data+i)->open(); float B=(data+i)->high()-(data+i)->low(); float V=(data+i)->count()/ 100.0 *((data+i)->high()+(data+i)->low())/ 2; ABV[i]=A/ B*V; } for(int i=N-1;i<Days;i++) { WVAD[i]=0; for(int j=0;j<N;j++) { WVAD[i]+=ABV[i-j]; } } float MAX=WVAD[N-1];float MIN=WVAD[N-1]; for(int i=N-1;i<Days;i++) { MAX=(MAX>WVAD[i])?MAX:WVAD[i]; MIN=(MIN<WVAD[i])?MIN:WVAD[i]; } drawMaxMin(p,0,0,x,h,ht,MAX,MIN,5,0); zw->setWorld(x,y,w,h,-0.5,MIN,((float)(Days)-0.5),MAX); for(int i=N;i<Days;i++) { p->setPen(Line1Color); p->drawLine(zw->x(i-1),zw->y(WVAD[i-1]),zw->x(i),zw->y(WVAD[i])); } }void ZPLineWidget::drawBIAS(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float AVR[Days]; float BIAS[Days]; int N=5; for(int i=N-1;i<Days;i++) { AVR[i]=0; for(int j=0;j<N;j++) { AVR[i]+=(data+i-j)->close()/ N; } } for(int i=N-1;i<Days;i++) { BIAS[i]=(data+i)->close()-AVR[i]; } float MAX=BIAS[N-1];float MIN=BIAS[N-1]; for(int i=N-1;i<Days;i++) { MAX=(MAX>BIAS[i])?MAX:BIAS[i]; MIN=(MIN<BIAS[i])?MIN:BIAS[i]; } MAX=fabs(MAX); MIN=fabs(MIN); MAX=(MAX>MIN)?MAX:MIN; MIN=-MAX; 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;i<Days;i++) { p->setPen(Line1Color); p->drawLine(zw->x(i-1),zw->y(BIAS[i-1]),zw->x(i),zw->y(BIAS[i])); } }float ZPLineWidget::avr(float *d,int start,int l){ return(sum(d,start,l)/ l);}float ZPLineWidget::sum(float *d,int start,int l){ float s=0; for(int j=0;j<l;j++) s+= *(d+start-j); return(s);}void ZPLineWidget::drawMaxMin(QPainter* p,int x,int y,int w,int h,int ht,float Max,float Min,int num){ drawMaxMin(p,x,y,w,h,ht,Max,Min,num,2);}void ZPLineWidget::drawMaxMin(QPainter* p,int x,int y,int w,int h,int ht,float Max,float Min,int num,int digits){ p->setPen(NameColor); int dh=h / (num-1); p->drawText(x,y,w,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1").arg(Max,0,'f',digits)); for(int i=1;i<num-1;i++) { p->drawText(x,y+i*dh-ht/2,w,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1").arg((Max-(Max-Min)*i / (num-1)),0,'f',digits)); } p->drawText(x,y+h-ht,w,ht,Qt::AlignRight | Qt::AlignVCenter,QString("%1").arg(Min,0,'f',digits)); p->setPen(QPen(BoardColor,0,Qt::DotLine)); for(int i=1;i<num-1;i++) { p->drawLine(w,i*dh,this->width(),i*dh); } }void ZPLineWidget::setData(ZDaysTel** pDaysTel){ this->pDaysTel=pDaysTel; this->repaint();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -