關(guān)于飛狐的SMA算法, 1)最初在網(wǎng)上查到: input:n(20,1,99),m(2,1,99); if n<=m then EXIT; a:=c; y:=a; for i=2 to datacount do y:=(m*a+(n-m)*y)/n; 蟲sma:y,colorred; 然而,這個算法不成立!
2)正確的算法,需要用到“數(shù)組”,如: input:n(20,1,99),m(2,1,99); x:=c; y[1]:=x[1]; for i=2 to datacount do y[i]:(m*x[i]+(n-m)*y[i-1])/n; 經(jīng)測試,和飛狐原SMA(c,20,2)的算法完全一致。 只是有個很大的問題,調(diào)用該公式速度很慢,感覺有點(diǎn)"卡"。
3)如果通過DLL編程,速度就很快,如: __declspec(dllexport) int WINAPI MYSMA(CALCINFO* pData) { if ( pData->m_pfParam1 && pData->m_pfParam2 && pData->m_nParam1Start<0 && pData->m_pfParam3==NULL ) { float fParam1 = *pData->m_pfParam1; float fParam2 = *pData->m_pfParam2;
int nPeriod = (int)fParam1; int nP2 = (int)fParam2;
if(nPeriod>0) { float fSMA; int i; pData->m_pResultBuf[0]=pData->m_pData[0].m_fClose; for ( i = 1; i < pData->m_nNumData; i++ ) { fSMA = pData->m_pResultBuf[i-1]; pData->m_pResultBuf[i] = (pData->m_pData[i].m_fClose*nP2 + fSMA*(nPeriod-nP2))/nPeriod; } return 0; } } return -1; }
|