这个是在fmlDLL的范例上直接改的 ,逐K线模式调用
__declspec(dllexport) int WINAPI Mypolyfit(CALCINFO* pCALCINFO)
{
if(pEng==NULL)
{
if(!(pEng=engOpen(NULL)))
{
MessageBox(NULL,"无法打开引擎","错误!",MB_OK);
return -1;
}
else
{
MessageBox(NULL,"成功!","恭喜!",MB_OK);
;
}
}
else// if ... 每K只执行一次?
{
int i;
static float count[30];
static float price[30];
for(i=0;i<=29;i++)
{
count[i]=pCALCINFO->m_dwBarpos-(29-i);
price[pCALCINFO->m_nNumData-1-i]=(pCALCINFO->m_pData[pCALCINFO->m_nNumData-1-i].m_fLow+ \
pCALCINFO->m_pData[pCALCINFO->m_nNumData-1-i].m_fHigh)/2;
}
mxArray *p_X=mxCreateDoubleMatrix(30,1,mxREAL);
mxArray *p_Y=mxCreateDoubleMatrix(30,1,mxREAL);
mxArray *p;//多项式拟合的结果:多项式的系数矩阵
//cout<<"创建矩阵完毕"<<endl;
memcpy((void *)mxGetPr(p_X),(void *)count,30*sizeof(float));
memcpy((void *)mxGetPr(p_Y),(void *)price,30*sizeof(float));
engPutVariable(pEng,"p_X",p_X);
engPutVariable(pEng,"p_Y",p_Y);
engEvalString(pEng,"p=polyfit(p_X,p_Y,2)");
p=engGetVariable(pEng,"p");
engEvalString(pEng,"p_Y=polyval(p,p_X,2)");
engEvalString(pEng,"plot(p_X,p_Y)");
mxDestroyArray(p_X);
mxDestroyArray(p_Y);
//测试用
/*
engEvalString(pEng,"x=0:0.001:2*pi;");
engEvalString(pEng,"y=sin(x);");
engEvalString(pEng,"plot(x,y)");
*/
for(i=29;i>5;i--)
{
;
}
*pCALCINFO->m_pResultBuf=2400;
}
return 1;
}
公式那边调用是 stockfunc@v();
点击“股指XXX”后,显示的matlab画图会高频不断刷新,不知道是怎么回事?不是一根K线才调用一次本程序吗 ?\
还有 price[pCALCINFO->m_nNumData-1-i]=(pCALCINFO->m_pData[pCALCINFO->m_nNumData-1-i].m_fLow+ \
pCALCINFO->m_pData[pCALCINFO->m_nNumData-1-i].m_fHigh)/2; 似乎调不到K线数据,不知道怎么回事 ??????????
DLL公式的逐K线模式有个专门的函数开关,不知道你是否有打开。
此外,你的描述我看不懂,可否把思路想清楚了,文字描述的更清楚一些