这是基于序列模式下的EMA的C++算法
//计算收盘价的均价,一个常数参数,表示计算周期
//调用方法:
// "STOCKFUNC@MYEMA"(5)
__declspec(dllexport) int WINAPI MYEMA(CALCINFO* pData)
{
if ( pData->m_pfParam1 && //参数1有效
pData->m_nParam1Start<0 && //参数1为常数
pData->m_pfParam2==NULL ) //仅有一个参数
{
float dbPrvValues = 0;
float fParam = *pData->m_pfParam1;
int nPeriod = (int)fParam; //参数1
if(nPeriod>0)
{
float fTotal;
int i, j;
for ( i = nPeriod-1; i < pData->m_nNumData; i++ )//计算nPeriod周期的均线,数据从nPeriod-1开始有效,这里的pData->m_nNumData就是参与图表计算的k线数据数量
{
if(i == nPeriod-1)
{
pData->m_pResultBuf[i] = pData->m_pData[i].m_fClose;
dbPrvValues = pData->m_pData[i].m_fClose;
}
else
{
double dbEma = (2 * pData->m_pData[i].m_fClose + (nPeriod - 1) * dbPrvValues) / (nPeriod + 1);
pData->m_pResultBuf[i] = dbEma;
dbPrvValues = dbEma;
}
if(!_finite(pData->m_pResultBuf[i]))
{
pData->m_pResultBuf[i] = pData->m_pData[i].m_fClose;
dbPrvValues = pData->m_pData[i].m_fClose;
}
}
return nPeriod-1;
}
}
return -1;
}
这是附带的EMA工程C++源码范例
下载信息 [文件大小: 下载次数: ] | |
![]() |
PEL公式调用如下:
aa:"STOCKFUNC@MYEMA"(5);
bb:ema(close,5);
测试后你会发现效果与金字塔的EMA是一模一样的