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

📄 zplinewidget.ui.h

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