_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工程上傳到論壇,我們幫你看看
如果以上指標公式不適用于您常用的行情軟件
或者您想改編成選股公式,以便快速選出某種形態個股的話,
相關文章
-
沒有相關內容