欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 金字塔使用dll有很大问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有6883人关注过本帖树形打印复制链接

主题:金字塔使用dll有很大问题

帅哥哟,离线,有人找我吗?
sbant
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:27 积分:260 威望:0 精华:0 注册:2010/1/14 10:32:46
金字塔使用dll有很大问题  发帖心情 Post By:2011/11/9 14:17:13 [只看该作者]

主图策略下面附图显示一个附图指标,改变附图指标 主图上的策略开平仓位置都会改变

 

也就是数据互相之间会干扰

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
admin
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2011/11/9 14:29:01 [只看该作者]

这种情况可能说明你的DLL内部使用的数组出现了越界

 回到顶部
帅哥哟,离线,有人找我吗?
sbant
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:27 积分:260 威望:0 精华:0 注册:2010/1/14 10:32:46
  发帖心情 Post By:2011/11/9 14:44:54 [只看该作者]

__declspec(dllexport) int WINAPI JRSX(CALCINFO* pData)
{
 if ( pData->m_pCalcParam[1].m_nParamStart >= 0)
 {  
  int Length=(int)pData->m_pCalcParam[1].m_pfParam[0];  
  int count=pData->m_nNumData;

  const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;

  double *input=new double[count];
  double *output=new double[count];

  for (int i=0;i<count;i++)
  { input[i]=(double)pValue1[i]; }  

  int cond=RSX(count,input,output,Length);

  if (cond==0)
  {
   for (int i=0;i<count;i++)
   {   
    pData->m_pResultBuf[i]=(float)output[i];     
   }   
  }

  delete []input;
  delete []output;
  return 0;
 }
 return -1;
}

 

 

 

每一段都类似这些 数组 new了 后delete 不明白怎么能越界

 

而且老版本金字塔没有这种问题 同时开多个dll内的函数、指标都没问题的

