請問:金字塔C接口用逐K模式,下面代碼哪個需要用? [金字塔]
- 咨詢內(nèi)容:
//計算收盤價的均價,一個常數(shù)參數(shù),表示計算周期
//調(diào)用方法:
// "STOCKFUNC@MYMACLOSE"(5)__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData)
{
if ( pData->m_pfParam1 && //參數(shù)1有效
pData->m_nParam1Start<0 && //參數(shù)1為常數(shù)
pData->m_pfParam2==NULL ) //僅有一個參數(shù)
{
float fParam = *pData->m_pfParam1;
int nPeriod = (int)fParam; //參數(shù)1
if(nPeriod>0)
{
float fTotal;
int i, j;
for ( i = nPeriod-1; i < pData->m_nNumData; i++ )//計算nPeriod周期的均線,數(shù)據(jù)從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個參數(shù),參數(shù)1為待求均線的數(shù)據(jù),參數(shù)2表示計算周期
//調(diào)用方法:
// "STOCKFUNC@MYMAVAR"(CLOSE-OPEN,5)__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData)
{
if(pData->m_pfParam1 && pData->m_pfParam2 && //參數(shù)1,2有效
pData->m_nParam1Start>=0 && //參數(shù)1為序列數(shù)
pData->m_pfParam3==NULL) //有2個參數(shù)
{
const float* pValue = pData->m_pfParam1; //參數(shù)1
int nFirst = pData->m_nParam1Start; //有效值起始位
float fParam = *pData->m_pfParam2; //參數(shù)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線模式,由于傳遞數(shù)據(jù)都是數(shù)值,因此需要一個數(shù)組用來保存?zhèn)鬟f過來的參數(shù),用來計算.
//本例只是簡單演示這個用法,如果用戶在公式多次調(diào)用了接口,則會出現(xiàn)重復(fù)使用該變量導(dǎo)致計算出錯
//因此要根據(jù)情況做幾個這種全局靜態(tài)變量用于保存各種數(shù)據(jù)。
static std::vector<double> arMaData;
//第一個周期初始化數(shù)據(jù)
if(pData->m_dwBarpos == 0)
{
arMaData.clear();
}
double dbData = *pData->m_pfParam1;//防止使用僅刷最后K線的反復(fù)刷新問題
if(arMaData.size() >= pData->m_nNumData)
arMaData[arMaData.size()-1] = dbData; //僅僅更新最后一個數(shù)據(jù)
else
arMaData.push_back(dbData);DWORD dwCyc = (DWORD) *pData->m_pfParam2;
if(pData->m_dwBarpos < dwCyc-1)
{
//對于未到計算周期,返回?zé)o效數(shù)據(jù)
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個參數(shù),參數(shù)1-4為待求多個序列,參數(shù)5用于舉例說明數(shù)值參數(shù)的用法,實際在此例中無需該參數(shù)
/*
調(diào)用方法:
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個序列都含有效數(shù)值
{
//計算返回的序列的第一個有效值位置
int nFirst = pData->m_pCalcParam[3].m_nParamStart; //已知返回的序列的第一個有效值位置與第4個序列一致
//若不知,則
/*
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,在此用于說明數(shù)值參數(shù)的用法
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;
} - 金字塔客服: 請版主改好一下,菜鳥是我
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 1145508240 進行 有償 編寫!(不貴!點擊查看價格!)
相關(guān)文章
-
沒有相關(guān)內(nèi)容