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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 请问金字塔函数的输出到底是什么

   

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


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

主题:请问金字塔函数的输出到底是什么

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


加好友 发短信
等级:新手上路 帖子:27 积分:260 威望:0 精华:0 注册:2010/1/14 10:32:46
请问金字塔函数的输出到底是什么  发帖心情 Post By:2011/2/11 21:40:20 [只看该作者]

ma1:= ma(c,5);

ma2: ma(ma1,5);

 

ma3: "STOCKFUNC@XX"(c,5);

 

ma4: "STOCKFUNC@XX"(ma1,5);

 

如上 系统的ma函数 能用close作为输入,也能用ma计算后的数据作为输入

 

然而用外部dll("STOCKFUNC@XX"为外部函数,用c肯定有输出结果) ma3有输出结果,但是ma4一直为0

 

这是为什么

[此贴子已经被作者于2011-2-11 21:41:41编辑过]

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


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

说下详细的情况

 

金字塔的函数能多次嵌套

 

比如上面的ma1 ma2

 

经过测试  “STOCKFUNC@XX”(c,5) 的输出 能再经过ma 获得结果

“STOCKFUNC@XX”的输出 不能再次经过“STOCKFUNC@XX”获得结果

ma(c,5)的输出 也不能再次经过“STOCKFUNC@XX”获得结果

 

 

想到可能的情况 dll的外部函数 只支持序列数据,不支持数组

“STOCKFUNC@XX”  用close序列数据作为输入时,能输出数组结果。 但用数组数据输入时就没有结果,如ma(c,5)的输出也是数组。

 

而金字塔内部函数同时支持序列数据和数组

 

请问如何解决

 

 

 

[此贴子已经被作者于2011-2-12 13:28:33编辑过]

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


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

请详细说明XMA的算法和使用方法


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


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

StockFunc.h 中的申明,用来让金字塔使用 实际函数为"STOCKFUNC@JJMA"(输入,参数1,参数2);

__declspec(dllexport) int WINAPI JJMA(CALCINFO* pData);

 

StockFunc.cpp 中的内容

//调用外部dll的申明

extern "C" __declspec(dllimport) int WINAPI JMA(int iSize,double *pdSignal,double dSmooth,double dPhase,double *pdFilter);

 

//实际的调用函数

__declspec(dllexport) int WINAPI JJMA(CALCINFO* pData)
{
 if ( pData->m_pCalcParam[2].m_nParamStart >= 0)
 {  
  int Length=(int)pData->m_pCalcParam[1].m_pfParam[0];
  int Phase=(int)pData->m_pCalcParam[2].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=JMA(count,input,Length,Phase,output);

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

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

[此贴子已经被作者于2011-2-12 13:48:55编辑过]

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


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

自定义的DLL函数最好不要嵌套调用


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


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

这句话不是解决问题的说法吧。。。

而且首要问题是金字塔函数的输出(比如ma)也没法用

 

主要在这一句

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

 

m_pfParam 是close的时候 能转换成 float的数组

但是 m_pfParam 为金字塔函数的输出时,到底是什么,其实就是这篇帖子的题目

[此贴子已经被作者于2011-2-12 14:14:20编辑过]

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


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

金字塔函数的输出时,根据返回值类型了,如果是序列数据依然是float数组,如果是常数,则这里会是只是一个float字的数字,请楼主仔细看看Stockfun.h文件上的说明解释

 

注1:
 1.函数调用参数由m_pfParam1--m_pfParam4带入,若为NULL则表示该参数无效.
 2.当一个参数无效时,则其后的所有参数均无效.
  如:m_pfParam2为NULL,则m_pfParam3,m_pfParam4也为NULL.
 3.参数1可以是常数参数或序列数参数,其余参数只能为常数参数.
 4.若m_nParam1Start<0, 则参数1为常数参数,参数等于*m_pfParam1;
 5.若m_nParam1Start>=0,则参数1为序列数参数,m_pfParam1指向一个浮点型数组,
  数组大小为m_nNumData,数据有效范围为 m_nParam1Start 至 m_nNumData-1.
  在时间上m_pData[x] 与 m_pfParam1[x]是一致的


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


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

楼主的意思是

ma4: "STOCKFUNC@XX"(ma1,5);

这个没有输出了?

 

如果那样的话,请把你的DLL代码上传网盘,然后贴连接过来我们帮你看看


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


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

 

ma4: "STOCKFUNC@XX"(ma1,5);  没有输出

 

ma3: "STOCKFUNC@XX"(c,5);  有输出

ma5: "STOCKFUNC@XX"(ma3,5); 没有输出

 

就是这个意思

 

 

"STOCKFUNC@JJMA"(c,5,0);

 

ma1:=ma(c,5);

"STOCKFUNC@JJMA"(ma1,5,0);

 

如上

 

第一句能执行 所以上面注的5条都不是问题

 

那ma1的输出是什么,用variable 申明过数组用来存放ma1 看起来确实是数组

但ma1和 variable申明的数组 都没法用在 "STOCKFUNC@JJMA"中

 

DLL的申明已经很清楚了

extern "C" __declspec(dllimport) int WINAPI JMA(int iSize,double *pdSignal,double dSmooth,double dPhase,double *pdFilter);

 5个参数

数组的长度,输入double数组的指针,参数1,参数2,输出double的指针

 

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]; }

这一段就是申明输入输出数组 然后把金字塔的数据存入 double数组 input作为 JMA的输入数据

 

dll包是蛮有名的jma

 

 

[此贴子已经被作者于2011-2-12 14:47:53编辑过]

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


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

请吧DLL发到 442902994@QQ.COM 邮箱吧

 回到顶部