您现在的位置:程序化交易>> 期货公式>> 金字塔等>> 其他期货软件知识>>正文内容

_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工程上传到论坛,我们帮你看看

 

如果以上指标公式不适用于您常用的行情软件

或者您想改编成选股公式,以便快速选出某种形态个股的话,

可以联系我们相关技术人员 QQ: 262069696  点击在线交流进行 有偿 改编!

 


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容