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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 求大师解决逻辑判断结果作为参数在DLL函数中传递问题

   

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


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

主题:求大师解决逻辑判断结果作为参数在DLL函数中传递问题

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


加好友 发短信
等级:新手上路 帖子:6 积分:40 威望:0 精华:0 注册:2012/3/1 14:42:55
求大师解决逻辑判断结果作为参数在DLL函数中传递问题  发帖心情 Post By:2012/3/1 14:48:30 [只看该作者]

如下面的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
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 czt
等级:蜘蛛侠 帖子:1445 积分:6114 威望:0 精华:3 注册:2012/1/16 10:31:19
  发帖心情 Post By:2012/3/1 16:42:52 [只看该作者]

工作人员正在思考。。。

 


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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2012/3/1 17:49:29 [只看该作者]

那是你的用法问题,asd:c>10 ; 调用后,传递是一个数组而不是一个常数,你要用数组的方法来读取

 

const float*  pValue = pData->m_pfParam1; //参数1
  int nFirst = pData->m_nParam1Start;   //有效值起始位

if( nFirst >= 0)

{

for ( i = nFirst; i < pData->m_nNumData; i++ )
   {
    fTotal = 0.0f;
    pData->m_pResultBuf[i] = pValue[i];//直接返回
   }

}



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
wfbhdl
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:6 积分:40 威望:0 精华:0 注册:2012/3/1 14:42:55
  发帖心情 Post By:2012/3/2 10:29:10 [只看该作者]

以下是引用王锋在2012-3-1 17:49:29的发言:

那是你的用法问题,asd:c>10 ; 调用后,传递是一个数组而不是一个常数,你要用数组的方法来读取

 

const float*  pValue = pData->m_pfParam1; //参数1
  int nFirst = pData->m_nParam1Start;   //有效值起始位

if( nFirst >= 0)

{

for ( i = nFirst; i < pData->m_nNumData; i++ )
   {
    fTotal = 0.0f;
    pData->m_pResultBuf[i] = pValue[i];//直接返回
   }

}

 

 

--------------------------------------------------------------------------------------------------------------------------------------

 

版主还是不行啊,看下面我修改的DLL函数:

 

__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData)
{
 int i;
 if(pData->m_pfParam1 &&  //参数1有效
  pData->m_nParam1Start>=0 &&     //参数1为序列数
  pData->m_pfParam2==NULL)     //有1个参数
 {
      const float*  pValue = pData->m_pfParam1; //参数1
      int nFirst = pData->m_nParam1Start;   //有效值起始位

      if( nFirst >= 0)

   {

       for ( i = pData->m_nNumData-1; i < pData->m_nNumData; i++ )
    {
        pData->m_pResultBuf[i] = pValue[i];//直接返回
        ofstream SaveFile("11111.txt", ios::ate | ios::binary);
        SaveFile << pValue[i];
        SaveFile.close();
    }
   }
 }
 return -1;
}

 

---------------------------------------------------------------------------------------

按道理应该是只输出当天的1个数值,但输出的结果还是所有K线啊,有几根K线就输出几个数值!


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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2012/3/2 14:12:28 [只看该作者]

你到底需要的是什么,本身传递过来的就是一个序列数组



金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
wfbhdl
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:6 积分:40 威望:0 精华:0 注册:2012/3/1 14:42:55
  发帖心情 Post By:2012/3/2 14:24:01 [只看该作者]

我需要的是一个条件判断后执行一个动作.如上例,如果当前收盘价满足c>10这个条件,我就调用bb1:"STOCKFUNC@MYMACLOSE"(asd);这个DLL来执行一次买入或卖出的操作.而现在是这个asd参数是一个序列,不是当前的这一个值,所以造成了STOCKFUNC@MYMACLOSE"(asd)被执行了k线次(有几根k线执行几次 ),所以不能满足我只执行一次的要求.

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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2012/3/2 14:31:30 [只看该作者]

你用最后一个k线的信号不就行了,不用用FOR循环

 

if( pValue[pData->m_nNumData] )

{

//执行下单动作

}

[此贴子已经被作者于2012-3-2 14:31:51编辑过]


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
wfbhdl
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:6 积分:40 威望:0 精华:0 注册:2012/3/1 14:42:55
  发帖心情 Post By: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)
{
 int i;
 if(pData->m_pfParam1 &&  //参数1有效
  pData->m_nParam1Start>=0 &&     //参数1为序列数
  pData->m_pfParam2==NULL)     //有1个参数
 {
      const float*  pValue = pData->m_pfParam1; //参数1
      int nFirst = pData->m_nParam1Start;   //有效值起始位

if( pValue[pData->m_nNumData] )

        pData->m_pResultBuf[i] = pValue[i];//直接返回
        ofstream SaveFile("11111.txt", ios::ate | ios::binary);
        SaveFile << "99";
        SaveFile.close();
 }
 return -1;
}

 


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


加好友 发短信
等级:罗宾汉 帖子:11808 积分:20695 威望:0 精华:10 注册:2009/8/18 8:15:13
  发帖心情 Post By:2012/3/2 16:18:40 [只看该作者]

呵呵,还是建议你先把C++的基础搞好,好吧?


金字塔—专业程序化软件提供商

金字塔-技术部

-----------------------------------------------------------------------------------------------------

工作时间:周一至周五 08:30 - 17:30   周末及法定节假日休息

Email:service@weistock.com
 回到顶部
帅哥哟,离线,有人找我吗?
wfbhdl
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:6 积分:40 威望:0 精华:0 注册:2012/3/1 14:42:55
  发帖心情 Post By:2012/3/2 17:32:42 [只看该作者]

以下是引用王锋在2012-3-2 16:18:40的发言:
呵呵,还是建议你先把C++的基础搞好,好吧?

版主就是大师,太感谢啦,解决了,少了个括号,少了个-1.解决这个问题的另一个方法是用for语句,但不如这个方法好.

 

正确的是

__declspec(dllexport) int WINAPI MYMAVAR(CALCINFO* pData)
{
  if(pData->m_pfParam1 &&  //参数1有效
  pData->m_nParam1Start>=0 &&     //参数1为序列数
  pData->m_pfParam2==NULL)     //有1个参数
 {
      const float*  pValue = pData->m_pfParam1; //参数1
      int nFirst = pData->m_nParam1Start;   //有效值起始位

      if(pValue[pData->m_nNumData-1])
   {
        ofstream SaveFile("11111.txt", ios::ate | ios::binary);
        SaveFile << pValue[pData->m_nNumData-1];
        SaveFile.close();
   }
 }
 return -1;
}

 


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