以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 高级功能研发区 (http://weistock.com/bbs/list.asp?boardid=5) ---- 求大师解决逻辑判断结果作为参数在DLL函数中传递问题 (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=10365) |
-- 作者:wfbhdl -- 发布时间:2012/3/1 14:48:30 -- 求大师解决逻辑判断结果作为参数在DLL函数中传递问题 如下面的DLL函数:当我用IF逻辑判断作为MYMACOLSE()的参数传递时,该DLL总是收不到这个参数的信息,如果是用个数字作参数,则没有问题.也就是说,这个DLL函数不能接收逻辑判断结果作为参数传递. 公式: asd:c>10 ; if (asd) then begin bb1:"STOCKFUNC@MYMACLOSE"(asd); end 上面的股票公式bb1不起作用,因为asd的逻辑判断参数不能传递到STOCKFUNC@MYMACLOSE STOCKFUNC@MYMACLOSE函数: __declspec(dllexport) int WINAPI MYMACLOSE(CALCINFO* pData) { float f,fTotal; int nPeriod,i,j; if(pData->m_pfParam1 && //参数1有效 pData->m_nParam1Start<0 && //参数1为常数 pData->m_pfParam2==NULL) //仅有一个参数 { f = *pData->m_pfParam1; ofstream SaveFile("1111.txt", ios::ate | ios::binary); SaveFile << f; SaveFile.close(); } return -1; } |
-- 作者:rushtaotao -- 发布时间:2012/3/1 16:42:52 -- 工作人员正在思考。。。
|
-- 作者:王锋 -- 发布时间:2012/3/1 17:49:29 -- 那是你的用法问题,asd:c>10 ; 调用后,传递是一个数组而不是一个常数,你要用数组的方法来读取
const float* pValue = pData->m_pfParam1; //参数1 if( nFirst >= 0) { for ( i = nFirst; i < pData->m_nNumData; i++ ) } |
-- 作者:wfbhdl -- 发布时间:2012/3/2 10:29:10 -- 以下是引用王锋在2012-3-1 17:49:29的发言:
那是你的用法问题,asd:c>10 ; 调用后,传递是一个数组而不是一个常数,你要用数组的方法来读取
const float* pValue = pData->m_pfParam1; //参数1 if( nFirst >= 0) { for ( i = nFirst; i < pData->m_nNumData; i++ ) }
--------------------------------------------------------------------------------------------------------------------------------------
版主还是不行啊,看下面我修改的DLL函数:
__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData) if( nFirst >= 0) { for ( i = pData->m_nNumData-1; i < pData->m_nNumData; i++ )
--------------------------------------------------------------------------------------- 按道理应该是只输出当天的1个数值,但输出的结果还是所有K线啊,有几根K线就输出几个数值! |
-- 作者:王锋 -- 发布时间:2012/3/2 14:12:28 -- 你到底需要的是什么,本身传递过来的就是一个序列数组 |
-- 作者:wfbhdl -- 发布时间:2012/3/2 14:24:01 -- 我需要的是一个条件判断后执行一个动作.如上例,如果当前收盘价满足c>10这个条件,我就调用bb1:"STOCKFUNC@MYMACLOSE"(asd);这个DLL来执行一次买入或卖出的操作.而现在是这个asd参数是一个序列,不是当前的这一个值,所以造成了STOCKFUNC@MYMACLOSE"(asd)被执行了k线次(有几根k线执行几次 ),所以不能满足我只执行一次的要求. |
-- 作者:王锋 -- 发布时间:2012/3/2 14:31:30 -- 你用最后一个k线的信号不就行了,不用用FOR循环
if( pValue[pData->m_nNumData] ) { //执行下单动作 } [此贴子已经被作者于2012-3-2 14:31:51编辑过]
|
-- 作者:wfbhdl -- 发布时间:2012/3/2 16:06:36 -- 以下是引用王锋在2012-3-2 14:31:30的发言:
你用最后一个k线的信号不就行了,不用用FOR循环
if( pValue[pData->m_nNumData] ) { //执行下单动作 } [此贴子已经被作者于2012-3-2 14:31:51编辑过] 版主还是不行,你的这句话加上后一运行就死机,自动退出程序.
__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData) if( pValue[pData->m_nNumData] ) pData->m_pResultBuf[i] = pValue[i];//直接返回
|
-- 作者:王锋 -- 发布时间:2012/3/2 16:18:40 -- 呵呵,还是建议你先把C++的基础搞好,好吧? |
-- 作者:wfbhdl -- 发布时间:2012/3/2 17:32:42 -- 以下是引用王锋在2012-3-2 16:18:40的发言:
呵呵,还是建议你先把C++的基础搞好,好吧? 版主就是大师,太感谢啦,解决了,少了个括号,少了个-1.解决这个问题的另一个方法是用for语句,但不如这个方法好.
正确的是 __declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData) if(pValue[pData->m_nNumData-1])
|