以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- C++逐K线的例子,在框架情况下会相互影响 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=149674) |
-- 作者:bb523 -- 发布时间:2017/3/25 14:12:42 -- C++逐K线的例子,在框架情况下会相互影响 __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; } 在没有行情况的时候,我用橡胶螺纹两个品种,显示返回的值是正常的,但有行情况的时候两个窗口的值会跳动,最后变成一个值。但是两个品种是不相同不可能显示同一个值。说明相互之间存在调用。
|
-- 作者:马良 -- 发布时间:2017/3/25 21:08:58 -- 是不是选择了dll的内存驻留模式了? |
-- 作者:bb523 -- 发布时间:2017/3/27 15:25:00 -- 不是,选择不选择都会出现,我试了。要有行情的时候看才会出现,没行情况的时候显示是正常值。 |