分享

飞狐的SMA算法

 禁忌石 2012-03-17
飞狐的SMA算法
2009-08-01 2:12
关于飞狐的SMA算法,
1)最初在网上查到:
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)正确的算法,需要用到“数组”,如:
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;
经测试,和飞狐原SMA(c,20,2)的算法完全一致。
只是有个很大的问题,调用该公式速度很慢,感觉有点"卡"。

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;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多