下面是飞狐,分析家C语言接口的一个例子,小的有一点不解,盼南客或各位老师说明.
谢谢啦
__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData)
{
if(pData->m_pfParam1 && pData->m_pfParam2 && //参数12有效
pData->m_nParam1Start>=0 && //参数1为序列数
pData->m_pfParam3==NULL) //有2个参数
{
const float* pValue = pData->m_pfParam1; //参数1
int nFirst = pData->m_nParam1Start; //有效值起始位
float fParam = *pData->m_pfParam2; //参数2
int nPeriod = (int)fParam;
if( nFirst >= 0 && nPeriod > 0 )
{
float fTotal;
int i, j;
for ( i = nFirst+nPeriod-1; i < pData->m_nNumData; i++ )
{
fTotal = 0.0f;
for ( j=0; j < nPeriod; j++ ) //累加
fTotal += pValue[i-j];
pData->m_pResultBuf = fTotal/nPeriod;//平均
}
return nFirst+nPeriod-1;
}
}
return -1;
}
倒数第四行return nFirst+nPeriod-1是什么意思,为什么要返回它?不是说函数返回的数值在
pData->m_pResultBuf里面吗?

最新回复
清扬 (2008-6-29 23:45:59)
return 0;
起始位置在第一根K线。
return 3;
起始位置在第四根K线。
起始位置也可以用变量(表达式)来表示。
nihs (2008-6-30 14:26:04)
这里为什么要返回K线的起始位置?在实际编程应用中我们应返回那一根K线的位置?为什么要返回这个位置?这些问题如果不清楚的话,就不知如何使用了.
nihs (2008-6-30 14:31:33)
kuhasu (2008-7-04 08:57:40)
清扬 (2008-7-04 11:37:38)
QUOTE:
这还不简单,如果没有这个返回位置的话,BUG就要满天飞了。在很多情况下,比如说K线根数共5根,而你要输出10日均线,那么就
return -1;
什么都不返回。
比如说K线根数共20根,你要输出10日均线,那么就要
return 9;
在第十根K线上才开始有输出值。
总之,要保证在每根K线上,有一个确定的输出值。
清扬 (2008-7-04 11:45:18)
return x-1;
至于序列的均线,
int nFirst = pData->m_nParam1Start; //有效值起始位--这是序列的起始位置
float fParam = *pData->m_pfParam2; //参数2--这是均线的参数
int nPeriod = (int)fParam;
所以,最后的起始位置应该为:
return nFirst+nPeriod-1;
清扬 (2008-7-04 11:54:52)
在示例代码中,是在循环中进行限制的:
for ( i = nFirst+nPeriod-1; i < pData->m_nNumData; i++ )
其实,在程序开始部分,用if来进行限制,会使思路更清晰,程序的BUG出现可能性会更少。
nihs (2008-7-04 13:24:30)