📄 zplinewidget.ui.h
字号:
/****************************************************************************** ui.h extension file, included from the uic-generated form implementation.**** If you wish to add, delete or rename functions or slots use** Qt Designer which will update this file, preserving your code. Create an** init() function in place of a constructor, and a destroy() function in** place of a destructor.*****************************************************************************/void ZPLineWidget::init(){ zw=new ZWorld(); this->pDaysTel=NULL;}void ZPLineWidget::drawRectF(QPainter *p,float x1,float y1,float x2,float y2){ int X1=zw->x(x1); int Y1=zw->y(y1); int X2=zw->x(x2); int Y2=zw->y(y2); int X0,W,Y0,H; if(X1<=X2) { X0=X1; W=X2-X1; } else { X0=X2; W=X1-X2; } if(Y1<=Y2) { Y0=Y1; H=Y2-Y1; } else { Y0=Y2; H=Y1-Y2; } if(W==0 || H==0) { p->drawLine(X0,Y0,X0+W,Y0+H); } else { p->drawRect(X0,Y0,W,H); }}void ZPLineWidget::paintEvent( QPaintEvent * ){ const int w0=58;const int ht=18; int w=width(); int h=height(); int h0=0; int h2=6; int h4=0; int h1=h; int h3=h1; QPainter paint( this ); paint.setFont(*TextFont); paint.setPen(QPen(BoardColor,2) ); paint.drawRect(w0,h0+1,w-w0,h1-1); if((pDaysTel==NULL) ||((*pDaysTel)==NULL)) { paint.setPen((NameColor)); paint.drawText(w/4,h/2-ht,w/2,ht,Qt::AlignCenter | Qt::AlignVCenter,tr(QString("没有数据"))); return; } if(name()==string("ASI")){drawASI(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("BOLL")){drawBOLL(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("BRAR")){drawBRAR(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("CCI")){drawCCI(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("CR")){drawCR(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("DMA")){drawDMA(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("DMI")){drawDMI(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("EMV")){drawEMV(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("EXPMA")){drawEXPMA(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("KDJ")){drawKDJ(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("MIKE")){drawMIKE(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("MACD")){drawMACD(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("OBV")){drawOBV(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("RSI")){drawRSI(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("ROC")){drawROC(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("VR")){drawVR(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("TRIX")){drawTRIX(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("PSY")){drawPSY(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("W%R")){drawWR(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("WVAD")){drawWVAD(&paint,w0,h0,w-w0,h-h0,ht);} else if(name()==string("BIAS")){drawBIAS(&paint,w0,h0,w-w0,h-h0,ht);} else { paint.setPen((NameColor)); paint.drawText(w/4,h/2-ht,w/2,ht,Qt::AlignCenter | Qt::AlignVCenter,tr(QString("尚未实现"))); } }void ZPLineWidget::setCurrentCode(string s){ currentIndexCode=s;}void ZPLineWidget::drawASI(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float* pASI=new float[Days]; pASI[0]=0; for(int i=1;i<Days;i++) { float A=fabs((data+i)->high()-(data+i-1)->close()); float B=fabs((data+i)->low()-(data+i-1)->close()); float C=fabs((data+i)->high()-(data+i-1)->low()); float D=fabs((data+i-1)->close()-(data+i-1)->open()); float E=(data+i)->close()-(data+i-1)->close(); float F=(data+i)->close()-(data+i)->open(); float G=(data+i-1)->close()-(data+i-1)->open(); float X=E+1/2*F+G; float K; if(A>B)K=A;else K=B; float R; if(A>=B && A>=C) R=A+1/2*B+1/4*D; else if(B>=A && B>=C) R=B+1/2*A+1/4*D; else R=C+1/4*D; float L=3; float SI=50*X/R*K/L; pASI[i]=pASI[i-1]+SI; } float MAX=pASI[1];float MIN=pASI[1]; for(int i=1;i<Days;i++) { if(MAX<pASI[i])MAX=pASI[i]; if(MIN>pASI[i])MIN=pASI[i]; } MAX=fabs(MAX); MIN=fabs(MIN); MAX=(MAX>MIN)? MAX:MIN; MIN=-MAX; drawMaxMin(p,0,0,x,h,ht,MAX,MIN,3); zw->setWorld(x,y,w,h,-0.5,MIN,((float)(Days)-0.5),MAX); p->setPen(MinutesLineColor); for(int i=2;i<Days;i++) { p->drawLine(zw->x(i-1),zw->y(pASI[i-1]),zw->x(i),zw->y(pASI[i])); } delete[](pASI);}void ZPLineWidget::drawBOLL(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float* UP=new float[Days]; float* DN=new float[Days]; float* MB=new float[Days]; int N=20; for(int i=N-1;i<Days;i++) { float MA=0; for(int j=0;j<N;j++) { MA=MA+(data+i-j)->close(); } MA=MA/N; float SMA=0; for(int j=0;j<N;j++) { float dMA=((data+i-j)->close()-MA); SMA=SMA+dMA*dMA/N; } float MD=sqrt(SMA); int I=N-1; MB[i]=0; for(int j=0;j<I;j++) { MB[i]=MB[i]+(data+i-j)->close(); } MB[i]=MB[i]/I; UP[i]=MB[i]+2*MD; DN[i]=MB[i]-2*MD; } float MAX=data->high();float MIN=data->low(); for(int i=0;i<N-1;i++) { MAX=(MAX>(data+i)->high())? MAX:(data+i)->high(); MIN=(MIN<(data+i)->low())? MIN:(data+i)->low(); } for(int i=N-1;i<Days;i++) { MAX=(MAX>(data+i)->high())? MAX:(data+i)->high(); MAX=(MAX>UP[i])? MAX:UP[i]; MIN=(MIN<(data+i)->low())? MIN:(data+i)->low(); MIN=(MIN<DN[i])? MIN:DN[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); p->setPen(MinutesLineColor); for(int i=0;i<Days;i++) { p->drawLine(zw->x((float)i-0.3),zw->y((data+i)->close()),zw->x((float)i+0.3),zw->y((data+i)->close())); p->drawLine(zw->x(i),zw->y((data+i)->low()),zw->x(i),zw->y((data+i)->high())); } for(int i=N;i<Days;i++) { p->setPen(Avr1Color); p->drawLine(zw->x(i-1),zw->y(UP[i-1]),zw->x(i),zw->y(UP[i])); p->setPen(Avr2Color); p->drawLine(zw->x(i-1),zw->y(MB[i-1]),zw->x(i),zw->y(MB[i])); p->setPen(Avr3Color); p->drawLine(zw->x(i-1),zw->y(DN[i-1]),zw->x(i),zw->y(DN[i])); } delete[](MB); delete[](UP); delete[](DN); }void ZPLineWidget::drawBRAR(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float* UP=new float[Days]; float* DN=new float[Days]; float* SUP=new float[Days]; float* SDN=new float[Days]; float* BR=new float[Days]; float* AR=new float[Days]; int N=26; for(int i=1;i<Days;i++) { UP[i]=(data+i)->high()-(data+i-1)->close(); DN[i]=(data+i-1)->close()-(data+i)->low(); UP[i]=(UP[i]<0)?0: UP[i]; DN[i]=(DN[i]<0)?0: DN[i]; } for(int i=N;i<Days;i++) { SUP[i]=0; SDN[i]=0; for(int j=0;j<N;j++) { SUP[i]=SUP[i]+UP[i-j]; SDN[i]=SDN[i]+DN[i-j]; } BR[i]=SUP[i]/SDN[i]*100; } for(int i=1;i<Days;i++) { UP[i]=(data+i)->high()-(data+i)->open(); DN[i]=(data+i)->open()-(data+i)->low(); UP[i]=(UP[i]<0)?0: UP[i]; DN[i]=(DN[i]<0)?0: DN[i]; } for(int i=N;i<Days;i++) { SUP[i]=0; SDN[i]=0; for(int j=0;j<N;j++) { SUP[i]=SUP[i]+UP[i-j]; SDN[i]=SDN[i]+DN[i-j]; } AR[i]=SUP[i]/SDN[i]*100; } float MAX=AR[N+1];float MIN=AR[N+1]; for(int i=N+1;i<Days;i++) { MAX=(MAX>AR[i])? MAX:AR[i]; MAX=(MAX>BR[i])? MAX:BR[i]; MIN=(MIN<AR[i])? MIN:AR[i]; MIN=(MIN<BR[i])? MIN:BR[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(BR[i-1]),zw->x(i),zw->y(BR[i])); p->setPen(Avr2Color); p->drawLine(zw->x(i-1),zw->y(AR[i-1]),zw->x(i),zw->y(AR[i])); } delete[](UP); delete[](DN); delete[](SUP); delete[](SDN); delete[](BR); delete[](AR); }void ZPLineWidget::drawCCI(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float* CCI=new float[Days]; float MA[Days]; int N=20; for(int i=N-1;i<Days;i++) { MA[i]=0; for(int j=0;j<N;j++) { MA[i]=MA[i]+(data+i-j)->close()/N; } } for(int i=N-2+N;i<Days;i++) { float TP=((data+i)->high()+(data+i)->low()+(data+i)->close())/3; float MD=0; for(int j=0;j<N;j++) { MD=MD+(MA[i-j]-(data+i-j)->close())/N; } CCI[i]=(TP-MA[i])/MD/0.015; } float MAX=CCI[2*N-2];float MIN=CCI[2*N-2]; for(int i=2*N-2;i<Days;i++) { MAX=(MAX>CCI[i])? MAX:CCI[i]; MIN=(MIN<CCI[i])? MIN:CCI[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); p->setPen(Avr1Color); for(int i=2*N-1;i<Days;i++) { p->drawLine(zw->x(i-1),zw->y(CCI[i-1]),zw->x(i),zw->y(CCI[i])); } delete[](CCI); }void ZPLineWidget::drawCR(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float UP[Days]; float DN[Days]; float SUP[Days]; float SDN[Days]; float CR[Days]; int N=26; for(int i=1;i<Days;i++) { UP[i]=(data+i)->high()-((data+i-1)->high()+(data+i-1)->low())/2; DN[i]=((data+i-1)->high()+(data+i-1)->low())/2-(data+i)->low(); UP[i]=(UP[i]<0)?0: UP[i]; DN[i]=(DN[i]<0)?0: DN[i]; } for(int i=N;i<Days;i++) { SUP[i]=0; SDN[i]=0; for(int j=0;j<N;j++) { SUP[i]=SUP[i]+UP[i-j]; SDN[i]=SDN[i]+DN[i-j]; } CR[i]=SUP[i]/SDN[i]*100; } for(int i=1;i<Days;i++) { UP[i]=(data+i)->high()-(data+i)->open(); DN[i]=(data+i)->open()-(data+i)->low(); UP[i]=(UP[i]<0)?0: UP[i]; DN[i]=(DN[i]<0)?0: DN[i]; } float MAX=CR[N+1];float MIN=CR[N+1]; for(int i=N+1;i<Days;i++) { MAX=(MAX>CR[i])? MAX:CR[i]; MIN=(MIN<CR[i])? MIN:CR[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(CR[i-1]),zw->x(i),zw->y(CR[i])); } }void ZPLineWidget::drawDMA(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float Avr10[Days]; float Avr50[Days]; float DMA[Days]; float AMA[Days]; int N1=10;int N2=50; for(int i=N1-1;i<Days;i++) { Avr10[i]=0; for(int j=0;j<N1;j++) Avr10[i]+=(data+i-j)->close()/N1; } for(int i=N2-1;i<Days;i++) { Avr50[i]=0; for(int j=0;j<N2;j++) Avr50[i]+=(data+i-j)->close()/N2; } for(int i=N2-1;i<Days;i++) { DMA[i]=Avr10[i]-Avr50[i]; AMA[i]=DMA[i]/N1; } for(int i=N2-1+N1;i<Days;i++) { AMA[i]=0; for(int j=0;j<N1;j++) AMA[i]+=DMA[i-j]/N1; } float MAX=DMA[N2-1];float MIN=AMA[N2-1]; for(int i=N2-1;i<Days;i++) { MAX=(MAX>DMA[i])? MAX:DMA[i]; MIN=(MIN<DMA[i])? MIN:DMA[i]; } for(int i=N2-1+N1;i<Days;i++) { MAX=(MAX>AMA[i])? MAX:AMA[i]; MIN=(MIN<AMA[i])? MIN:AMA[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(Avr1Color); p->drawLine(zw->x(i-1),zw->y(DMA[i-1]),zw->x(i),zw->y(DMA[i])); } for(int i=N2+N1;i<Days;i++) { p->setPen(Avr2Color); p->drawLine(zw->x(i-1),zw->y(AMA[i-1]),zw->x(i),zw->y(AMA[i])); } }void ZPLineWidget::drawDMI(QPainter* p,int x,int y,int w,int h,int ht){ int Days=(*pDaysTel)->getDays(); ZDaysStruct* data=(*pDaysTel)->getDay(0); float TR1[Days]; float PDM[Days]; float NDM[Days]; float TRN[Days]; float PDMN[Days]; float NDMN[Days]; float PDIN[Days]; float NDIN[Days];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -