
__declspec(dllexport) int WINAPI KDKKZQ(CALCINFO* pData)
	{ if ( pData->m_pfParam1 &&				//参数1有效
		 pData->m_nParam1Start<0 &&			//参数1为常数
		 pData->m_pfParam2==NULL )			//仅有一个参数
	{           float fParam = *pData->m_pfParam1; 
		        int nPeriod = (int)fParam;			//参数1
			    float *ma1= new float[pData->m_nNumData+1];
	  	    	float *ma2= new float[pData->m_nNumData+1];
				float *ma3= new float[pData->m_nNumData+1];
				
                float fTotal, f1Total, f2Total;
                int i, j,nPeriodCyc,n1PeriodCyc,n2PeriodCyc;
		for (i=0; i<pData->m_nNumData; i++)
		{  
                        nPeriodCyc = 5;
						n1PeriodCyc = 10;
						n2PeriodCyc = 20;
						
                        if(nPeriodCyc >= i+1) //这里控制计算实际K线数量，如果小于指定周期则以实际周期开始
                                nPeriodCyc = i+1;
                       if(n1PeriodCyc >= i+1) //这里控制计算实际K线数量，如果小于指定周期则以实际周期开始
                                n1PeriodCyc = i+1;
					   if(n2PeriodCyc >= i+1) //这里控制计算实际K线数量，如果小于指定周期则以实际周期开始
                                n2PeriodCyc = i+1;
					  
                        fTotal = 0.0f;
						f1Total = 0.0f;
						f2Total = 0.0f;
						
						switch ( nPeriodCyc)
						{case 1:
						ma1[i] =pData->m_pData[0].m_fOpen;
						ma2[i] =pData->m_pData[0].m_fOpen;
						ma3[i] =pData->m_pData[0].m_fOpen;
						;
						break;
						default:
						for ( j = 1; j < nPeriodCyc; j++ )                                //ma1~ma7为收盘价穿越同周期普通均线的极限位置，也就是前面几个周期的收盘价平均，剔除了本周期收盘价参与计算
                         {fTotal += pData->m_pData[i-j].m_fClose;
                         ma1[i] = fTotal/(nPeriodCyc-1);  
						}//平均
						for ( j = 1; j < n1PeriodCyc; j++ )                                //累加
                         {f1Total += pData->m_pData[i-j].m_fClose;
                         ma2[i] = f1Total/(n1PeriodCyc-1);  
						}//平均
						for ( j = 1; j < n2PeriodCyc; j++ )                                //累加
                         {f2Total += pData->m_pData[i-j].m_fClose;
                         ma3[i] = f2Total/(n2PeriodCyc-1);  
						}//平均
						
						
							break;
						}
		}
		  
		   switch (nPeriod)
		   {case 1:                 //maxco
		       for(i=0;i<pData->m_nNumData;i++)
					pData->m_pResultBuf[i] =pData->m_pData[i].m_fClose>pData->m_pData[i].m_fOpen?pData->m_pData[i].m_fClose:pData->m_pData[i].m_fOpen;
		    break;
			case 2:    //minco
				for(i=0;i<pData->m_nNumData;i++)
					pData->m_pResultBuf[i] =pData->m_pData[i].m_fClose>pData->m_pData[i].m_fOpen?pData->m_pData[i].m_fOpen:pData->m_pData[i].m_fClose;
			break;
		             case 148:
				         int m3zds3;
				     for(i=0;i<pData->m_nNumData;i++)
						{ float *m2zd= new float[pData->m_nNumData];
							m2zd[i]=ma1[i]>ma2[i]?ma1[i]:ma2[i];
						 if(i<5)
		                    m3zds3=i;    //均线组合后的最大或最小值穿越均线的周期
		                 else if(m2zd[i]>ma3[i] && m2zd[i-1]<=ma3[i-1] && (m2zd[i-1]<ma3[i-1] || m2zd[i-2]<ma3[i-2] || m2zd[i-3]<ma3[i-3] || m2zd[i-4]<ma3[i-4] ||m2zd[i-5]<ma3[i-5]))
			                m3zds3=0;
		                 else
			                  m3zds3=m3zds3+1;
						 pData->m_pResultBuf[i] =(float)m3zds3;
						 delete [] m2zd;
					 }
					 
					 break;
					 case 149:
				         int m3zxx3;
				     for(i=0;i<pData->m_nNumData;i++)
						{ float *m2zx= new float[pData->m_nNumData];
							m2zx[i]=ma1[i]<ma2[i]?ma1[i]:ma2[i];
						 if(i<5)
		                    m3zds3=i;    //均线组合后的最大或最小值穿越均线的周期
		                 else if(m2zx[i]<ma3[i] && m2zx[i-1]>=ma3[i-1] && (m2zx[i-1]>ma3[i-1] || m2zx[i-2]>ma3[i-2] || m2zx[i-3]>ma3[i-3] || m2zx[i-4]>ma3[i-4] ||m2zx[i-5]>ma3[i-5]))
			                m3zxx3=0;
		                 else
			                  m3zxx3=m3zxx3+1;
						 pData->m_pResultBuf[i] =(float)m3zxx3;
						 delete [] m2zx;
					 }
					 
					 break;
		  default:
			  pData->m_pResultBuf[i] =(float)406720655;
			  break;

		  }
		  delete [] ma1;
		  delete [] ma2;
		  delete [] ma3;
		  
                return 0;       
        }

        return -1;
}
	