以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://www.weistock.com/bbs/index.asp)
--  高级功能研发区  (http://www.weistock.com/bbs/list.asp?boardid=5)
----  如何获得当前窗格(或其名称,序号)?  (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=67383)

--  作者:dwjgwsm
--  发布时间:2014/7/14 23:12:37
--  如何获得当前窗格(或其名称,序号)?
如何获得当前窗格(或其名称,序号亦可)?注意,不是获得活动窗格activegrid

应用场景:一个框架分N个窗格,每个窗格加载同一个指标,指标中需要获取,传递当前窗格的品种代码StockLabel

--  作者:王锋
--  发布时间:2014/7/14 23:21:07
--  
在当前PEL指标中获取窗格名称?
--  作者:dwjgwsm
--  发布时间:2014/7/15 0:03:45
--  
我用vba写了一段比较同一品种的合约强弱的代码,用于比较同一品种中持仓量最大和第二大合约的强弱,然后我想返回这二个合约的StockLabel,令其显示在各个窗格的副图中.我设想的per指标代码是这样(当然也可能不对):

strongercode:StongCode() ,nodraw;  //自定义函数StongCode,最好什么参数也不用传入,实在要传入参数,那就传入框架名称,在vba中自动判断指标所在窗格的名称或者序号,进而获得该窗格相关联的StockLabel,以便下一步运算,整个代码的思路、步骤如下:

①(自动)获取currentframe.name→②自动获取currentgrid.name→③前二步最终目的是自动获取currentStockLabel→④遍历该品种所有合约、筛选出持仓量最大的StockLabel(MaxOpenintLabel)和持仓量次大的StockLabel(SecondOpenintLabel)→⑤比较二者强弱→⑥返回strongerLabel和weakerLabel.    考虑到自定义函数只能返回单值,因此,新建二个自定义函数StongCode和WeakCode,分别返回strongerLabel和weakerLabel.其中,我已经把第④步到第⑥步的vba代码都写好了,但是就是不知道该如何实现前三步

weakercode:WeakCode(),nodraw;


[此贴子已经被作者于2014/7/15 0:05:29编辑过]

--  作者:dwjgwsm
--  发布时间:2014/7/15 0:06:50
--  
想要实现的目的其实很简单,不知道我这个实现方法是不是太复杂.自己手动写二行代码做价差图,其实很简单,但麻烦的是每个加载的品种都要重写
[此贴子已经被作者于2014/7/15 0:08:00编辑过]

--  作者:dwjgwsm
--  发布时间:2014/7/15 7:59:14
--  
这就好比在多个窗格中加载同一个均线指标,你不需要分别告诉它计算哪个框架哪个窗格哪个品种,它自己就知道
--  作者:王锋
--  发布时间:2014/7/15 9:45:54
--  

这个不难的吧, 自定义VBS函数里的 Formula 对象中,你可以通过 ParentGrid 方法得到窗格Grid对象, 然后再通过 grid 对象的

StockName         与该窗格关联的证券名称,只读。

StockLabel        与该窗格关联的证券代码,只读。

Market            与该窗格关联的市场代码,只读。

这3个属性就可以直接得到加载的品种了


--  作者:dwjgwsm
--  发布时间:2014/7/15 9:49:22
--  
我写了这么几句代码:

yy:=PINGZHONG(STKLABEL);   //新建自定义函数PINGZHONG
STRINGTOFILE(\'d:\\111.txt\',yy);
///////////////////////////////
Function pingzhong(Formula,daima)
    aa=daima            //把品种代码daima传递给aa
    xxx aa,bb           //再把aa传递给宏xxx
    pingzhong=bb    //最终把品种代码变成自定义函数返回值
End Function
//////////////////////////////
Sub xxx(sss,bb)
   bb=sss       //把品种代码再传给bb,bb返回回去
End Sub


以上返回不成功,不知道哪里不对?

--  作者:王锋
--  发布时间:2014/7/15 10:09:18
--  
自定义函数无法传递字符串参数, 你可以论坛搜索一下, 有很多解决方案
--  作者:dwjgwsm
--  发布时间:2014/7/15 19:00:45
--  
以下是引用王锋在2014/7/15 9:45:54的发言:

这个不难的吧, 自定义VBS函数里的 Formula 对象中,你可以通过 ParentGrid 方法得到窗格Grid对象, 然后再通过 grid 对象的

StockName         与该窗格关联的证券名称,只读。

StockLabel        与该窗格关联的证券代码,只读。

Market            与该窗格关联的市场代码,只读。

这3个属性就可以直接得到加载的品种了

 

我写了这么一段代码:

ss:=GETGRID();  //自定义函数,需要传入参数吗?传入什么?
aa:=GETINIFILESTRING(\'D:\\SystemSet.INI\',\'Gen\',\'StockLabel\');
DRAWTEXT(1,0,aa,COLORRED,0);

====================

Function getgrid(Formula)

  getgrid=0
  set aa=Formula.ParentGrid  \'这里Formula好像没有set对象呀
  bb=aa.StockLabel
  Document.WritePrivateProfileString \'Gen\',\'StockLabel\',bb,\'D:\\SystemSet.INI\'


End Function

 

以上代码没有写入ini文件任何内容,pel指标也没有输出.请王兄帮忙检查一下怎么回事?

 

[此贴子已经被作者于2014/7/15 19:02:31编辑过]

--  作者:王锋
--  发布时间:2014/7/16 0:34:25
--  
VBA的字符串是双引号,你搞成单引号了,你跟PEL语法上弄混了