设为首页收藏本站

 找回密码
 注册
楼主: nopain
打印 上一主题 下一主题

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

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
跳转到指定楼层
1#
发表于 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

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

使用道具 举报

Rank: 10Rank: 10Rank: 10

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


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

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
5#
发表于 2007-10-16 09:21:04 |显示全部楼层
cu0701的数据已经合并到cu0801的连续图中了,您选中cu0801,在图表工具栏中选择CC按钮,多取一段数据,前面的就是cu0701的数据,当然,您可以通过时间段的方式取出所有的cu0701的数据。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-3 13:02

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部