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


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

   

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


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

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

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


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

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

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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/11/23 13:14:45 [只看该作者]

vba里面有grid对象可以获取窗格名称这些,但是没法直接和pel交互,你还要搞成自定义函数模式

这个如果您不太熟悉的话不建议去考虑,另外你为何要要去获取这个信息呢,这个对你图表运行一般来说是没有必要的


 回到顶部
帅哥哟,离线,有人找我吗?
sword8586
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/11/24 9:32:17 [只看该作者]

Function Get_GridNameNumber(Formula)
set Grid  = Formula.ParentGrid


Get_GridNameNumber = Grid.Name
'application.MsgOut Get_GridNameNumber
End Function


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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/11/24 9:34:47 [只看该作者]

但好像没法传递给pel进行输出,一般不建议太追求pel去做一些vb自己做的事情,

所以前面问你这么做的需求是什么,如果没有多大必要不要去考虑

或者全部用vba去完成


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


加好友 发短信
等级:管理员 帖子:2437 积分:0 威望:0 精华:0 注册:2016/3/5 22:53:41
  发帖心情 Post By:2020/11/24 12:02:59 [只看该作者]

PEL和vba的数据传递还可以使用全局变量数据库来完成,可以同时传递多个参数

 回到顶部
帅哥哟,离线,有人找我吗?
sword8586
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

这是为何呢?


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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/11/24 20:42:24 [只看该作者]

Get_GridNameNumber="这是"

你直接返回这个看下,似乎没有办法返回字符串给pel的。

所以前面不太建议你太执着于这两者交互,很多时候不是很方便。
你可以考虑上面版主方法,不要返回值的形式而是保存到全局变量中去,Document 对象下有

SetExtString

设置指定名称的字符串全局变量数据

GetExtStringByIndex

得到基于0索引的字符型全局变量

[此贴子已经被作者于2020/11/24 20:42:47编辑过]

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


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/11/24 20:43:42 [只看该作者]

另外pel中通过函数列表里的配置函数,有和上面对应的字符串读取和写入的函数。



 回到顶部
帅哥哟,离线,有人找我吗?
sword8586
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | 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


 回到顶部
总数 12 1 2 下一页