从一无所知开始学习交易开拓者TB期货程序化交易编程23页精选文档.docx
- 文档编号:11904821
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:25
- 大小:44.23KB
从一无所知开始学习交易开拓者TB期货程序化交易编程23页精选文档.docx
《从一无所知开始学习交易开拓者TB期货程序化交易编程23页精选文档.docx》由会员分享,可在线阅读,更多相关《从一无所知开始学习交易开拓者TB期货程序化交易编程23页精选文档.docx(25页珍藏版)》请在冰豆网上搜索。
从一无所知开始学习交易开拓者TB期货程序化交易编程23页精选文档
从一无所知开始学习交易开拓者(TB)期货程序化交易编程
要练说,先练胆。
说话胆小是幼儿语言发展的障碍。
不少幼儿当众说话时显得胆怯:
有的结巴重复,面红耳赤;有的声音极低,自讲自听;有的低头不语,扯衣服,扭身子。
总之,说话时外部表现不自然。
我抓住练胆这个关键,面向全体,偏向差生。
一是和幼儿建立和谐的语言交流关系。
每当和幼儿讲话时,我总是笑脸相迎,声音亲切,动作亲昵,消除幼儿畏惧心理,让他能主动的、无拘无束地和我交谈。
二是注重培养幼儿敢于当众说话的习惯。
或在课堂教学中,改变过去老师讲学生听的传统的教学模式,取消了先举手后发言的约束,多采取自由讨论和谈话的形式,给每个幼儿较多的当众说话的机会,培养幼儿爱说话敢说话的兴趣,对一些说话有困难的幼儿,我总是认真地耐心地听,热情地帮助和鼓励他把话说完、说好,增强其说话的勇气和把话说好的信心。
三是要提明确的说话要求,在说话训练中不断提高,我要求每个幼儿在说话时要仪态大方,口齿清楚,声音响亮,学会用眼神。
对说得好的幼儿,即使是某一方面,我都抓住教育,提出表扬,并要其他幼儿模仿。
长期坚持,不断训练,幼儿说话胆量也在不断提高。
经常会看到很多朋友问:
帮我写个公式怎么样啊?
帮我把某个公式改成TB的怎么样啊?
我想出现这种情况的原因有两种:
一是真的不会,毕竟做期货的会编程的不多;
二是自己如果多花点时间的话是弄的出来,但是有点懒;
我想无论是哪种原因,都应该好好的学习下TB,因为真正的你的交易思路只有你自己才清楚
而且也只有你自己去把你的交易思路用TB表现出来你才能更清楚的知道你的交易思维中有何缺点
但是编程不是一件很容易的事情,当然,如果您入门了,你会发觉TB编程其实和泡妞一样的简单,就看你敢不敢下手了
所以本文仅是写给完全不懂编程的朋友的,仅是最基本的入门资料,如果您是高手,请忽略此文,以免耽误您的时间.
我先不说那些专业术语,什么变量,函数和语法的,我们先不管他,以免看的头晕.
我想先说说在TB中代码的执行顺序,也就是说在TB的K线图(TB把K线叫做Bar)里面你写的公式或者指标是如何得到执行的;
我想这个东西是最重要而且也是最好理解的.
在其他的期货软件比如文华飞狐一类,我们是无法知道你写的公式是如何执行的,甚至我们不知道我们写出来的公式是不是真的
就体现出了我们的思想,因为你写的公式或者指标是被这些软件在幕后进行处理的,是黑箱操作!
而TB不同,我们能够清楚的看到你写的代码在任意一根K线上是如何得到执行的!
!
!
!
好了,先说说在TB里面代码是如何得到执行的.
1,代码从第一根K线开始执行,一直到最后一根K线;
2,在每一根K线上,代码都是从第一行开始执行,一直到最后一行;
明白了吧,是不是很简单,我们先看一个小例子,如果您还不明白,那只能说我完全没有任何能力写这文章,您就板砖吧
我们就写个输出每日的收盘价的例子;
打开TB,在左边的TB公式里面,点击新建技术指标,新建其他的也没有关系,然后在出来的对话框的简称里面填入名字,记住,这个名字只能是E文哦
在名字里面填入你喜欢的名字,点确定就OK了啊
然后在出来的公式编辑器里面输入
Begin
End
注意,除了参数和变量定义外,所有的代码都必须包含在Begin和End之间
意思很简单
就是Begin后,你的代码就开始执行了,End了,你的代码就执行完毕拉
呵呵
我们再在Begin和End之间输入一些代码,完整的就是:
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线图里面,TB把K线图叫做超级图表,呵呵,有点不习惯
在K线图里面右键,选择商品设置,然后吧里面的样本数由默认的300改成5,意思是让在超级图表里面仅仅显示5条K线,当然,你可以搞成任意你喜欢的数字
你甚至可以从任意一个你喜欢的时间开始显示K线,我们选择5跟K线仅仅是为了测试的方便
点确定后,你就看到在K线图里面只显示了5跟K线,所以我们的代码也仅仅只在这5跟K线上执行了
当然现在代码还不能被执行,因为我们现在还需要把我们刚刚所写的那个指标加到K线图上面才能被执行的
要练说,得练看。
看与说是统一的,看不准就难以说得好。
练看,就是训练幼儿的观察能力,扩大幼儿的认知范围,让幼儿在观察事物、观察生活、观察自然的活动中,积累词汇、理解词义、发展语言。
在运用观察法组织活动时,我着眼观察于观察对象的选择,着力于观察过程的指导,着重于幼儿观察能力和语言表达能力的提高。
我们再在超级图表里面右键,选择插入技术分析,在出来的列表里面选择我们刚刚所写的技术指标,然后确定就OKl饿
晕死,现在怎么在K线图上没有任何变化啊?
呵呵
我们上面说了,我们这个例子仅仅是把每日的收盘价写到文件里面去啊,那么我们找一找文件在什么地方咯?
FileAppend("c:
\\a.log",很明显,文件是在c盘的,文件的名字是a.log
好了,我们到c盘找到a.log文件,双击打开,我们就会看到下面的内容:
2019年9月24日的收盘价等于
67280
2019年9月25日的收盘价等于
67800
2019年9月26日的收盘价等于
67160
2019年9月27日的收盘价等于
67300
2019年9月28日的收盘价等于
68020
我们现在来分析下:
首先你写的代码在第一根K线上执行,先执行第一行代码:
FileAppend("c:
\\a.log",Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于");
这行代码就输出了第一根K线的年,月,日,就在a.log文件里输出成"2019年9月24日的收盘价等于"
然后执行第二行代码:
FileAppend("C:
\\a.log",Text(Close));
折行代码把第一根K线的收盘价输出到a.log文件里面,于是就输出了"67280"
好了,代码在第一根K线上执行完毕,于是再转到第二根K线,再执行第一行代码,再执行第二行代码
.........
好了,现在代码在第二根,第三根,第四根K线上执行完毕,于是转到第五根也就是最后一根K线上执行第一行代码
再执行第二行代码
到此为止,所有的代码在所有的K线上执行完毕了,圆满的完成了党和祖国赋予他的神圣使命,于是也就有了我们上面所看到的结果:
2019年9月24日的收盘价等于
67280
2019年9月25日的收盘价等于
67800
2019年9月26日的收盘价等于
67160
2019年9月27日的收盘价等于
67300
2019年9月28日的收盘价等于
68020
OK,下回继续
我国古代的读书人,从上学之日起,就日诵不辍,一般在几年内就能识记几千个汉字,熟记几百篇文章,写出的诗文也是字斟句酌,琅琅上口,成为满腹经纶的文人。
为什么在现代化教学的今天,我们念了十几年书的高中毕业生甚至大学生,竟提起作文就头疼,写不出像样的文章呢?
吕叔湘先生早在1978年就尖锐地提出:
“中小学语文教学效果差,中学语文毕业生语文水平低,……十几年上课总时数是9160课时,语文是2749课时,恰好是30%,十年的时间,二千七百多课时,用来学本国语文,却是大多数不过关,岂非咄咄怪事!
”寻根究底,其主要原因就是腹中无物。
特别是写议论文,初中水平以上的学生都知道议论文的“三要素”是论点、论据、论证,也通晓议论文的基本结构:
提出问题――分析问题――解决问题,但真正动起笔来就犯难了。
知道“是这样”,就是讲不出“为什么”。
根本原因还是无“米”下“锅”。
于是便翻开作文集锦之类的书大段抄起来,抄人家的名言警句,抄人家的事例,不参考作文书就很难写出像样的文章。
所以,词汇贫乏、内容空洞、千篇一律便成了中学生作文的通病。
要解决这个问题,不能单在布局谋篇等写作技方面下功夫,必须认识到“死记硬背”的重要性,让学生积累足够的“米”。
我一直非常愿意帮助客户们解答在编程中的难点,但是却不大愿意帮助客户写完整的公式策略。
这其中有三个原因:
1、别人写的交易策略,你难以调整它。
据统计,90%以上的交易策略会在2年半之内由于种种原因失效或者效率降低。
通常的做法是一个季度左右,交易员就需要微调其策略,调整参数或改动某些条件。
如果策略不是自己编写的,调整起来就会有困难。
2、别人写的交易策略,你很难彻底执行它。
系统交易最重要的好处在于它的执行能力。
它可以使你的交易摆脱人性的弱点,摆脱心理因素的干扰。
然而这一切的基础,在于自信。
人只会信任自己了解的东西,这是人性。
如果一个交易策略是别人写的,无论它的测试报告是多么天花乱坠,你都不会信任它,因为你不了解它。
一旦市场出现了危机情况,你就会坐立不安,你就会总怀疑是不是策略有问题,然后就又把策略扔到一边,回到凭感觉去操作的老路上去了。
3、最重要的一点在于:
编程就是理解,编写交易策略调试交易策略的过程其实就是理解市场的过程。
这是一种非常宝贵的积累。
大多数人都是通过在市场中亏钱,靠爆仓来理解市场的。
成本高昂,而且难以总结。
使用这种方法来了解市场,往往就算你亏了很多钱,交了大把学费,你仍然不知道自己到底输在哪里。
你总结不出来,你就不可能有长进,就不可能赢。
而通过写交易策略来了解市场你不需要交什么学费,从历史测试报告里很容易分析出来自己到底错在哪里,如此你就很容易改进。
把编好的交易策略与模拟帐户交易结合起来就可以为你带来足够逼真的实战经验。
skywalker说的非常棒!
编程其实是一种思想,编程的目的是把你的思想用各种图形表现出来而已
我们期货编程的目的是表现我们的交易思想
是为思想而编程,不是为编程而编程!
说起这点我想起了TB的伟大!
不管你用文华还是飞狐,当你把指标公式写完后
可能你自己的不是很清楚
你的代码所表现出来的东西到底是不是就是你的交易思想呢?
因为他们的代码是工作在后台的
我们在前面无法得知这些代码如何工作
而TB完全不同
你可以在任意时候知道你的代码在做什么!
所以你也就非常的清楚你的代码是不是真的表现了你的意思!
好了
现在开始写数据类型,变量和赋值.
这是些非常基本的概念,相信您一下就懂的
线说数据类型吧
数据类型和人的类型差不多
人不是分黄种人,白种人,黑种人么?
TB里面的数据也一样
分字符串类型,数值型,还有布尔型
字符串类型很简单,用分号""括起来的东西就叫做字符串类型的数据,如"Iloveyou",如"3345",.....
数值型数据类型也同样的简单,数值大家知道吧,如1542啊,1.021啊....这些东西就是数值型的数据类型
当然,如果把一个数值型的东西用分号""括起来了那他就不再是数值型数据了,而是字符串类型的数据
如1688是数值型数据,但是"1688"就是字符串类型的数据了啊
还有就是布尔型,当然,没有接触过编程的朋友可能不明白布尔型的意思
说白点,布尔型就是真假型,意思就是布尔类型的数据只能取真(True)或假(False)值.
比如2>1,这个东西就是布尔类型的数据,因为2是大于1啊,所以这个表达式返回True(真)
那么2<1,大家说这个表达式是不是个布尔类型的数据呢?
呵呵,也是的,因为2大于1啊,所以2<1是错误的,就返回False(假)咯
大家明白了吧,就这三个类型,其中最只要的就是数值型数据类型哦
用的最多的也是数值型数据类型
如果明白了,那么请您就记住在TB里面数值型的E文是Numeric吧
晕死,看下TB的帮助,数据类型里面还有个序列型,如果数值序列型,字符串序列型,布尔序列型
序列这个东西看起来很难理解
想个办法来理解他吧
比如我们的K线图上有10跟K线,Close大家知道吧,就是收盘价
但是这个Close包含了第一根K线的收盘价,也包含了第二根K线的收盘价.......一直包含到第五根K线的收盘价
也就是说序列型的数据在没根K线上都有一个值的
OK了吧?
如果不OK也没有关系,慢慢的就懂了
再说说变量
顾名思义,变量就是一个可以改变的东西
现在这个变量的值是100,但是等下我可以把它改成20,只要您喜欢,你可以随心所欲的改变这个值
呵呵,能够修改他的值的东西就叫做变量了
记住:
在TB里面变量都是要先定义的!
而且有着他独到的定义方法,而且这个定义必须放到Begin的前面
如我们定义一个数值型变量a.就应该这样
Vars
Numerica;
Begin
......
End
当然你也可以定义两个或者多个变量,如
Vars
Numerica;
Numericb;
//.........更多变量定义
Begin
......
End
大家也许想到了
我定义这个变量a,我要让他等于2,这个东西很简单
你可以在变量定义的时候就给他赋初值让他一开始被定义就等于2,也可以在Begin下面写.如
Vars
Numerica
(2);
Numericb;
//.........更多变量定义
Begin
......
End
明白了么?
那么变量b呢?
我们没有用括号()扩个东西啊,那么这个时候b这个变量等于什么呢?
很简单,如果你在定义变量的时候没有给他初值,那么b这个时候等于0咯
好了
再看在Begin里面怎么修改这个变量的值
Vars
Numerica
(2);
Numericb;
//.........更多变量定义
Begin
a=3;
b=100;
End
很简单的
现在大家应该知道了变量是什么东西了吧
对了,忘记告诉大家了,在Begin下面给变量复制仅仅只对当前正在执行你的代码的K线有效咯,到下一根K线他就是初始值了啊
写个例子吧
Vars
Numerica(100);//定义一个变量,类型是数值类型,变量名字是a,变量的初始值是100
Begin
if(CurrentBar==0)//如果是第一根K线,就把变量a的值变为1
{
a=1;
}
FileAppend("C:
\\a.Log",Text(a));
End
我们再来看看输出结果:
1
100
100
100
100
我们再来理解下这个结果(当然这个时候我们的K线图上面只有5跟K线啊,其实随便多少跟K线都一样)
首先代码在第一根K线上面执行,先执行if(CurrentBar==0)这个东西,CurrentBar代表正在被执行的K线的索引
因为代码现在在第一根K线上执行,所以索引就是0拉,于是这个表达式就成立了啊,既然if(CurrentBar==0)这个表达式
成立,那么他就会执行{}里面的东西a=1;把1赋给变量a,也就是说吧变量a的内容改成1,
然后执行FileAppend("C:
\\a.Log",Text(a));
这个时候变量a的值是1,所以当然输出1了啊
代码执行完毕
然后转到第二根K线,
既然是第二根K线,那么这根K线的索引就是1了啊,1肯定不等于0啊
那么表达式if(CurrentBar==0)就不成立了啊,既然不成立那么他也就不会执行{}里面的东西a=1;
于是就直接执行FileAppend("C:
\\a.Log",Text(a));
那么这个时候a的值是多少呢?
很明显是100,就是他的初始值,而不是上一根K线执行代码的时候改变了的a的值!
这点千万注意啊
我相信好多朋友会在这里犯下错误的咯
再说给变量赋值
其实我们上面已经说了,记住=和==的区别吧
=就是把=右边的东西赋给=左边的东西
如a=100;
就是把=右边的100赋给左边的变量a
如b=9;
就是把9赋给变量b
我们在日常中一直把=当成等于,千万急着在TB里面=就是赋值!
!
!
真正的等于的符号是==
if(a==b)//就是如果a等于b
{
//做某件事情
}
好了
快11点了
睡觉了
下次见
看了,学了,收获不少,不断消化ING。
。
。
谢谢斑竹!
但是编程不是一件很容易的事情,当然,如果您入门了,你会发觉TB编程其实和泡妞一样的简单,就看你敢不敢下手了
如1688是数值型数据,但是"1688"就是字符串类型的数据了啊
说白点,布尔型就是真假型,意思就是布尔类型的数据只能取真(True)或假(False)值.
序列这个东西看起来很难理解
想个办法来理解他吧
比如我们的K线图上有10跟K线,Close大家知道吧,就是收盘价
但是这个Close包含了第一根K线的收盘价,也包含了第二根K线的收盘价.......一直包含到第五根K线的收盘价
也就是说序列型的数据在没根K线上都有一个值的
在TB里面变量都是要先定义的!
而且有着他独到的定义方法,而且这个定义必须放到Begin的前面
那么变量b呢?
我们没有用括号()扩个东西啊,那么这个时候b这个变量等于什么呢?
很简单,如果你在定义变量的时候没有给他初值,那么b这个时候等于0咯
好了
再看在Begin里面怎么修改这个变量的值
Vars
Numerica
(2);
Numericb;
//.........更多变量定义
Begin
a=3;
b=100;
End
现在大家应该知道了变量是什么东西了吧
对了,忘记告诉大家了,在Begin下面给变量复制仅仅只对当前正在执行你的代码的K线有效咯,到下一根K线他就是初始值了啊
写个例子吧
Vars
Numerica(100);//定义一个变量,类型是数值类型,变量名字是a,变量的初始值是100
Begin
if(CurrentBar==0)//如果是第一根K线,就把变量a的值变为1
{
a=1;
}
FileAppend("C:
\\a.Log",Text(a));
End
我们再来看看输出结果:
1
100
100
100
100
我们再来理解下这个结果(当然这个时候我们的K线图上面只有5跟K线啊,其实随便多少跟K线都一样)
首先代码在第一根K线上面执行,先执行if(CurrentBar==0)这个东西,CurrentBar代表正在被执行的K线的索引
因为代码现在在第一根K线上执行,所以索引就是0拉,于是这个表达式就成立了啊,
既然if(CurrentBar==0)这个表达式成立,那么他就会执行{}里面的东西a=1;把1赋给变量a,也就是说吧变量a的内容改成1,
然后执行FileAppend("C:
\\a.Log",Text(a));
这个时候变量a的值是1,所以当然输出1了啊
代码执行完毕
然后转到第二根K线,
既然是第二根K线,那么这根K线的索引就是1了啊,1肯定不等于0啊
那么表达式if(CurrentBar==0)就不成立了啊,既然不成立那么他也就不会执行{}里面的东西a=1;
于是就直接执行FileAppend("C:
\\a.Log",Text(a));
那么这个时候a的值是多少呢?
很明显是100,就是他的初始值,而不是上一根K线执行代码的时候改变了的a的值!
这点千万注意啊
我相信好多朋友会在这里犯下错误的咯
再说给变量赋值
其实我们上面已经说了,记住=和==的区别吧
=就是把=右边的东西赋给=左边的东西
如a=100;
就是把=右边的100赋给左边的变量a
如b=9;
就是把9赋给变量b
我们在日常中一直把=当成等于,千万急着在TB里面=就是赋值!
!
!
真正的等于的符号是==
if(a==b)//就是如果a等于b
{
//做某件事情
}
现在我们说说TB中的流程控制
流程控制就是控制代码执行的流程
还说的明白点就是如果满足什么阳的条件就做什么事情
或者不满足什么条件的时候做什么事情
简单说流程控制就是控制语句控制代码
控制语句中分为逻辑控制语句(就是条件控制语句)和循环控制语句
条件控制语句中大家记住If这个关键字,翻译成中文就是如果
循环控制语句中大家记住For,就是开始循环了
先说If.
假设一个这样的条件:
如果(收盘价>开盘价)
则输出:
今日收红阳线
我们先把这个东西翻译成TB
如果翻译成If
收盘价和开盘价大家都知道会翻译成Close和Open
输出语句就是FileAppend,则翻译成TB就是:
If(Close>Open)
{
FileAppend("c:
\\a.log","今日收红阳线");
}
是不是很简单呢?
大家记住一点,凡是if(如果)语句中的代码,都给我用{}括起来
我们再把上面的条件加上一点:
如果(收盘价>开盘价)
则输出:
今日收红阳线
否则如果(收盘价==开盘价)
则输出:
今日收十字线
我们再翻译成TB,把否则翻译成Else,如果翻译成If
If(Close>Open)
{
FileAppend("c:
\\a.log","今日收红阳线");
}
ElseIf(Close==Open)
{
FileAppend("C:
\\a.log","今日收十字线");
}
同样的简单,我们可以再把上面的条件再加:
如果(收盘价>开盘价)
则输出:
今日收红阳线
否则如果(收盘价==开盘价)
则输出:
今日收十字线
否则
则输出:
今日收绿阴线
上面的否则大家知道翻译成Else吧,有两种翻译方法,因为收盘价和开盘价的比较只存在着三种情况:
收盘价大于开盘价,收盘价等于开盘价,收盘价少于开盘价,我们先这样翻译:
If(Close>Open)
{
FileAppend("c:
\\a.log","今日收红阳线");
}
ElseIf(Close==Open)
{
FileAppend("C:
\\a.log","今日收十字线");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一无所知 开始 学习 交易 开拓者 TB 期货 程序化 编程 23 精选 文档