以文本方式查看主题

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

--  作者:timescale
--  发布时间:2016/10/10 9:48:35
--  VB自定义函数问题

1.软件的示例 DefaultProject--模块--Function下第一个例子 Function TriangleShape(Formula,Cyc,SCyc,ECyc)每次打开管理面板--高级 都报 编译错误--1002.我仔细检查过似乎没有语法错误,即使把函数体移除,只保留一个空壳还是同样报错。如图

图片点击可在新窗口打开查看此主题相关图片如下:1001.png
图片点击可在新窗口打开查看

 

2.示例函数 CU_MA1和CU_MA2,我编入指标公式,测试正常,但在技术分析界面始终显示为0. 在VB中用MsgBox 显示从金字塔中读取数据正常,如图


图片点击可在新窗口打开查看此主题相关图片如下:1002.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:1003.png
图片点击可在新窗口打开查看

 

请问是哪里出问题呢?谢谢


--  作者:yukizzc
--  发布时间:2016/10/10 13:55:33
--  

TriangleShape这个函数你自己胡乱修改他源代码了,原始代码是这样的。

Function TriangleShape(Formula,Cyc,SCyc,ECyc)

\'    \'msgbox cyc & "-" & scyc & "-" & ecyc

\' \'该函数计算当前位置图形是否是三角形突破,如果是则返回1,否则返回0。该函数只有在选股时才能使用。

\' TriangleShape=0

\' 

\' \'如果是分时数据或者分笔成交那么直接返回

\' If Formula.ParentGrid.DataType = 0 or Formula.ParentGrid.CycType = 10 Then

\'  Exit Function

\' End If

vba启动了没,切换品种试试呢,另外直接在函数里把返回值强制返回一个比如10再看看。


--  作者:timescale
--  发布时间:2016/10/10 16:46:51
--  

1.第一个问题,我那个改动是故意的,就是看看没有函数主题的时候是否报错,结果当然是报错。我把程序重装一遍,保证没有改动,还是这样。不过我估计问题是这样:我的系统是64位,不小心装了32位的金字塔,现在改为64位,出现新问题:进入调试,提示“你必须安装windows脚本调试补丁....”“已成功安装....”,重启机器,再来,还是同样的问题。请指教该如何做?

 

2.安装64位后,自定义函数可以用了,显示的效果和预期的一样!


--  作者:timescale
--  发布时间:2016/10/10 17:00:36
--  

64位VB启动后不能停止,停下再启动就报出现异常(如图)。32位的则没有这个问题


图片点击可在新窗口打开查看此主题相关图片如下:1004.png
图片点击可在新窗口打开查看


--  作者:yukizzc
--  发布时间:2016/10/10 17:11:38
--  
按照说明,重新建一个项目试试呢
--  作者:timescale
--  发布时间:2016/10/10 17:40:04
--  

如果停止后不运行 工具--开始调试,那么再启动是正常的;如果运行了 工具--开始调试,就会出现上面提示“启动VBS引擎时出现异常”。新建项目的测试也是一样的。

 

可能在那个脚本调试补丁上,如何补呢? 提示安装成功,但每次又提示安装。


--  作者:timescale
--  发布时间:2016/10/11 8:37:57
--  

基本上折腾清楚了 :

     1. 4.00版32位不能调用自定义函数,64位启动VB有问题(如果启动过调试);

     2. 3.92版64位启动VB有问题(如果启动过调试),32位可以用,虽然调试基本不能用,只是帮助发现语法错误;

     3. 暂时只好用3.92x86。


--  作者:yukizzc
--  发布时间:2016/10/11 9:01:10
--  

1、不要去用那个调试工具,一般调试我们都建议自己在代码里插入msgout进行输出查看的

 


--  作者:timescale
--  发布时间:2016/10/11 9:49:04
--  

明白了,不用调试工具,开市的时候64位的能正常运行,32位的又不行的。

谢谢!


--  作者:yukizzc
--  发布时间:2016/10/11 10:25:50
--  

和32没关系的,你本地新建一个项目然后新建默认自定义函数输出


此主题相关图片如下:qv{l_k_xa8g(gu}$1wp6@5x.png
按此在新窗口浏览图片

 

 

可以通过两种方法添加自定义函数:

1、在公式编辑器界面中,鼠标在“函数”解释定义区单击右键,然后选择“添加自定义函数”。

2、在Visual Basic工程管理器中选择Function模块,进入Visual Basic编辑界面,然后选择“插入”菜单中的“过程”。

有关自定义函数的格式

每个自定义函数都会有一个Formula对象,即使没有参数的自定义函数也至少有这么一个对象参数存在。每次公式系统执行遇到自定义函数的时候,会不断的依次调用它,直至整个公式解释完毕。

注意:请不要试图在Function模块中直接添加自定义函数,因为这样系统不会承认他。

[此贴子已经被作者于2016-10-11 10:26:32编辑过]