以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 金字塔软件问题提交 (http://weistock.com/bbs/list.asp?boardid=2) ---- 请问金字塔函数的输出到底是什么 (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=5141) |
-- 作者:sbant -- 发布时间: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 -- 发布时间: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 -- 发布时间:2011/2/12 13:41:08 -- 请详细说明XMA的算法和使用方法 |
-- 作者:sbant -- 发布时间: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) const float* pValue1 = pData->m_pCalcParam[0].m_pfParam; double *input=new double[count]; for (int i=0;i<count;i++) int cond=JMA(count,input,Length,Phase,output); if (cond==0) delete []input; [此贴子已经被作者于2011-2-12 13:48:55编辑过]
|
-- 作者:admin -- 发布时间:2011/2/12 14:05:59 -- 自定义的DLL函数最好不要嵌套调用 |
-- 作者:sbant -- 发布时间: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 -- 发布时间:2011/2/12 14:17:40 -- 金字塔函数的输出时,根据返回值类型了,如果是序列数据依然是float数组,如果是常数,则这里会是只是一个float字的数字,请楼主仔细看看Stockfun.h文件上的说明解释
注1: |
-- 作者:admin -- 发布时间:2011/2/12 14:31:18 -- 楼主的意思是 ma4: "STOCKFUNC@XX"(ma1,5); 这个没有输出了?
如果那样的话,请把你的DLL代码上传网盘,然后贴连接过来我们帮你看看 |
-- 作者:sbant -- 发布时间: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]; for (int i=0;i<count;i++) 这一段就是申明输入输出数组 然后把金字塔的数据存入 double数组 input作为 JMA的输入数据
dll包是蛮有名的jma
[此贴子已经被作者于2011-2-12 14:47:53编辑过]
|
-- 作者:admin -- 发布时间:2011/2/12 16:19:38 -- 请吧DLL发到 442902994@QQ.COM 邮箱吧 |