_declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData)这个函数在逐K线模式下运行不正确。 [金字塔]
- 咨询内容:
_declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData)
{
/* if(pData->m_pfParam1 && pData->m_pfParam2 && //参数1,2有效
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[i] = fTotal/nPeriod;//平均
}
return nFirst+nPeriod-1;
}
}
return -1; */
// 对于逐K线模式,的处理方式的示范代码
if(pData->m_pfParam1 && pData->m_pfParam2)
{
//对于逐K线模式,由于传递数据都是数值,因此需要一个数组用来保存传递过来的参数,用来计算.
//本例只是简单演示这个用法,如果用户在公式多次调用了接口,则会出现重复使用该变量导致计算出错
//因此要根据情况做几个这种全局静态变量用于保存各种数据。
static std::vector<float> arMaData;
//第一个周期初始化数据
if(pData->m_dwBarpos == 0)
{
arMaData.clear();
}
double dbData = *pData->m_pfParam1;
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;
}这个函数在逐K线模式下运行不正确。
n=10
cyc:"myfun@MYMAVAR"(CLOSE,N),COLORYELLOW;
cyc会一直是0.
这个函数就是FmlDevelope下面,提供的函数。 - 金字塔客服:
自己顶。
- 用户回复:
DLL中的运行模式,你有没有指定到使用逐K线模式?
- 网友回复:
就是逐k线模式
- 网友回复:
//DLL公式的运行模式,系统系统调用该DLL时,告知公式系统该DLL公式运行在何种模式下
//返回值: 0本DLL运行序列模式 1本DLL运行逐周期模式
__declspec(dllexport) int WINAPI RUNMODE()
{
//本DLL运行序列模式,如果运行逐K线模式将此函数返回1,此时每执行一个K线都是调用本接口一次。
// return 1;
return 0;
}注意这个接口函数,如果还有问题,请将你的DLL工程上传到论坛,我们帮你看看
如果以上指标公式不适用于您常用的行情软件
或者您想改编成选股公式,以便快速选出某种形态个股的话,
相关文章
-
没有相关内容