3.49K 浏览
0

不知道难度大不大?希望能尽快实现。

ringo 已回答的问题 2020年6月17日
0

有参考或者期望实现的线性回归函数逻辑代码么?

或者说talib的线性回归逻辑ok么

tygk98 发表新评论 2020年6月17日

FORECAST(x,known_y’s , known_x’s)

FORECAST(需要进行预测的数据点,因变量数组或数据区域,自变量数组或数据区域)

参数说明
X:为需要进行预测的数据点。

Known_y’s:为因变量数组或数据区域。

Known_x’s:为自变量数组或数据区域。
函数 FORECAST 的计算公式为 a+bx,式中:

函数 FORECAST 的计算公式

http://www.caohaifeng.com/upload/7/image/20180212/1518401094747916.gif

且:
http://www.caohaifeng.com/upload/7/image/20180212/1518401122737278.gif

函数 FORECAST 的计算公式

且其中 x 和 y 为样本平均数 AVERAGE(known_x’s) 和 AVERAGE(known_y’s)。

__declspec(dllexport) int WINAPI FHZQFXSIN(CALCINFO* pData)
{
if(pData->m_pfParam1 && //参数1有效
pData->m_nParam1Start>=0 && //参数1为序列数
pData->m_pfParam2==NULL) //有1个参数
{
const float* pValue = pData->m_pfParam1; //参数1
int nFirst = pData->m_nParam1Start; //有效值起始位

int i,ii,j; //zq=周期
int mm=pData->m_nNumData;
int maxzqlong=mm/2;
maxzqlong=(maxzqlong>=300?300:maxzqlong);

float r,gpave,zqave,gp2,zq2,gpzq;
float rr=0;
int kk,k0;

for(ii=0;ii<180;ii++)
{
for(i=5;im_pResultBuf,0,sizeof(float)*mm);
for(j=0;jm_pResultBuf[j]=sinf(2*pi*j/i+ii*pi/180);

gpave=zqave=gp2=zq2=gpzq=0;
for(j=0;jm_pResultBuf[j];
}
gpave=gpave/mm;
// zqave=zqave/mm;

for(j=0;jm_pResultBuf[j]/*-zqave*/)*(pData->m_pResultBuf[j]/*-zqave*/);
gpzq+=(pValue[j]-gpave)*(pData->m_pResultBuf[j]/*-zqave*/);
}

r=gpzq/sqrtf(gp2*zq2);

if(fabs(r)-fabs(rr)>0.0001)
{
rr=r;
kk=i;
k0=ii;
}
}
}

constf[0]=rr; //保存相关系数,由FHZQFX_GETR取回
constf[1]=kk; //保存周期长度,由FHZQFX_GETZQ取回
constf[2]=k0; //保存周期初始相角,由FHZQFX_GETZQ0取回

i=kk;ii=k0;
// memset(pData->m_pResultBuf,0,sizeof(float)*mm);
for(j=0;jm_pResultBuf[j]=sinf(2*pi*j/i+ii*pi/180);

return nFirst;
}
return -1;
}