说明:这段程序只是分型笔线段的前一部分,提供一个思路而已。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
int len=pData->m_nNumData; 定义数组的长度,随数据量的大小而变 float *kh=new float[len]; 包含处理后的K线最高值 float *kl=new float[len]; 包含处理后的K线最低值 int *qk=new int[len]; K线是否有缺口 int *qkx=new int[len]; 顶底K线最左侧K线有缺口标志位 int *qky=new int[len]; 顶底K线最右侧K线标志位 int *qkz=new int[len]; 顶底K线最左侧K线标志位 int *sx=new int[len]; 向上还是向下K线,向上为1,向下为-1 int *bhs=new int[len]; K线处于包含关系中的第几根 int *bh=new int[len]; 与前K线是否是包含关系,不包含为0,包含为1 int *ks=new int[len]; K线是第几根K线 int *bs=new int[len]; K线是包含处理后的第几根K线 int *nfx=new int[len]; 分型,顶分为1,底分为-1 int *qd=new int[len]; 是否是跳空形成的笔 int i,j,k=0,hlvbars,kk,kkk,jj=0; int an=0,int bn=0,int aan=0,int bbn=0,int as=0,int aaan,int bbbn; float hl,hhl; for ( i = nPeriod; i < pData->m_nNumData; i++ ) { nfx[i]=0,qk[i]=0,qkx[i]=0,qky[i]=0,qkz[i]=0,qd[i]=0; }起始赋为0 ks[0]=5,bs[0]=5,bh[0]=1,sx[0]=1,bhs[0]=1,qk[0]=1; kh[0]=pData->m_pData[0].m_fHigh,kl[0]=pData->m_pData[0].m_fLow; 第一根K线赋值 for ( i = 1; i < pData->m_nNumData; i++ ) { if(pData->m_pData[i].m_fHigh>kh[i-1]&&pData->m_pData[i].m_fLow>kl[i-1]) { 此为向上K线的处理 bh[i]=1,sx[i]=1,bhs[i]=1; kh[i]=pData->m_pData[i].m_fHigh,kl[i]=pData->m_pData[i].m_fLow; if(pData->m_pData[i].m_fLow-pData->m_pData[i-1].m_fHigh>0.015&&pData- >m_pData[i].m_fLow-kh[i-1]>0.015) qk[i]=1;本人的缺口要求上跳空必须大天前H和KH值,向下同理 } else if(pData->m_pData[i].m_fHigh<kh[i-1]&&pData->m_pData[i].m_fLow<kl[i-1]) { 此为向下K线的处理 bh[i]=-1,sx[i]=-1,bhs[i]=1; kh[i]=pData->m_pData[i].m_fHigh,kl[i]=pData->m_pData[i].m_fLow; if(pData->m_pData[i-1].m_fLow-pData->m_pData[i].m_fHigh>0.015&&kl[i-1]-pData->m_pData[i].m_fHigh>0.015) qk[i]=-1; } else if((pData->m_pData[i].m_fHigh>=kh[i-1]&&pData->m_pData[i].m_fLow<=kl[i-1])||(pData->m_pData[i].m_fHigh<=kh[i-1]&&pData->m_pData[i].m_fLow>=kl[i-1])) bhs[i]=bhs[i-1]+1,bh[i]=0,qk[i]=0,sx[i]=sx[i-1]; 此为包含K线的处理 if(bh[i]==0)此为包含K线的处理 { if(sx[i]==1)向上包含 { if(pData->m_pData[i].m_fHigh>=kh[i-1]) kh[i]=pData->m_pData[i].m_fHigh; else kh[i]=kh[i-1]; if(pData->m_pData[i].m_fLow>=kl[i-1]) kl[i]=pData->m_pData[i].m_fLow; else kl[i]=kl[i-1]; } if(sx[i]==-1)向下包含 { if(pData->m_pData[i].m_fHigh<kh[i-1]) kh[i]=pData->m_pData[i].m_fHigh; else kh[i]=kh[i-1]; if(pData->m_pData[i].m_fLow<kl[i-1]) kl[i]=pData->m_pData[i].m_fLow; else kl[i]=kl[i-1]; } } } |
经过这一段的处理,所有的K线就可经以按缠的要求得到了新的最高值KH和最低值KL,下面要做的就是分型笔线段了。