欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件金字塔软件问题提交 → 能否读取图表交易框架名称及框架内的窗格名称

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4619人关注过本帖树形打印复制链接

主题:能否读取图表交易框架名称及框架内的窗格名称

帅哥哟,离线,有人找我吗?
sword8586
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
能否读取图表交易框架名称及框架内的窗格名称  发帖心情 Post By:2020/11/23 11:44:51 [显示全部帖子]

请问老师,能否读取图表交易框架名称及框架内的窗格名称。或者采用VBA读取,在Pel语句中调用,请老师帮忙示例。谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
sword8586
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By: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

 回到顶部
帅哥哟,离线,有人找我吗?
sword8586
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By:2020/11/24 20:25:15 [显示全部帖子]

谢谢以上几位老师的指点。无为剑老师,您说的“
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

这是为何呢?


 回到顶部
帅哥哟,离线,有人找我吗?
sword8586
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:论坛游侠 帖子:388 积分:0 威望:0 精华:0 注册:2014/11/22 18:13:16
  发帖心情 Post By: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


 回到顶部