⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zplinewidget.ui.h

📁 股票分析系统
💻 H
📖 第 1 页 / 共 3 页
字号:
/****************************************************************************** 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 + -