您現在的位置:程序化交易>> 期貨公式>> 金字塔等>> 金字塔模型>>正文內容

金字塔C接口用逐K模式[金字塔模型]

  • 咨詢內容:

    //計算收盤價的均價,一個常數參數,表示計算周期
    //調用方法:
    // "STOCKFUNC@MYMACLOSE"(5)

    __declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData)
    {
     if ( pData->m_pfParam1 &&    //參數1有效
       pData->m_nParam1Start<0 &&   //參數1為常數
       pData->m_pfParam2==NULL )   //僅有一個參數
     {
      float fParam = *pData->m_pfParam1;
      int nPeriod = (int)fParam;   //參數1 www.tumamayizhan.com
      if(nPeriod>0)
      {
       float fTotal;
       int i, j;
       for ( i = nPeriod-1; i < pData->m_nNumData; i++ )//計算nPeriod周期的均線,數據從nPeriod-1開始有效
       {
        fTotal = 0.0f;
        for ( j = 0; j < nPeriod; j++ )    //累加
         fTotal += pData->m_pData[i-j].m_fClose;
        pData->m_pResultBuf[i] = fTotal/nPeriod; //平均
       }
       return nPeriod-1;
      }
     }

     return -1;
    }

    //計算均價,2個參數,參數1為待求均線的數據,參數2表示計算周期
    //調用方法:
    // "STOCKFUNC@MYMAVAR"(CLOSE-OPEN,5)

    __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<double> arMaData;
      
      //第一個周期初始化數據 www.tumamayizhan.com
      if(pData->m_dwBarpos == 0)
      {
       arMaData.clear();
      }
      
      double dbData = *pData->m_pfParam1;

      //防止使用僅刷最后K線的反復刷新問題
      if(arMaData.size() >= pData->m_nNumData)
       arMaData[arMaData.size()-1] = dbData; //僅僅更新最后一個數據
      else
       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;*/
    }

    //計算多個序列的均值,5個參數,參數1-4為待求多個序列,參數5用于舉例說明數值參數的用法,實際在此例中無需該參數
    /*
    調用方法:
     MA1:=MA(CLOSE,3);
     MA2:=MA(CLOSE,6);
     MA3:=MA(CLOSE,12);
     MA4:=MA(CLOSE,24);
     MYBBI: "STOCKFUNC@MYBBI"(MA1, MA2, MA3, MA4, 4);
    */

    __declspec(dllexport) int WINAPI MYBBI(CALCINFO* pData)
    {
     if ( pData->m_pCalcParam[0].m_nParamStart >= 0 &&
       pData->m_pCalcParam[1].m_nParamStart >= 0 &&
       pData->m_pCalcParam[2].m_nParamStart >= 0 &&
       pData->m_pCalcParam[3].m_nParamStart >= 0 )   //4個序列都含有效數值
     {
      //計算返回的序列的第一個有效值位置
      int nFirst = pData->m_pCalcParam[3].m_nParamStart;  //已知返回的序列的第一個有效值位置與第4個序列一致 www.tumamayizhan.com QQ 262069696
    //若不知,則
    /*
      int nFirst = pData->m_pCalcParam[0].m_nParamStart;
      if ( nFirst < pData->m_pCalcParam[1].m_nParamStart )
       nFirst = pData->m_pCalcParam[1].m_nParamStart;
      if ( nFirst < pData->m_pCalcParam[2].m_nParamStart )
       nFirst = pData->m_pCalcParam[2].m_nParamStart;
      if ( nFirst < pData->m_pCalcParam[3].m_nParamStart )
       nFirst = pData->m_pCalcParam[3].m_nParamStart;
     */

      const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;
      const float* pValue2 = pData->m_pCalcParam[1].m_pfParam;
      const float* pValue3 = pData->m_pCalcParam[2].m_pfParam;
      const float* pValue4 = pData->m_pCalcParam[3].m_pfParam;
      int nNum = (int)(pData->m_pCalcParam[4].m_fParam);  //實際上該例中已知nNum=4,在此用于說明數值參數的用法
      for( int i = nFirst; i < pData->m_nNumData; i++ )
      {
       pData->m_pResultBuf[i] =
        (pValue1[i] + pValue2[i] + pValue3[i] + pValue4[i])/nNum;
      }
      return nFirst;
     }
     return -1;
    }

     

 

有思路,想編寫各種指標公式,程序化交易模型,選股公式,預警公式的朋友

可聯系技術人員 QQ: 1145508240  有需要幫忙請點擊這里留言?。。? title=進行 有償 編寫!不貴!點擊查看價格!

 


【字體: 】【打印文章】【查看評論

相關文章

    沒有相關內容
  主站蜘蛛池模板: 欧美在线黄色片| 野花社区视频在线观看| 婷婷五月综合激情| 久别的草原电视剧免费观看| 狠狠色噜噜狠狠狠888米奇视频| 成人欧美一区二区三区黑人| 亚洲欧美激情小说另类| 老外毛片免费视频播放| 国产欧美亚洲精品a第一页| av色综合网站| 成年人视频在线观看免费| 五月天婷婷在线视频国产在线| 精品香蕉久久久午夜福利| 国产成人精品久久综合| 91噜噜噜在线观看| 妖精www视频在线观看高清| 久久久久亚洲av无码去区首| 欧美多人野外伦交| 人人妻人人狠人人爽| 美女胸又大又www又黄的网站| 欧美bbbbbxxxxx| 免费看成年人网站| 青青草国产成人久久91网| 国产精品无码素人福利不卡| аⅴ中文在线天堂| 日本午夜精品一区二区三区电影 | 久久久青草青青亚洲国产免观 | 天天在线天天综合网色| 久久99久久99精品免观看不卡| 激情内射亚洲一区二区三区爱妻| 国产在线视频www色| 2020年亚洲天天爽天天噜| 日本精品少妇一区二区三区 | fc2免费人成在线视频| 无码国模国产在线观看| 久久综合香蕉国产蜜臀av| 欧美日韩中文国产va另类| 亲密爱人之无限诱惑| 美女被艹免费视频| 国产国语一级毛片| 日本激情一区二区三区|