查看: 59475|回复: 77

TradeBlazer公式的HelloWorld! [复制链接]

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2019-7-5
发表于 2007-7-25 15:42:48 |显示全部楼层
从第一版C语言推出,"Hello World"这个经典程序,就成为全世界程序员挥之不去的情结。那么在TB中的HELLO WORLD是怎么写的呢?
首先,为了方便讨论,我们先设置一下环境:打开超级图表,选择一个当前没有行情的品种,比如IF0705。再鼠标右键菜单中选择“商品设置”,只显示最后5个样本。
然后,新建立一个指标,取名为HelloWorld,输入如下代码并保存:
  1. Begin
  2.         FileAppend("c:\\Formula.log","hello world");
  3. End
复制代码

最后,把指标HelloWorld插入到 超级图表中。
图表上并不会有什么输出,但是C盘根目录下会产生一个Formula.log文件。该文件的内容为:
hello world
hello world
hello world
hello world
hello world

如果你能执行到这一步,看见文件中的5行hello world,那么恭喜你,你的第一个TB语言公式已经完成了!具体有多少行hello world取决于你在超级图表中设置的样本数目,刚才设置了5个样本,所以是5行hello world字符串。

FileAppend函数是TB中的写文件函数,可以在指定文件中追加一行字符串。该函数的语法原型为:
Bool FileAppend(String strPath,String strText);
参数strPath: 指定文件的路径,请使用全路径表示,并使用\\做路径分割符。
参数:strText 输出的字符串内容 。

这个函数非常重要!它不仅仅是写文件这么简单,因为TB中没有公式的单步执行调试工具,所以公式的调试往往是通过把你要查看的变量值输出到文件来完成的。比如,你要查看CLOSE的值,那么
  1. FileAppend("c:\\Formula.log","Close = "+Text(Close));
复制代码

其中Text函数可以把数值类型转换成字符串。
我们可以进一步把HelloWorld中的内容改为:
  1. Begin
  2.         FileAppend("c:\\Formula.log","Bar"+Text(CurrentBar)+"          hello world");
  3. End
复制代码

CurrentBar函数返回的是当前BAR的索引值,该值从0开始递增。如果图表中的样本数是5,那么这5根BAR的索引从左到右分别是:0、1、2、3、4。保存公式之后,文件Formula.log中的内容将是:
Bar0          hello world
Bar1          hello world
Bar2          hello world
Bar3          hello world
Bar4          hello world

这就清楚地显示了FileAppend函数分别在每个一个BAR上都执行了一遍,一共执行了5遍。

你可能认为公式理所当然地应该执行5遍,因为有5个BAR啊。并非如此!不同的软件,不同的语言公式架构是不同的。类分析家语言,比如文华、飞狐等等,都只执行一遍!

我们把一个公式看成是一个整体黑盒,类分析家语言是把5根BAR作为一个整体输入,公式里的每个语句都只执行一遍,整个公式也只执行一遍,然后便输出了。所以,在类分析家语言中是无法实现IF语句和WHILE循环语句的,所有的复合语句都无法实现。要做就只能在底层用C语言遍成函数做特殊处理。如果你是程序员,你大概早就会很奇怪为什么几乎所有语言都有IF语句和WHILE、FOR语句,而分析家、文华、飞狐中却只有IF函数呢?原因就就在这里了。

而TB不是这样。TB是把第一根BAR作为输入传给公式,得到一个输出。然后再传入第二根,第三根……有多少根BAR,公式就会被执行多少次。用这样一种机制,就可以实现公式和算法的精确控制。

很多用惯了类分析家语言平台的投资者总会觉得TB语言很难学。其实并不是语法难学,而在于处理机制不同导致的编程思维模式的不同。如果你要学习TB语言,那么了解它的这个处理框架,从原有的编程思维中跳出来就显得非常重要。

[ 本帖最后由 nopain 于 2007-8-2 16:32 编辑 ]

Rank: 10Rank: 10Rank: 10

