《交易开拓者(tb)编程初级篇》由会员分享,可在线阅读,更多相关《交易开拓者(tb)编程初级篇(16页珍藏版)》请在金锄头文库上搜索。
1、交易开拓者(交易开拓者(TB)期货程序化交易编程)期货程序化交易编程本文仅是写给完全不懂编程的朋友的,仅是最基本的入门资料。 TB 里面代码执行 1,代码从第一根 K 线开始执行,一直到最后一根 K 线; 2,在每一根 K 线上,代码都是从第一行开始执行,一直到最后一行; 我们就写个输出每日的收盘价的例子; 打开 TB,在左边的 TB 公式里面,点击新建技术指标, 然后在出来的公式编辑器里面输入Begin End 注意,除了参数和变量定义外,所有的代码都必须包含在 Begin 和 End 之间我们再在 Begin 和 End 之间输入一些代码,完整的就是:BeginFileAppend(“c:
2、a.log“,Text(Year)+“年“+Text(Month)+“月“+Text(Day)+“日的收盘价等于“);FileAppend(“C:a.log“,Text(Close); End 我们再说说这两行代码是什么意思 File 就是文件,Append 就是添加,现在明白了吧 FileAppend 就是添加一个文件,文件名是什么呢?就是你后面写的 a.log,这个文件的路径在哪里呢?就是 c:a.log 里面的 C 盘,且在这个文件里面添加一行东西, 这行东西的内容就是你后面所写的 Text(Year)+“年“+Text(Month)+“月“+Text(Day)+“日的收盘价等于“ 当然
3、,如果这个文件已经存在,他就不会添加文件了,仅仅在这个文件的后面添加一行上面你写的内容 好了,再看看 Text,Text 的意思就是把那些不是字符串的东西如数字啊,等变成字符串.而 Year,Month,Day 就代 表了 正在执行你写的代码的那一根 K 线的年,月,日,年月日是数字,我们当然要用 Text 把它搞成字符串 CloseK 线的收盘价啊,如果代码执行到最后的那根 K 线我们点公式编辑器上面的工具栏的第五个按钮(打勾的那个东西),校验保存公式,稍微等一下,就 OK 了 我们在回到 K 线图里面,TB 把 K 线图叫做超级图表 在 K 线图里面右键,选择商品设置,然后吧里面的样本数由
4、默认的 300 改成 5,意思是让在超级图表里面仅仅显示 5 条 K 线,点确定后,你就看到在 K 线图里面只显示了 5 跟 K 线, 当然现在代码还不能被执行,因为我们现在还需要把我们刚刚所写的那个指标加到 K 线图上面才能被执行的 我们上面说了,我们这个例子仅仅是把每日的收盘价写到文件里面去啊,那么我们找一找文件在什么地方咯? FileAppend(“c:a.log“,很明显,文件是在 c 盘的,文件的名字是 a.log 好了,我们到 c 盘找到 a.log 文件,双击打开,我们就会看到下面的内容:2007 年 9 月 24 日的收盘价等于67280 2007 年 9 月 25 日的收盘价
5、等于67800 2007 年 9 月 26 日的收盘价等于67160 2007 年 9 月 27 日的收盘价等于673002007 年 9 月 28 日的收盘价等于68020我们现在来分析下:首先你写的代码在第一根 K 线上执行,先执行第一行代码: FileAppend(“c:a.log“,Text(Year)+“年“+Text(Month)+“月“+Text(Day)+“日的收盘价等于“); 这行代码就输出了第一根 K 线的年,月,日,就在 a.log 文件里输出成“2007 年 9 月 24 日的收盘价等于“ 然后执行第二行代码:FileAppend(“C:a.log“,Text(Clos
6、e); 折行代码把第一根 K 线的收盘价输出到 a.log 文件里面,于是就输出了“67280“ 好了,代码在第一根 K 线上执行完毕,于是再转到第二根 K 线,再执行第一行代码,再执行第二行代码. 我一直非常愿意帮助客户们解答在编程中的难点,但是却不大愿意帮助客户写完整的公式策略。这其中有三个 原因: 1、别人写的交易策略,你难以调整它。 据统计,90%以上的交易策略会在 2 年半之内由于种种原因失效或者效率降低。通常的做法是一个季度左右, 交易员就需要微调其策略,调整参数或改动某些条件。如果策略不是自己编写的,调整起来就会有困难。2、别人写的交易策略,你很难彻底执行它。 系统交易最重要的好
7、处在于它的执行能力。它可以使你的交易摆脱人性的弱点,摆脱心理因素的干扰。然而这 一切的基础,在于自信。人只会信任自己了解的东西,这是人性。如果一个交易策略是别人写的,无论它的测 试报告是多么天花乱坠,你都不会信任它,因为你不了解它。一旦市场出现了危机情况,你就会坐立不安,你 就会总怀疑是不是策略有问题,然后就又把策略扔到一边,回到凭感觉去操作的老路上去了。 3、最重要的一点在于:编程就是理解,编写交易策略调试交易策略的过程其实就是理解市场的过程。这是一 种非常宝贵的积累。大多数人都是通过在市场中亏钱,靠爆仓来理解市场的。成本高昂,而且难以总结。使用 这种方法来了解市场,往往就算你亏了很多钱,交
8、了大把学费,你仍然不知道自己到底输在哪里。你总结不出 来,你就不可能有长进,就不可能赢。而通过写交易策略来了解市场你不需要交什么学费,从历史测试报告里 很容易分析出来自己到底错在哪里,如此你就很容易改进。把编好的交易策略与模拟帐户交易结合起来就可以 为你带来足够逼真的实战经验。 编程其实是一种思想,编程的目的是把你的思想用各种图形表现出来而已 我们期货编程的目的是表现我们的交易思想 是为思想而编程,不是为编程而编程!现在开始写数据类型,变量和赋值.数据类型 分字符串类型,数值型,还有布尔型字符串类型很简单,用分号“ “括起来的东西就叫做字符串类型的数据,如“I love you“,如“3345
9、“,. 数值型数据类型也同样的简单,数值大家知道吧,如 1542 啊,1.021 啊.这些东西就是数值型的数据类型 当然,如果把一个数值型的东西用分号“括起来了那他就不再是数值型数据了,而是字符串类型的数据 如 1688 是数值型数据,但是“1688“就是字符串类型的数据了 还有就是布尔型,当然,没有接触过编程的朋友可能不明白布尔型的意思 说白点,布尔型就是真假型,意思就是布尔类型的数据只能取真(True)或假(False)值. 比如 21,这个东西就是布尔类型的数据,因为 2 是大于 1 啊,所以这个表达式返回 True(真) 那么 2开盘价)则输出:今日收红阳线 我们先把这个东西翻译成 T
10、B 如果翻译成 If 收盘价和开盘价大家都知道会翻译成 Close 和 Open 输出语句就是 FileAppend,则翻译成 TB 就是:If(CloseOpen)FileAppend(“c:a.log“,“今日收红阳线“); 是不是很简单呢? 大家记住一点,凡是 if(如果)语句中的代码,都给我用括起来 我们再把上面的条件加上一点: 如果(收盘价开盘价)则输出:今日收红阳线 否则如果(收盘价=开盘价)则输出:今日收十字线 我们再翻译成 TB,把否则翻译成 Else,如果翻译成 IfIf(CloseOpen)FileAppend(“c:a.log“,“今日收红阳线“); Else If(Cl
11、ose=Open)FileAppend(“C:a.log“,“今日收十字线“); 同样的简单,我们可以再把上面的条件再加: 如果(收盘价开盘价)则输出:今日收红阳线 否则如果(收盘价=开盘价)则输出:今日收十字线 否则 则输出:今日收绿阴线上面的否则大家知道翻译成 Else 吧,有两种翻译方法,因为收盘价和开盘价的比较只存在着三种情况: 收盘价大于开盘价,收盘价等于开盘价,收盘价少于开盘价,我们先这样翻译:If(CloseOpen)FileAppend(“c:a.log“,“今日收红阳线“); Else If(Close=Open)FileAppend(“C:a.log“,“今日收十字线“);
12、 Else If(CloseOpen,也不满足 Close=Open 那么肯定的一点就是:CloseOpen)FileAppend(“c:a.log“,“今日收红阳线“); Else If(Close=Open)FileAppend(“C:a.log“,“今日收十字线“); ElseFileAppend(“c:a.log“,“今日收绿阴线“);再说 For 循环语句. 先记下 For 语句的语法格式:For 循环变量 = 初始值 To 结束值TradeBlazer 公式语句; 也就是(假如变量 i 已经定义,且循环 5 次)For i = 0 To 4 TradeBlazer 公式语句;for
13、 语句的理解稍微复杂点,我们先看看 For 语句是如何执行的: 比如上面的例子 首先执行 i=0,就是给变量 i 赋值让 i 等于 0,然后判断 i 是不是少于等于 4,这里 i 等于 0,所以小于 4,于是执行 里面的 TradeBlazer 公式语句; 执行里面的 TradeBlazer 公式语句后,TB 系统会自动给变量 i 加 1,这个时候 i 就等于 1 了(上面刚刚开始的时 候 i 等于 0,加了 1 就是等于 1 了) 再判断 i 是不是少于等于 To 后面的 4,1 当然少于 4,于是再执行里面的 TradeBlazer 公式语句; 执行完里面的 TradeBlazer 公式语
14、句后,Tb 系统又自动给变量 i 加 1,上面 i 已经等于 1 了,加 1,于是这个时候 i 等于 2 了, 于是再判断变量 i 的值 2 是不是少于 To 后面的 4,当然少于拉,于是再执行里面的 TradeBlazer 公式语句;. 以此执行,当 i 等于 5 的时候,再与 To 后面的 4 进行比较,当然 54 了,所以不满足条件了,于是不再执行里面 的 TradeBlazer 公式语句; 而开始执行下面的语句拉 大家再研究下下面的 HHV 的写法,就会很明白了的:/- / 简称: HHV / 名称: 求 N 周期的最高值 / 类别: 用户函数 / 类型: 用户函数 / 输出: 数值型
15、/-ParamsNumeric Length(5); Vars Numeric highestValue(0); Numeric minDay; Numeric i; Begin minDay = Min(CurrentBar,Length-1); for i=0 to minDay highestValue=Max(highestValue,ci); Commentary(“最高价“+text(highestValue);End现在说说参数与函数,说完了这个东西,就要进入实践阶段了,就要准备开始实打实的独立编写指标了 首先我们必须明白,参数仅仅存在于函数里面,如果函数里面存在着参数,那么当你调用这个函数的时候必须要先 传递参数给这个函数 函数就是帮助我们完成某一件事情,并且完成这件事情以后会返回个东西给我们的一个方法. 比如一个这样的函数 请注意,这仅仅是个假想的函数,仅为了帮助理解函数是什么:GetCloseFromTrader 我们就很明白,这个函数就是帮助我们到交易所跑一趟,然后把收盘价返回给我们; 有点明白了吧,但是仔细一想,这个东西似乎有点问题,比如返回收盘价,交易所 那么多的品种,且每个品种都有那么多的月份,他到底返回的是什么东西的收盘价啊? 那么我们这样