我使用StockFun工程中自带的逐K线接口为什么在金字塔中调用依然说重复调用了2次未来函数,不允许使用。
自带的代码如下:
//计算均价,2个参数,参数1为待求均线的数据,参数2表示计算周期
//调用方法:
//
"STOCKFUNC@MYMAVAR1"(CLOSE-OPEN,5)
__declspec(dllexport) int WINAPI MYMAVAR1(CALCINFO* pData)
{
//对于逐K线模式,的处理方式的示范代码
if(pData->m_pfParam1 && pData->m_pfParam2)
{
//对于逐K线模式,由于传递数据都是数值,因此需要一个数组用来保存传递过来的参数,用来计算.
//本例只是简单演示这个用法,如果用户在公式多次调用了接口,则会出现重复使用该变量导致计算出错
//因此要根据情况做几个这种全局静态变量用于保存各种数据。
static std::vector<double> arMaData;
//第一个周期初始化数据
if(pData->m_dwBarpos == 0)
{
arMaData.clear();
}
double dbData = *pData->m_pfParam1;
//防止使用仅刷最后K线的反复刷新问题
if(arMaData.size() >= pData->m_nNumData)
arMaData[arMaData.size()-1] = dbData; //仅仅更新最后一个数据
else
arMaData.push_back(dbData);
DWORD dwCyc = (DWORD) *pData->m_pfParam2;
if(pData->m_dwBarpos < dwCyc-1)
{
//对于未到计算周期,返回无效数据
return -1;
}
//先累加
float fAdd = 0;
for(DWORD i = pData->m_dwBarpos-(dwCyc-1); i <= pData->m_dwBarpos; i++)
{
fAdd += arMaData[i];
}
*pData->m_pResultBuf = fAdd / dwCyc;
}
return 1;
}
//DLL公式的运行模式,系统系统调用该DLL时,告知公式系统该DLL公式运行在何种模式下
//返回值: 0本DLL运行序列模式 1本DLL运行逐周期模式
__declspec(dllexport) int WINAPI RUNMODE()
{
//本DLL运行序列模式,如果运行逐K线模式将此函数返回1,此时每执行一个K线都是调用本接口一次。
return 1;
// return 0;
}
设置dll运行模式,用1