以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 金字塔软件问题提交 (http://222.73.7.161/bbs/list.asp?boardid=2) ---- 能否读取图表交易框架名称及框架内的窗格名称 (http://222.73.7.161/bbs/dispbbs.asp?boardid=2&id=183146) |
||||
-- 作者:sword8586 -- 发布时间:2020/11/23 11:44:51 -- 能否读取图表交易框架名称及框架内的窗格名称 请问老师,能否读取图表交易框架名称及框架内的窗格名称。或者采用VBA读取,在Pel语句中调用,请老师帮忙示例。谢谢 |
||||
-- 作者:yukizzc -- 发布时间:2020/11/23 13:14:45 -- vba里面有grid对象可以获取窗格名称这些,但是没法直接和pel交互,你还要搞成自定义函数模式 这个如果您不太熟悉的话不建议去考虑,另外你为何要要去获取这个信息呢,这个对你图表运行一般来说是没有必要的 |
||||
-- 作者:sword8586 -- 发布时间:2020/11/23 21:16:01 -- 我编写了如下VBA函数公式,用来读取某一框架的加载该函数的策略某个窗格的名称《window??》中的??序号。请老师看看为何输出只为0,谢谢! Function Get_GridNameNumber(Formula) \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码 \'为保证函数运行稳定,请确保“VBA自定义函数安全模式”选项处于打开状态。步骤:工具菜单->选项->其他选项卡。 Get_GridName=0 \'防止公式序列模式时调用 If Formula.WorkMode = 1 Exit Function End If \'Dim d \'创建一个变量 \'创建Array对象,将对象实例置变量d中 dim Gname,GNum dim GN,GNNum GName=Application.GetActiveGrid\'窗格名字 GN=Len(GName)-6\'窗格名字的长度 GNum=Right(GName, GN)\'\'窗格名字的中数字 GNNum=CInt(GNum)\'窗格名字的数字 Get_GridName=GNNum End Function |
||||
-- 作者:yukizzc -- 发布时间:2020/11/24 9:32:17 -- Function Get_GridNameNumber(Formula)
|
||||
-- 作者:yukizzc -- 发布时间:2020/11/24 9:34:47 -- 但好像没法传递给pel进行输出,一般不建议太追求pel去做一些vb自己做的事情, 所以前面问你这么做的需求是什么,如果没有多大必要不要去考虑 或者全部用vba去完成 |
||||
-- 作者:无为剑 -- 发布时间:2020/11/24 12:02:59 -- PEL和vba的数据传递还可以使用全局变量数据库来完成,可以同时传递多个参数 |
||||
-- 作者:sword8586 -- 发布时间:2020/11/24 20:25:15 -- 谢谢以上几位老师的指点。无为剑老师,您说的“
Function Get_GridNameNumber(Formula) \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码 \'为保证函数运行稳定,请确保“VBA自定义函数安全模式”选项处于打开状态。步骤:工具菜单->选项->其他选项卡。 Get_GridNameNumber=0 dim Gname,GNumber dim GN,GNum set Grid = Formula.ParentGrid Gname=Grid.Name Set Grid = Nothing GN=Len(GName)-6\'窗格名字中数字的长度 GNumber=Right(GName,GN)\'\'窗格名字的数字字符 GNum=CInt(FNum)\'转窗格名字的数字字符为数字 if IsNumeric(IsNumeric) Then Get_GridNameNumber = GNum else Get_GridNameNumber = 555 end if End Function 在Pel策略引用AAAA:Get_GridNameNumber(),LINETHICK0; AAAA=0 这是为何呢? |
||||
-- 作者:yukizzc -- 发布时间:2020/11/24 20:42:24 -- Get_GridNameNumber="这是" 你直接返回这个看下,似乎没有办法返回字符串给pel的。 所以前面不太建议你太执着于这两者交互,很多时候不是很方便。 你可以考虑上面版主方法,不要返回值的形式而是保存到全局变量中去,Document 对象下有
[此贴子已经被作者于2020/11/24 20:42:47编辑过]
|
||||
-- 作者:yukizzc -- 发布时间:2020/11/24 20:43:42 -- 另外pel中通过函数列表里的配置函数,有和上面对应的字符串读取和写入的函数。 |
||||
-- 作者:sword8586 -- 发布时间:2020/11/24 21:24:15 -- 这种办法也不行。我需要返回窗格的序号。在各个窗格都用同一公式时,这样我可以确定是哪个窗格开的仓,开仓手数,采用序号记录在全局变量里,互不干涉。再请老师过目。 Function Get_GridNameNumber(Formula) \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码 \'为保证函数运行稳定,请确保“VBA自定义函数安全模式”选项处于打开状态。步骤:工具菜单->选项->其他选项卡。 \'Get_GridNameNumber=0 \'Dim d \'创建一个变量 dim Gname,GNumber dim GN,GNum set Grid = Formula.ParentGrid Gname=Grid.Name Select Case Gname
Case Gname = "Window1"
Get_GridNameNumber = 1
Case Gname = "Window2"
Get_GridNameNumber = 2
Case Gname = "Window3"
Get_GridNameNumber = 3
Case Gname = "Window4"
Get_GridNameNumber = 4
Case Gname = "Window5"
Get_GridNameNumber = 5
Case Gname = "Window6"
Get_GridNameNumber = 6
Case Gname = "Window7"
Get_GridNameNumber = 7
Case Gname = "Window8"
Get_GridNameNumber = 8
Case Gname = "Window9"
Get_GridNameNumber = 9
Case Gname = "Window10"
Get_GridNameNumber = 10
Case Gname = "Window11"
Get_GridNameNumber = 11
Case Gname = "Window12"
Get_GridNameNumber = 12
Case Gname = "Window13"
Get_GridNameNumber = 13
Case Gname = "Window14"
Get_GridNameNumber = 14
Case Gname = "Window15"
Get_GridNameNumber = 15
Case Gname = "Window16"
Get_GridNameNumber = 16
Case Gname = "Window17"
Get_GridNameNumber = 17
Case Gname = "Window18"
Get_GridNameNumber = 18
Case Gname = "Window19"
Get_GridNameNumber = 19
Case Gname = "Window20"
Get_GridNameNumber = 20
Case Gname = "Window21"
Get_GridNameNumber = 21
Case Gname = "Window22"
Get_GridNameNumber = 22
Case Gname = "Window23"
Get_GridNameNumber = 23
Case Gname = "Window24"
Get_GridNameNumber = 24
Case Gname = "Window25"
Get_GridNameNumber = 25
Case Gname = "Window26"
Get_GridNameNumber = 26
Case Gname = "Window27"
Get_GridNameNumber = 27
Case Gname = "Window28"
Get_GridNameNumber = 28
Case Gname = "Window29"
Get_GridNameNumber = 29
Case Gname = "Window30"
Get_GridNameNumber = 30
Case Gname = "Window31"
Get_GridNameNumber = 31
Case Gname = "Window32"
Get_GridNameNumber = 32
Case Gname = "Window33"
Get_GridNameNumber = 33
Case Gname = "Window34"
Get_GridNameNumber = 34
Case Gname = "Window35"
Get_GridNameNumber = 35
Case Gname = "Window36"
Get_GridNameNumber = 36
Case Gname = "Window37"
Get_GridNameNumber = 37
Case Gname = "Window38"
Get_GridNameNumber = 38
Case Gname = "Window39"
Get_GridNameNumber = 39
Case Gname = "Window40"
Get_GridNameNumber = 40
End Select Set Grid = Nothing \'GN=Len(GName)-6\'窗格名字中数字的长度 \'GNumber=Right(GName,GN)\'\'窗格名字的数字字符 \'GNum=CInt(FNum)\'转窗格名字的数字字符为数字 \'Get_GridNameNumber = GNum End Function |