精华
0
UID
17
积分
99532
帖子
40
主题
13
阅读权限
200
注册时间
2007-7-22
最后登录
2019-4-12
发表于 2007-7-25 23:22:24 |显示全部楼层
讲得真好!FileAppend对调试公式是一个很好的工具,对TB公式的运行机理也更清晰了.

使用道具 举报

Rank: 4

精华
1
UID
117
积分
427
帖子
79
主题
12
阅读权限
50
注册时间
2007-8-15
最后登录
2016-3-30
发表于 2007-8-16 09:25:47 |显示全部楼层
还有点看不明白

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
97
积分
165
帖子
52
主题
9
阅读权限
40
注册时间
2007-8-12
最后登录
2009-3-21
发表于 2007-8-24 02:47:12 |显示全部楼层
很有意思,只是有一个问题不明白。在helloword那里,为什么会有这种情况,如果把超级图表中的指标都删除,就不会在根目录里有那个文件了。好像至少要有一个指标的样子,不知道为什么。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2019-7-5
发表于 2007-8-24 08:22:10 |显示全部楼层
您新建的这个HelloWorld指标,必须放在图中才会被执行

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
97
积分
165
帖子
52
主题
9
阅读权限
40
注册时间
2007-8-12
最后登录
2009-3-21
发表于 2007-8-25 00:01:45 |显示全部楼层
我是说,把别的指标都删除了,只有这一个helloword指标,好像也不能显示阿。好像至少要有ma的样子

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2019-7-5
发表于 2007-8-25 06:58:29 |显示全部楼层
原帖由 stevehans 于 2007-8-25 00:01 发表
我是说,把别的指标都删除了,只有这一个helloword指标,好像也不能显示阿。好像至少要有ma的样子


这个指标没有显示内容,只输出调试信息!

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2019-7-5
发表于 2007-8-26 09:12:03 |显示全部楼层
原帖由 wgcpsxj 于 2007-8-26 07:54 发表
初学者该如何入手学习
IF语句和WHILE循环语句 、FOR语句?


看看Sumamation,Cum等用户函数就应该能理解IF,For语句,While用的比较少,可暂时不关注!

使用道具 举报

Rank: 1

精华
0
UID
214
积分
24
帖子
1
主题
0
阅读权限
10
注册时间
2007-8-28
最后登录
2019-3-31
发表于 2007-8-28 22:55:12 |显示全部楼层
学习TB第一天!
立志做一个优秀的程序化交易设计员!
好好学习!
谢谢论坛!

使用道具 举报

Rank: 7Rank: 7Rank: 7

精华
0
UID
397
积分
4818
帖子
87
主题
13
阅读权限
80
注册时间
2007-9-22
最后登录
2019-6-20
发表于 2007-9-24 23:30:03 |显示全部楼层
原帖由 nopain 于 2007-7-25 15:42 发表
你可能认为公式理所当然地应该执行5遍,因为有5个BAR啊。并非如此!不同的软件,不同的语言公式架构是不同的。类分析家语言,比如文华、飞狐等等,都只执行一遍!

我们把一个公式看成是一个整体黑盒,类分析家语言是把5根BAR作为一个整体输入,公式里的每个语句都只执行一遍,整个公式也只执行一遍,然后便输出了。所以,在类分析家语言中是无法实现IF语句和WHILE循环语句的,所有的复合语句都无法实现。要做就只能在底层用C语言遍成函数做特殊处理。如果你是程序员,你大概早就会很奇怪为什么几乎所有语言都有IF语句和WHILE、FOR语句,而分析家、文华、飞狐中却只有IF函数呢?原因就就在这里了。


其实分析家等和TB运行机制是一样的哦,平台本身就有一个隐藏的主循环。有多少BAR就执行多少遍语句。而且分析家和飞狐也都有IF语句和WHILE、FOR循环语句的,所有的复合语句都可实现哦。还有分析家的调试工具比TB和TS要强大的多哦。TB参考TS但是还没有把它的程序简洁易懂模仿过来哦。

使用道具 举报

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

bottom

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

GMT+8, 2019-11-14 05:10

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部