以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  pel公式调用VB自定义函数,传递字符串的问题  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=56610)

--  作者:cthlj
--  发布时间:2013/9/13 13:08:09
--  pel公式调用VB自定义函数,传递字符串的问题
VB自定义函数不支持传递字符串参数,搜索了好一会儿,可以用超全局变量解决。
但遇到问题,不能正常传递,
问题会出在哪儿了?

公式:
GLOBALVARIABLE:买入信号=\'买入\';    //这里的‘字符串’是你自己取的变量名
testtxt();


自定义函数:
Function testtxt(Formula)
    \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码
    testtxt=0
    MSG=document.getextData("买入信号") 
    MsgBox  "传递字符串:" & MSG
End Function

运行弹出的对话框提示:“传递字符串:100057”,最后变成了数字?

--  作者:王锋
--  发布时间:2013/9/13 13:36:23
--  

图片点击可在新窗口打开查看此主题相关图片如下:qq截图20130911122009.jpg
图片点击可在新窗口打开查看

--  作者:cthlj
--  发布时间:2013/9/13 14:55:07
--  

好吧,之前对字符串的问题,在论坛搜索过的,但没有找到解决办法。

王管应说的是这个帖子的10楼吧:http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=9511

if VBuy then

begin

  buy(1,1,limitr,VOP);       {开多}

  if islastbar and bb<>barpos then

   begin

      bb:= barpos;

      extgbdataSet(\'字符串\',\'开多信号:\'+numtostr(close,0));    //这里的‘字符串’是你自己取的变量名

      VQQM:=QQMSSG(close,open);

   end

end; 

在VBA的自定义函数中这样写:

   QQMSG=document.getextData("字符串")              \'获取公式中设置的变量值

   Set obj = CreateObject("WWSCommon.TCGroup")
   call obj.TransMessage(QQNum, QQMSG)
   Set obj = Nothing

 

 

但根据这个方法,重新试了一下,还是不对,弹出窗口依然显示的是数字?

 

  if islastbar then
   begin
      extgbdataSet(\'买入信号\',\'开多信号:\'+numtostr(close,0));    //这里的‘字符串’是你自己取的变量名
      VQQM:=QQMSSG();
   end
   bb:1;

 

 

Function QQMSSG(Formula)
    \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码
    QQMSSG=0
    QQMSG=document.getextData("字符串")              \'获取公式中设置的变量值
    MsgBox QQMSG

End Function


--  作者:王锋
--  发布时间:2013/9/13 15:04:24
--  

字符串的操作要用

 

EXTGBSTRING( )
EXTGBSTRINGSET( , )

 

这2个函数


--  作者:cthlj
--  发布时间:2013/9/13 17:32:23
--  

感谢回复!

 

EXTGBSTRING( )和EXTGBSTRINGSET( , ) 是试过的,但是没有得到预期的结果,

是下面的代码有问题吗?

运行后,依然提示不对?郁闷!

  if islastbar then
   begin
      EXTGBSTRINGSET(\'买入信号\',\'开多信号:\'+numtostr(close,0));    //这里的‘字符串’是你自己取的变量名
      VQQM:=QQMSSG();
   end
   bb:1;

 

Function QQMSSG(Formula)
    \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码
    QQMSSG=0
    QQMSG=document.GetExtString("买入信号")              \'获取公式中设置的变量值
    MsgBox QQMSG

End Function


--  作者:王锋
--  发布时间:2013/9/13 17:36:14
--  
你看看 工具菜单-》数据-》全局变量数据库,里面记录的对不对再说
--  作者:cthlj
--  发布时间:2013/9/13 21:44:02
--  
原因终于搞清了,内牛满面:

在逐K线模式,使用EXTGBSTRINGSET( , )设定字符串型全局变量,在VB中用document.GetExtString()取值。

下面帖子的10楼给出的例程,只适用于数值型全局变量。

感谢王版,尽管没有直接指出问题在哪儿。