- 精华
- 20
- 在线时间
- 2981 小时
- UID
- 4
- 积分
- 22709
- 帖子
- 4802
- 阅读权限
- 255
- 注册时间
- 2007-7-20
- 最后登录
- 2024-1-15
- 精华
- 20
- UID
- 4
- 积分
- 22709
- 帖子
- 4802
- 主题
- 64
- 阅读权限
- 255
- 注册时间
- 2007-7-20
- 最后登录
- 2024-1-15
|
从第一版C语言推出,"Hello World"这个经典程序,就成为全世界程序员挥之不去的情结。那么在TB中的HELLO WORLD是怎么写的呢?
首先,为了方便讨论,我们先设置一下环境:打开超级图表,选择一个当前没有行情的品种,比如IF0705。再鼠标右键菜单中选择“商品设置”,只显示最后5个样本。
然后,新建立一个指标,取名为HelloWorld,输入如下代码并保存:
- Begin
- FileAppend("c:\\Formula.log","hello world");
- 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的值,那么
- FileAppend("c:\\Formula.log","Close = "+Text(Close));
复制代码
其中Text函数可以把数值类型转换成字符串。
我们可以进一步把HelloWorld中的内容改为:
- Begin
- FileAppend("c:\\Formula.log","Bar"+Text(CurrentBar)+" hello world");
- 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 编辑 ] |
|