C++逐K線的例子,在框架情況下會相互影響
作者:金字塔 來源:cxh99.com 發布時間:2017年07月11日
-
咨詢內容:
__declspec(dllexport) int WINAPI RUNMODE()
{
return 1;
}
__declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData)
{if(pData->m_pfParam1 && pData->m_pfParam2)
{
//對于逐K線模式,由于傳遞數據都是數值,因此需要一個數組用來保存傳遞過來的參數,用來計算.
//本例只是簡單演示這個用法,如果用戶在公式多次調用了接口,則會出現重復使用該變量導致計算出錯
//因此要根據情況做幾個這種全局靜態變量用于保存各種數據。
static std::vector<double> arMaData;
//第一個周期初始化數據
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;
}
在沒有行情況的時候,我用橡膠螺紋兩個品種,顯示返回的值是正常的,但有行情況的時候兩個窗口的值會跳動,最后變成一個值。但是兩個品種是不相同不可能顯示同一個值。說明相互之間存在調用。
?
-
金字塔客服:
是不是選擇了dll的內存駐留模式了?
?
-
用戶回復:
不是,選擇不選擇都會出現,我試了。要有行情的時候看才會出現,沒行情況的時候顯示是正常值。