[此贴子已经被作者于2011-11-9 14:48:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
admin
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2011/11/9 15:01:29 [只看该作者]

公式怎么调用的,我本地测试一下

 回到顶部
帅哥哟,离线,有人找我吗?
sbant
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:27 积分:260 威望:0 精华:0 注册:2010/1/14 10:32:46
  发帖心情 Post By:2011/11/9 15:07:06 [只看该作者]

请给个qq 我把dll和 相关fla都发给你


 回到顶部
帅哥哟,离线,有人找我吗?
admin
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:7302 积分:32559 威望:1000 精华:45 注册:2003/12/30 16:34:32
  发帖心情 Post By:2011/11/9 16:48:09 [只看该作者]

请将测试公式直接贴论坛上

 回到顶部
帅哥哟,离线,有人找我吗?
sbant
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:27 积分:260 威望:0 精华:0 注册:2010/1/14 10:32:46
  发帖心情 Post By:2011/11/9 16:58:12 [只看该作者]

好大一堆。。 随意了 希望能有帮助。。

 

问题是我还另外使用了外接dll 根本没法贴的

 

其他代码我都贴了好几遍了

[此贴子已经被作者于2011-11-9 16:59:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
sbant
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:27 积分:260 威望:0 精华:0 注册:2010/1/14 10:32:46
  发帖心情 Post By:2011/11/9 16:59:40 [只看该作者]

stockfunc.h 部分

 

__declspec(dllexport) int WINAPI MRSX(CALCINFO* pData);
__declspec(dllexport) int WINAPI MJMA(CALCINFO* pData);
__declspec(dllexport) int WINAPI MMA(CALCINFO* pData);


 回到顶部
帅哥哟,离线,有人找我吗?
sbant
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:27 积分:260 威望:0 精华:0 注册:2010/1/14 10:32:46
  发帖心情 Post By:2011/11/9 17:01:25 [只看该作者]

stockfunc.cpp 部分

 

int mRSX(double Buffer[],int Lengh,double JRSX_Bufer[])
{
 int    shift,r,w,k,Tnew,counted_bars,T0,T1;

 double v4,v8,v10,v14,v18,v20,v0C,v1C,v8A;  
 double F28,F30,F38,F40,F48,F50,F58,F60,F68,F70,F78,F80;
 double f0,f28,f30,f38,f40,f48,f50,f58,f60,f68,f70,f78,f80,Kg,Hg;

 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++)
 {
  if (r==0)
  {
   r = 1; k = 0;
  }
  else
  {
   if (r>=w) r=w+1; else r=r+1;

   v8 = Buffer[shift]-Buffer[shift-1]; v8A=abs(v8);

   f28 = Hg  * f28 + Kg  *  v8;
   f30 = Kg  * f28 + Hg  * f30;
   v0C = 1.5 * f28 - 0.5 * f30;
   f38 = Hg  * f38 + Kg  * v0C;
   f40 = Kg  * f38 + Hg  * f40;
   v10 = 1.5 * f38 - 0.5 * f40;
   f48 = Hg  * f48 + Kg  * v10;
   f50 = Kg  * f48 + Hg  * f50;
   v14 = 1.5 * f48 - 0.5 * f50;

   f58 = Hg  * f58 + Kg  * v8A;
   f60 = Kg  * f58 + Hg  * f60;
   v18 = 1.5 * f58 - 0.5 * f60;
   f68 = Hg  * f68 + Kg  * v18;
   f70 = Kg  * f68 + Hg  * f70;
   v1C = 1.5 * f68 - 0.5 * f70;
   f78 = Hg  * f78 + Kg  * v1C;
   f80 = Kg  * f78 + Hg  * f80;
   v20 = 1.5 * f78 - 0.5 * f80;

   if ((r <= w) && (v8!= 0)) k = 1;
   if ((r == w) && (k == 0)) r = 0;
  }
  if ((r >  w) &&(v20 > 0.0000000001 ))
  {
   v4 = (v14/v20+1.0)*50.0; if(v4>100.0)v4=100.0; if(v4<0.0)v4=0.0;
  }
  else  v4 = 50.0;
  JRSX_Bufer[shift]=v4;

 }

 return 0;
}


__declspec(dllexport) int WINAPI MRSX(CALCINFO* pData)
{
 if ( pData->m_pCalcParam[1].m_nParamStart >= 0)
 {  
  int Length=(int)pData->m_pCalcParam[1].m_pfParam[0];  
  int count=pData->m_nNumData;

  const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;

  double *input=new double[count];
  double *output=new double[count];

  for (int i=0;i<count;i++)
  { input[i]=(double)pValue1[i]; }  

  int cond=mRSX(input,Length,output);

  if (cond==0)
  {
   for (int i=0;i<count;i++)
   {   
    pData->m_pResultBuf[i]=(float)output[i];     
   }   
  }

  delete []input;
  delete []output;
  return 0;
 }
 return -1;
}

int mMA(double input[],int Length,double output[])
{
 for (int i=0;i<Length-1;i++)
 {
  output[i]=0;
 }

 for (int i=0;i<sizeof(input)-Length+1;i++)
 {
  double tmp=0;
  for (int j=0;j<Length;j++)
  {
   tmp+=input[i+j];
  }
  output[i+Length-1]=tmp/Length;
  
 }

 return 0;
}

__declspec(dllexport) int WINAPI MMA(CALCINFO* pData)
{
 if ( pData->m_pCalcParam[1].m_nParamStart >= 0)
 {  
  int Length=(int)pData->m_pCalcParam[1].m_pfParam[0];  
  int count=pData->m_nNumData;

  const float* pValue1 = pData->m_pCalcParam[0].m_pfParam;

  double *input=new double[count];
  double *output=new double[count];

  for (int i=0;i<count;i++)
  { input[i]=(double)pValue1[i]; }  

  int cond=mMA(input,Length,output);

  if (cond==0)
  {
   for (int i=0;i<count;i++)
   {   
    pData->m_pResultBuf[i]=(float)output[i];     
   }   
  }

  delete []input;
  delete []output;
  return 0;
 }
 return -1;
}


 回到顶部
帅哥哟,离线,有人找我吗?
sbant
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:27 积分:260 威望:0 精华:0 注册:2010/1/14 10:32:46
  发帖心情 Post By:2011/11/9 17:01:56 [只看该作者]

这2段是自编的代码 不用外接dll的


 回到顶部
总数 11 1 2 下一页