请问老师,能否读取图表交易框架名称及框架内的窗格名称。或者采用VBA读取,在Pel语句中调用,请老师帮忙示例。谢谢
vba里面有grid对象可以获取窗格名称这些,但是没法直接和pel交互,你还要搞成自定义函数模式
这个如果您不太熟悉的话不建议去考虑,另外你为何要要去获取这个信息呢,这个对你图表运行一般来说是没有必要的
Function Get_GridNameNumber(Formula)
set Grid = Formula.ParentGrid
Get_GridNameNumber = Grid.Name
'application.MsgOut Get_GridNameNumber
End Function
但好像没法传递给pel进行输出,一般不建议太追求pel去做一些vb自己做的事情,
所以前面问你这么做的需求是什么,如果没有多大必要不要去考虑
或者全部用vba去完成
PEL和vba的数据传递还可以使用全局变量数据库来完成,可以同时传递多个参数
谢谢以上几位老师的指点。无为剑老师,您说的“PEL和vba的数据传递还可以使用全局变量数据库来完成,可以同时传递多个参数 |
”这点太有用!我首先试用yukizzc老师提供的从Formulas对象获得ParentGrid,再获得ParentGrid的name,因为自创框架切分的窗格名称都为《window?》。其中?为序号,所以我可以求得ParentGrid的名称中的数字字符,在转为数字后就可传递了。改动如下: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
这是为何呢?
Get_GridNameNumber="这是"
你直接返回这个看下,似乎没有办法返回字符串给pel的。
所以前面不太建议你太执着于这两者交互,很多时候不是很方便。
你可以考虑上面版主方法,不要返回值的形式而是保存到全局变量中去,Document 对象下有
SetExtString |
设置指定名称的字符串全局变量数据 |
GetExtStringByIndex |
得到基于0索引的字符型全局变量 |
[此贴子已经被作者于2020/11/24 20:42:47编辑过]
另外pel中通过函数列表里的配置函数,有和上面对应的字符串读取和写入的函数。
这种办法也不行。我需要返回窗格的序号。在各个窗格都用同一公式时,这样我可以确定是哪个窗格开的仓,开仓手数,采用序号记录在全局变量里,互不干涉。再请老师过目。
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