新浪博客

从一无所知开始学习交易开拓者(TB)期货程序化交易编程(一)

2016-10-21 12:09阅读:
经常会看到很多朋友问:帮我写个公式怎么样啊?帮我把某个公式改成TB的怎么样啊?
我想出现这种情况的原因有两种:
一是真的不会,毕竟做期货的会编程的不多;
二是自己如果多花点时间的话是弄的出来,但是有点懒;

我想无论是哪种原因,都应该好好的学习下TB,因为真正的你的交易思路只有你自己才清楚
而且也只有你自己去把你的交易思路用TB表现出来你才能更清楚的知道你的交易思维中有何缺点

但是编程不是一件很容易的事情,当然,如果您入门了,你会发觉TB编程其实和泡妞一样的简单,就看你敢不敢下手了
所以本文仅是写给完全不懂编程的朋友的,仅是最基本的入门资料,如果您是高手,请忽略此文,以免耽误您的时间.
我先不说那些专业术语,什么变量,函数和语法的,我们先不管他,以免看的头晕.
我想先说说在TB中代码的执行顺序,也就是说在TB
K线图(TBK线叫做Bar)里面你写的公式或者指标是如何得到执行的;
我想这个东西是最重要而且也是最好理解的.
在其他的期货软件比如文华飞狐一类,我们是无法知道你写的公式是如何执行的,甚至我们不知道我们写出来的公式是不是真的
就体现出了我们的思想,因为你写的公式或者指标是被这些软件在幕后进行处理的,是黑箱操作!
TB不同,我们能够清楚的看到你写的代码在任意一根K线上是如何得到执行的!!!!
好了,先说说在TB里面代码是如何得到执行的.
1,
代码从第一根K线开始执行,一直到最后一根K线;
2,
在每一根K线上,代码都是从第一行开始执行,一直到最后一行;
明白了吧,是不是很简单,我们先看一个小例子,如果您还不明白,那只能说我完全没有任何能力写这文章,您就板砖吧
我们就写个输出每日的收盘价的例子;
打开TB,在左边的TB公式里面,点击新建技术指标,新建其他的也没有关系,然后在出来的对话框的简称里面填入名字,记住,这个名字只能是E文哦
在名字里面填入你喜欢的名字,点确定就OK了啊
然后在出来的公式编辑器里面输入
Begin
End
注意,除了参数和变量定义外,所有的代码都必须包含在BeginEnd之间
意思很简单
就是Begin,你的代码就开始执行了,End,你的代码就执行完毕拉
呵呵
我们再在BeginEnd之间输入一些代码,完整的就是:
Begin
FileAppend('c:\\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)+'日的收盘价等于'
当然,如果这个文件已经存在,他就不会添加文件了,仅仅在这个文件的后面添加一行上面你写的内容
好了,再看看Text,Text的意思就是把那些不是字符串的东西如数字啊,等变成字符串.Year,Month,Day就代表了
正在执行你写的代码的那一根K线的年,,,年月日是数字,我们当然要用Text把它搞成字符串,不然Windows会告诉你你犯了错误的
Close
的意思我不说大家也明白了吧,就是代表了当前正在执行你的代码的那根K线的收盘价啊,呵呵,如果代码执行到最后的那根K线
且行情正在走动的时候Close代表的就是现在的最新价了咯.
好了
我们点公式编辑器上面的工具栏的第五个按钮(打勾的那个东西),校验保存公式,稍微等一下,OK
我们在回到K线图里面,TBK线图叫做超级图表,呵呵,有点不习惯
K线图里面右键,选择商品设置,然后吧里面的样本数由默认的300改成5,意思是让在超级图表里面仅仅显示5K线,当然,你可以搞成任意你喜欢的数字
你甚至可以从任意一个你喜欢的时间开始显示K线,我们选择5K线仅仅是为了测试的方便
点确定后,你就看到在K线图里面只显示了5K线,所以我们的代码也仅仅只在这5K线上执行了
当然现在代码还不能被执行,因为我们现在还需要把我们刚刚所写的那个指标加到K线图上面才能被执行的


我们再在超级图表里面右键,选择插入技术分析,在出来的列表里面选择我们刚刚所写的技术指标,然后确定就OKl饿
晕死,现在怎么在K线图上没有任何变化啊?
呵呵
我们上面说了,我们这个例子仅仅是把每日的收盘价写到文件里面去啊,那么我们找一找文件在什么地方咯?
FileAppend('c:\\a.log',
很明显,文件是在c盘的,文件的名字是a.log
好了,我们到c盘找到a.log文件,双击打开,我们就会看到下面的内容:
2007年9月24的收盘价等于
67280
2007年9月25的收盘价等于
67800
2007年9月26的收盘价等于
67160
2007年9月27的收盘价等于
67300
2007年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(Close));
折行代码把第一根K线的收盘价输出到a.log文件里面,于是就输出了'67280'
好了,代码在第一根K线上执行完毕,于是再转到第二根K线,再执行第一行代码,再执行第二行代码
.........
好了,现在代码在第二根,第三根,第四根K线上执行完毕,于是转到第五根也就是最后一根K线上执行第一行代码
再执行第二行代码
到此为止,所有的代码在所有的K线上执行完毕了,圆满的完成了党和祖国赋予他的神圣使命,于是也就有了我们上面所看到的结果:
2007年9月24的收盘价等于
67280
2007年9月25的收盘价等于
67800
2007年9月26的收盘价等于
67160
2007年9月27的收盘价等于
67300
2007年9月28的收盘价等于
68020
OK,
下回继续

我一直非常愿意帮助客户们解答在编程中的难点,但是却不大愿意帮助客户写完整的公式策略。这其中有三个原因:
1
、别人写的交易策略,你难以调整它。
据统计,90%以上的交易策略会在2年半之内由于种种原因失效或者效率降低。通常的做法是一个季度左右,交易员就需要微调其策略,调整参数或改动某些条件。如果策略不是自己编写的,调整起来就会有困难。
2
、别人写的交易策略,你很难彻底执行它。
系统交易最重要的好处在于它的执行能力。它可以使你的交易摆脱人性的弱点,摆脱心理因素的干扰。然而这一切的基础,在于自信。人只会信任自己了解的东西,这是人性。如果一个交易策略是别人写的,无论它的测试报告是多么天花乱坠,你都不会信任它,因为你不了解它。一旦市场出现了危机情况,你就会坐立不安,你就会总怀疑是不是策略有问题,然后就又把策略扔到一边,回到凭感觉去操作的老路上去了。
3
、最重要的一点在于:
编程就是理解,编写交易策略调试交易策略的过程其实就是理解市场的过程。这是一种非常宝贵的积累。大多数人都是通过在市场中亏钱,靠爆仓来理解市场的。成本高昂,而且难以总结。使用这种方法来了解市场,往往就算你亏了很多钱,交了大把学费,你仍然不知道自己到底输在哪里。你总结不出来,你就不可能有长进,就不可能赢。而通过写交易策略来了解市场你不需要交什么学费,从历史测试报告里很容易分析出来自己到底错在哪里,如此你就很容易改进。把编好的交易策略与模拟帐户交易结合起来就可以为你带来足够逼真的实战经验。
skywalker 说的非常棒!
编程其实是一种思想,编程的目的是把你的思想用各种图形表现出来而已
我们期货编程的目的是表现我们的交易思想
是为思想而编程,不是为编程而编程!
说起这点我想起了TB的伟大!
不管你用文华还是飞狐,当你把指标公式写完后
可能你自己的不是很清楚
你的代码所表现出来的东西到底是不是就是你的交易思想呢?
因为他们的代码是工作在后台的
我们在前面无法得知这些代码如何工作
TB完全不同
你可以在任意时候知道你的代码在做什么!
所以你也就非常的清楚你的代码是不是真的表现了你的意思!
好了
现在开始写数据类型,变量和赋值.
这是些非常基本的概念,相信您一下就懂的
线说数据类型吧
数据类型和人的类型差不多
人不是分黄种人,白种人,黑种人么?
TB
里面的数据也一样
分字符串类型,数值型,还有布尔型
字符串类型很简单,用分号''括起来的东西就叫做字符串类型的数据,'I love you','3345',.....
数值型数据类型也同样的简单,数值大家知道吧,1542,1.021....这些东西就是数值型的数据类型
当然,如果把一个数值型的东西用分号''括起来了那他就不再是数值型数据了,而是字符串类型的数据
1688是数值型数据,但是'1688'就是字符串类型的数据了啊
还有就是布尔型,当然,没有接触过编程的朋友可能不明白布尔型的意思
说白点,布尔型就是真假型,意思就是布尔类型的数据只能取真(True)或假(False).
比如2>1,这个东西就是布尔类型的数据,因为2是大于1,所以这个表达式返回True()
那么2<1,大家说这个表达式是不是个布尔类型的数据呢?
呵呵,也是的,因为2大于1,所以2<1是错误的,就返回False()
大家明白了吧,就这三个类型,其中最只要的就是数值型数据类型哦
用的最多的也是数值型数据类型
如果明白了,那么请您就记住在TB里面数值型的E文是Numeric
晕死,看下TB

我的更多文章

下载客户端阅读体验更佳

APP专享