以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  请大侠,帮我看看,这段自定义函数代码,怎么一调用,系统就奔溃啊?  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=1093)

--  作者:dzfp2010
--  发布时间:2010/3/13 13:03:46
--  请大侠,帮我看看,这段自定义函数代码,怎么一调用,系统就奔溃啊?

问题1:

我的用法是,在技术指标编辑器的函数帮助的“自定义函数”选项里添加新的自定义函数FFL,建立FFL(),这个自定义函数的代码如下:

 

Function FFL(Formula)
Set fm=UserFrame1.GetFormulaByName("Window5")
Count=fm.FormulaCount
MsgBox Count
End Function

 

然后再建立一个新的技术指标,代码如下:

 

FFL(); 

 

然后在窗口中加载这个指标,一加载就出问题,请问老师,这是为什么,我该怎么呢?

 


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

 

 

问题2:

 

请老师,听说Formula对象,是“PEL公式”和“VBA“ 进行交互的,能否详细的说说 Formula 对象的使用方法啊?

 

就用Macd来举例一下吧。。。。

[此贴子已经被作者于2010-3-13 19:03:10编辑过]

--  作者:dzfp2010
--  发布时间:2010/3/13 19:09:56
--  [原创]日内震荡交易策略

:-)顶。。。。

[此贴子已经被作者于2010-3-13 19:20:29编辑过]

--  作者:admin
--  发布时间:2010/3/13 19:11:23
--  
UserFrame1 这个框架对象,是否存在
--  作者:dzfp2010
--  发布时间:2010/3/13 19:30:23
--  

下面这些代码都能正常运行的,说明用" Window1 ",没问题,用"Window5"就出问题了,但是,"Window5"窗格是存在的:

 


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

 

Set xGrid = UserFrame1.GetGridByName("Window1")
\'创建窗格对象后,创建ReportData(行情数据对象)对象
Set xReportData=xGrid.GetReportData()
\'显示窗格内的公式个数
Count =xGrid.FormulaCount
\'输出当前窗口加载的公式数量
MsgBox "加载的公式数量是:"&Count
\'输出“金字塔”程序的安装目录
MsgBox "金字塔软件的安装路径是:"&Application.AppPath
\'输出昨日收盘价:
LastClose=xReportData.LastClose
MsgBox "昨日收盘价是:"&LastClose
\'输出最新价格:
NewPrice=xReportData.NewPrice
MsgBox "最新价格是:"&NewPrice
\'对历史数据进行处理
Set xHistoryData=xGrid.GetHistoryData()
MsgBox "当前有多少天的历史数据:"&xHistoryData.Count
\'关于Formula对象
Set xFormula=xGrid.GetFormulaByName("MyMa")
xFCount=xFormula.LineCount
MsgBox "MyMa公式的数据是:"&xFCount


[此贴子已经被作者于2010-3-13 19:31:46编辑过]

--  作者:dzfp2010
--  发布时间:2010/3/13 22:00:28
--  

检查出来了,是代码写错了,Formula对象要通过Grid对象创建,而不能通过Frame对象创建,正确的代码应该是这样的:

 

 

\'Formula对象的用法
Function FFL(Formula)
If Formula.IsLastBar <> 1 THEN Exit Function
Set xGrid=UserFrame1.GetGridByName("Window5")
\'Set xFormula=xGrid.GetFormulaByName("MyMa")
xCount=xGrid.FormulaCount
Dim i
i=0
If i=0 Then
MsgBox xCount
i=i+1
End If
End Function