以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- 金字塔使用dll有很大问题 (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=8881) |
-- 作者:sbant -- 发布时间:2011/11/9 14:17:13 -- 金字塔使用dll有很大问题 主图策略下面附图显示一个附图指标,改变附图指标 主图上的策略开平仓位置都会改变
也就是数据互相之间会干扰
|
-- 作者:admin -- 发布时间:2011/11/9 14:29:01 -- 这种情况可能说明你的DLL内部使用的数组出现了越界 |
-- 作者:sbant -- 发布时间:2011/11/9 14:44:54 -- __declspec(dllexport) int WINAPI JRSX(CALCINFO* pData) const float* pValue1 = pData->m_pCalcParam[0].m_pfParam; double *input=new double[count]; for (int i=0;i<count;i++) int cond=RSX(count,input,output,Length); if (cond==0) delete []input;
每一段都类似这些 数组 new了 后delete 不明白怎么能越界
而且老版本金字塔没有这种问题 同时开多个dll内的函数、指标都没问题的 [此贴子已经被作者于2011-11-9 14:48:39编辑过]
|
-- 作者:admin -- 发布时间:2011/11/9 15:01:29 -- 公式怎么调用的,我本地测试一下 |
-- 作者:sbant -- 发布时间:2011/11/9 15:07:06 -- 请给个qq 我把dll和 相关fla都发给你 |
-- 作者:admin -- 发布时间:2011/11/9 16:48:09 -- 请将测试公式直接贴论坛上 |
-- 作者:sbant -- 发布时间:2011/11/9 16:58:12 -- 好大一堆。。 随意了 希望能有帮助。。
问题是我还另外使用了外接dll 根本没法贴的
其他代码我都贴了好几遍了 [此贴子已经被作者于2011-11-9 16:59:02编辑过]
|
-- 作者:sbant -- 发布时间:2011/11/9 16:59:40 -- stockfunc.h 部分
__declspec(dllexport) int WINAPI MRSX(CALCINFO* pData); |
-- 作者:sbant -- 发布时间:2011/11/9 17:01:25 -- stockfunc.cpp 部分
int mRSX(double Buffer[],int Lengh,double JRSX_Bufer[]) double v4,v8,v10,v14,v18,v20,v0C,v1C,v8A; if (Lengh-1>=5)w=Lengh-1;else w=5; Kg=3/(Lengh+2.0); Hg=1.0-Kg; for (shift=0;shift<sizeof(Buffer);shift++) v8 = Buffer[shift]-Buffer[shift-1]; v8A=abs(v8); f28 = Hg * f28 + Kg * v8; f58 = Hg * f58 + Kg * v8A; if ((r <= w) && (v8!= 0)) k = 1; } return 0;
const float* pValue1 = pData->m_pCalcParam[0].m_pfParam; double *input=new double[count]; for (int i=0;i<count;i++) int cond=mRSX(input,Length,output); if (cond==0) delete []input; int mMA(double input[],int Length,double output[]) for (int i=0;i<sizeof(input)-Length+1;i++) return 0; __declspec(dllexport) int WINAPI MMA(CALCINFO* pData) const float* pValue1 = pData->m_pCalcParam[0].m_pfParam; double *input=new double[count]; for (int i=0;i<count;i++) int cond=mMA(input,Length,output); if (cond==0) delete []input; |
-- 作者:sbant -- 发布时间:2011/11/9 17:01:56 -- 这2段是自编的代码 不用外接dll的 |