设为首页收藏本站

 找回密码
 注册
查看: 3175|回复: 6
打印 上一主题 下一主题

TB新手不知道的那些事1:TB内建的用户函数只能取得data0的值 [复制链接]

Rank: 2

精华
0
UID
111878
积分
96
帖子
46
主题
12
阅读权限
30
注册时间
2012-8-4
最后登录
2013-3-22
跳转到指定楼层
1#
发表于 2012-12-12 16:31:31 |只看该作者 |倒序浏览
本帖最后由 慕容表哥 于 2012-12-13 17:22 编辑

TB新手不知道的那些事1:用户函数只能取得data0的值
变量a=data0.VolD;
变量b=data1.VolD;
你会发现b永远等于a,TB的用户函数只能默认取得data0的值,即使你前缀data1,2,3。。。也没有用

建议说明书注明这方面,当然更希望新版TB支持用户函数能取得data1,2,3的值

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
2#
发表于 2012-12-12 17:08:11 |只看该作者
此类用户函数,可以看到函数代码,看一下代码里的计算方法 ,可以知道无论是否使用data1.xxx
其计算都是使用data0的值

使用道具 举报

Rank: 2

精华
0
UID
111878
积分
96
帖子
46
主题
12
阅读权限
30
注册时间
2012-8-4
最后登录
2013-3-22
3#
发表于 2012-12-12 17:18:57 |只看该作者
小米 发表于 2012-12-12 17:08
此类用户函数,可以看到函数代码,看一下代码里的计算方法 ,可以知道无论是否使用data1.xxx
其计算都是使 ...

那是否修改原来函数的代码,加入data1的前缀,新建一个用户函数,就可以取得data1.xxx的值?

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2012-12-12 17:20:50 |只看该作者
慕容表哥 发表于 2012-12-12 17:18
那是否修改原来函数的代码,加入data1的前缀,新建一个用户函数,就可以取得data1.xxx的值? ...


是的。
修改原函数代码里,对K线数据部分的内容用data1.xxx替换,其结果就如你所需了。

使用道具 举报

Rank: 2

精华
0
UID
111878
积分
96
帖子
46
主题
12
阅读权限
30
注册时间
2012-8-4
最后登录
2013-3-22
5#
发表于 2012-12-13 15:53:12 |只看该作者
修改后的OpenIntD1和VolD1,分别可以取data1商品的n天前的持仓量和成交量

//------------------------------------------------------------------------
// 简称: OpenIntD1
// 名称: 求N天前的持仓量
// 类别: 用户函数
// 类型: 内建函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
        Numeric daysAgo(2);
Vars
        NumericSeries barCnt;
        NumericSeries dayOpenInt;
        Numeric i;
        Numeric j;
        Numeric nIndex(0);
        Numeric CBIndex;
Begin
        CBIndex = data1.CurrentBar;
        If(CBIndex == 0 || data1.Date != data1.Date[1])
        {
                barCnt = 1;
        }Else
        {
                barCnt = barCnt + 1;
        }
        dayOpenInt = data1.OpenInt;
               
        If(daysAgo == 0)
        {
                return dayOpenInt;
        }Else
        {
                For i = 1 To daysAgo
                {
                        If( i == 1)
                        {       
                                j = 0;
                        }Else
                        {
                                j = j + BarCnt[j];                               
                        }
                        If (j > CBIndex )
                                Return data1.InvalidNumeric;
                        nIndex = nIndex + BarCnt[j];
                }
                Return dayOpenInt[nIndex];
        }
End

//------------------------------------------------------------------------
// 编译版本        GS2010.12.08
// 版权所有        TradeBlazer Software 2003-2010
// 更改声明        TradeBlazer Software保留对TradeBlazer平
//                        台每一版本的TradeBlazer公式修改和重写的权利
//------------------------------------------------------------------------


//------------------------------------------------------------------------
// 简称: VolD1
// 名称: 求N天前的成交量1
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------

Params
        Numeric daysAgo(2);
Vars
        NumericSeries barCnt;
        NumericSeries dayVol;
        Numeric i;
        Numeric j;
        Numeric nIndex(0);
        Numeric CBIndex;
Begin
        CBIndex = Data1.CurrentBar;
        If(CBIndex == 0 || Data1.Date != Data1.Date[1])
        {
                barCnt = 1;
                dayVol = data1.Vol;
        }Else
        {
                barCnt = barCnt + 1;
                dayVol = dayVol + data1.Vol;
        }
               
        If(daysAgo == 0)
        {
                return dayVol;
        }Else
        {
                For i = 1 To daysAgo
                {
                        If( i == 1)
                        {       
                                j = 0;
                        }Else
                        {
                                j = j + BarCnt[j];                               
                        }
                        If (j > CBIndex )
                                Return data1.InvalidNumeric;
                        nIndex = nIndex + BarCnt[j];
                }
                Return dayVol[nIndex];
        }
End

//------------------------------------------------------------------------
// 编译版本        GS2010.12.08
// 用户版本        2012/12/13 10:56
// 版权所有        cyqh007
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
0
UID
113242
积分
3506
帖子
97
主题
11
阅读权限
80
注册时间
2012-10-31
最后登录
2013-6-4
6#
发表于 2012-12-22 00:40:27 |只看该作者

使用道具 举报

Rank: 4

精华
0
UID
116043
积分
315
帖子
181
主题
30
阅读权限
50
注册时间
2013-2-28
最后登录
2017-1-24
7#
发表于 2013-3-22 22:02:41 |只看该作者
羞愧不懂

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-10 22:14

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部