龙听期货论坛's Archiver

龙听 发表于 2019-1-11 10:53

TB交易开拓者期货程序化交易编程

[p=30, 2, left] 本文仅是写给完全不懂编程的朋友的,仅是最基本的TB交易开拓者期货程序化交易编程入门资料。希望能对朋友们有所帮助,编程其实是一种思想,编程的目的是把你的思想用各种图形表现出来而已 我们期货编程的目的是表现我们的交易思想 是为思想而编程,不是为编程而编程!通过写交易策略来了解市场你不需要交什么学费,从历史测试报告里很容易分析出来自己到底错在哪里,如此你就很容易改进。[/p][p=30, 2, left]    TB里面代码执行[/p][p=30, 2, left]    1,代码从第一根K线开始执行,一直到最后一根K线:[/p][p=30, 2, left]    2,在每一根K线上,代码都是从第一行开始执行,一直到最后一行; 我们就写个输出每日的收盘价的例子;[/p][p=30, 2, left]    打开TB,在左边的TB公式里面,点击新建技术指标, 然后在出来的公式编辑器里面输入[/p][p=30, 2, left]    Begin[/p][p=30, 2, left]    End[/p][p=30, 2, left]    注意,除了参数和变量定义外,所有的代码都必须包含在Begin和End之间[/p][p=30, 2, left]    我们再在Begin和End之间输入一些代码,完整的就是:[/p][p=30, 2, left]    Begin[/p][p=30, 2, left]    FileAppend("c:\\a.log",Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于");FileAppend("C:\\a.log",Text(Close)); End[/p][p=30, 2, left]    我们再说说这两行代码是什么意思[/p][p=30, 2, left]    File就是文件,Append就是添加,现在明白了吧[/p][p=30, 2, left]    FileAppend就是添加一个文件,文件名是什么呢?就是你后面写的a.log,这个文件的路径在哪里呢?就是c:\\a.log里面的C盘,且在这个文件里面添加一行东西,[/p][p=30, 2, left]    这行东西的内容就是你后面所写的Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于" 当然,如果这个文件已经存在,他就不会添加文件了,仅仅在这个文件的后面添加一行上面你写的内容[/p][p=30, 2, left]    好了,再看看Text,Text的意思就是把那些不是字符串的东西如数字啊,等变成字符串.而Year,Month,Day就代表了[/p][p=30, 2, left]   正在执行你写的代码的那一根K线的年,月,日,年月日是数字,我们当然要用Text把它搞成字符串 CloseK线的收盘价啊,如果代码执行到最后的那根K线[/p][p=30, 2, left][attach]6570[/attach][/p][p=30, 2, left]     我们点公式编辑器上面的工具栏的第五个按钮(打勾的那个东西),校验保存公式,稍微等一下,就OK了 我们在回到K线图里面,TB把K线图叫做超级图表 [/p][p=30, 2, left]在K线图里面右键,选择商品设置,然后吧里面的样本数由默认的300改成5,意思是让在超级图表里面仅仅显示5条K线,点确定后,你就看到在K线图里面只显示了5跟K线,[/p][p=30, 2, left]当然现在代码还不能被执行,因为我们现在还需要把我们刚刚所写的那个指标加到K线图上面才能被执行的 我们上面说了,我们这个例子仅仅是把每日的收盘价写到文件里面去啊,那么我们找一找文件在什么地方咯? FileAppend("c:\\a.log",很明显,文件是在c盘的,文件的名字是a.log 好了,我们到c盘找到a.log文件,双击打开,我们就会看到下面的内容:[/p][p=30, 2, left]2007年9月24日的收盘价等于 67280[/p][p=30, 2, left]2007年9月25日的收盘价等于 67800[/p][p=30, 2, left]2007年9月26日的收盘价等于 67160[/p][p=30, 2, left]2007年9月27日的收盘价等于67300[/p][p=30, 2, left]2007年9月28日的收盘价等于68020[/p][p=30, 2, left]我们现在来分析下:[/p][p=30, 2, left]首先你写的代码在第一根K线上执行,先执行第一行代码:[/p][p=30, 2, left]FileAppend("c:\\a.log",Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于"); 这行代码就输出了第一根K线的年,月,日,就在a.log文件里输出成"2007年9月24日的收盘价等于" 然后执行第二行代码:[/p][p=30, 2, left]FileAppend("C:\\a.log",Text(Close));[/p][p=30, 2, left]折行代码把第一根K线的收盘价输出到a.log文件里面,于是就输出了"67280"[/p][p=30, 2, left]好了,代码在第一根K线上执行完毕,于是再转到第二根K线,再执行第一行代码,再执行第二行代码.........[/p][p=30, 2, left]我一直非常愿意帮助客户们解答在编程中的难点,但是却不大愿意帮助客户写完整的公式策略。这其中有三个原因:[/p][p=30, 2, left]1、别人写的交易策略,你难以调整它。[/p][p=30, 2, left]据统计,90%以上的交易策略会在2年半之内由于种种原因失效或者效率降低。通常的做法是一个季度左右,交易员就需要微调其策略,调整参数或改动某些条件。如果策略不是自己编写的,调整起来就会有困难。[/p][p=30, 2, left]2、别人写的交易策略,你很难彻底执行它。[/p][p=30, 2, left]系统交易最重要的好处在于它的执行能力。它可以使你的交易摆脱人性的弱点,摆脱心理因素的干扰。然而这一切的基础,在于自信。人只会信任自己了解的东西,这是人性。如果一个交易策略是别人写的,无论它的测试报告是多么天花乱坠,你都不会信任它,因为你不了解它。一旦市场出现了危机情况,你就会坐立不安,你就会总怀疑是不是策略有问题,然后就又把策略扔到一边,回到凭感觉去操作的老路上去了。[/p][p=30, 2, left]3、最重要的一点在于:编程就是理解,编写交易策略调试交易策略的过程其实就是理解市场的过程。这是一种非常宝贵的积累。大多数人都是通过在市场中亏钱,靠爆仓来理解市场的。成本高昂,而且难以总结。使用这种方法来了解市场,往往就算你亏了很多钱,交了大把学费,你仍然不知道自己到底输在哪里。你总结不出来,你就不可能有长进,就不可能赢。而通过写交易策略来了解市场你不需要交什么学费,从历史测试报告里很容易分析出来自己到底错在哪里,如此你就很容易改进。把编好的交易策略与模拟帐户交易结合起来就可以为你带来足够逼真的实战经验。[/p][p=30, 2, left]编程其实是一种思想,编程的目的是把你的思想用各种图形表现出来而已 我们期货编程的目的是表现我们的交易思想,是为思想而编程,不是为编程而编程![/p][p=30, 2, left]现在开始写数据类型,变量和赋值。[/p][p=30, 2, left]数据类型分字符串类型,数值型,还有布尔型[/p][p=30, 2, left]字符串类型很简单,用分号"括起来的东西就叫做字符串类型的数据,如"I love you",如"3345",.....数值型数据类型也同样的简单,数值大家知道吧,如1542啊,1.021啊....这些东西就是数值型的数据类型 当然,如果把一个数值型的东西用分号""括起来了那他就不再是数值型数据了,而是字符串类型的数据 如1688是数值型数据,但是"1688"就是字符串类型的数据了[/p][p=30, 2, left]还有就是布尔型,当然,没有接触过编程的朋友可能不明白布尔型的意思[/p][p=30, 2, left]说白点,布尔型就是真假型,意思就是布尔类型的数据只能取真(True)或假(False)值.[/p][p=30, 2, left]比如2>1,这个东西就是布尔类型的数据,因为2是大于1啊,所以这个表达式返回True(真) 那么2<1,大家说这个表达式是不是个布尔类型的数据呢?[/p][p=30, 2, left]也是,因为2大于1啊,所以2<1是错误的,就返回False(假)[/p][p=30, 2, left]大家明白了吧,就这三个类型,其中最只要的就是数值型数据类型 用的最多的也是数值型数据类型[/p][p=30, 2, left]如果明白了,那么请您就记住在TB里面数值型 Numeric[/p][p=30, 2, left]看下TB的帮助,数据类型里面还有个序列型,如果数值序列型,字符串序列型,布尔序列型 序列这个东西看起来很难理解 [/p][p=30, 2, left]比如我们的K线图上有10跟K线,Close就是收盘价[/p][p=30, 2, left]但是这个Close包含了第一根K线的收盘价,也包含了第二根K线的收盘价.......一直包含到第五根K线的收盘价[/p][p=30, 2, left]也就是说序列型的数据在每根K线上都有一个值的[/p][p=30, 2, left]说说变量[/p][p=30, 2, left]变量就是一个可以改变的东西[/p][p=30, 2, left]现在这个变量的值是100,但是等下我可以把它改成20, 只要您喜欢,你可以随心所欲的改变这个值 能够修改他的值的东西就叫做变量了记住:[/p][p=30, 2, left]在TB里面变量都是要先定义的!而且有着他独到的定义方法,而且这个定义必须放到Begin的前面 如我们定义一个数值型变量a.就应该这样Vars[/p][p=30, 2, left]Numeric a; Begin ......[/p][p=30, 2, left]End[/p][p=30, 2, left]当然你也可以定义两个或者多个变量,如 Vars[/p][p=30, 2, left]Numeric a;Numeric b;[/p][p=30, 2, left]//.........更多变量定义 Begin......[/p][p=30, 2, left]End[/p][p=30, 2, left]大家也许想到了[/p][p=30, 2, left]我定义这个变量a,我要让他等于2,这个东西很简单[/p][p=30, 2, left]你可以在变量定义的时候就给他赋初值让他一开始被定义就等于2,也可以在Begin下面写.如Vars[/p][p=30, 2, left]Numeric a(2);Numeric b[/p][p=30, 2, left]//.........更多变量定义[/p][p=30, 2, left]Begin......End[/p][p=30, 2, left]明白了么|?那么变量b呢?我们没有用括号()扩个东西啊,那么这个时候b这个变量等于什么呢? 很简单,如果你在定义变量的时候没有给他初值,那么b这个时候等于0 再看在Begin里面怎么修改这个变量的值 Vars [/p][p=30, 2, left]Numeric a(2);Numeric b;[/p]

页: [1]