交易开拓者(TB)编程初级篇
TB公式编程官方基础教程

TradeBlazer公式的结构与编程目录页码一、TB的程序化交易的功能与特点 41-1、TB程序化交易的功能 4 1-2、TB公式说明 4 1-3、TB编程步骤 5 二、数据的说明与使用 62-1、Bar数据 6 2-2、计算方法6 2-3、叠加数据8 2-4、行情数据9 2-5、属性数据9 三、TB公式编程基础知识93-1、TB的公式的结构9 3-2、公式名称规则11 3-3、语句写法11 四、参数的说明与应用214-1、参数说明22 4-2、参数的使用与说明22 4-3、参数的默认值23 4-4、参数使用例子24 4-5、变量参数24五、变量的类型与使用255-1、变量参数25 5-2、变量声明26 5-3、变量的默认值27 5-4、变量赋值27 5-5、序列变量28 5-6、变量、数据与函数的回溯28 六、系统函数的使用316-1、标点符号31 6-2、控制语句32 6-3、循环语句37 七、用户函数的使用与说明407-1、TB用户函数40 7-2、序列函数42 7-3、使用内建用户函数42 7-4、用户函数的调用44 7-5、用默认参数调用用户函数44 八、技术指标编写458-1、技术指标与应用45 8-2、常用的技术指标应用举例48 8-3、自编指标的输出56 8-4、指标编写常见问题58 九、用户函数编写589-1、TB用户函数的编写58 9-2、交易指令(Buy/Sell)61 9-3、叠加多个商品合约进行交易629-4、交易常用系统函数介绍62 十、交易策略的程序实现与实例6510-1、利用技术指标的交易策略65 10-2、止赢止损70 10-3、加仓减仓77 10-4、多品种交易80 10-5、集合竞价数据过滤82 10-6、函数下单撤单和全局变量操作83 10-7、数据库读写83十一、其他注意事项88 11-1、信号消失问题及解决办法91 11-2、盘中和盘后公式运行的差别94十二、策略评估的常用指标94正文一、TB程序化交易的功能与特点TradeBlazer公式(简称TB),新推出的V4公式,运行效率大幅提高,除支持多线程应用功能,在程序交易的主要特点如下:1-1、TB程序化交易的功能➢所使用的TBL(TradeBlazer Language)语言功能强大、语法简明易懂;➢TB的公式执行机制是在每根BAR上都会执行一遍公式,能实现公式和算法的精确控制;➢具有结构化的控制语句,支持复合语句—IF语句和FOR,WHILE语句;➢提供了丰富的系统函数,支持用户函数,便于实现程序的模块化设计;➢提供A函数、Q函数等,可实时获取当前交易账户的账户信息,并能对叠加商品进行发单和撤单,便于实现头寸调整、风险控制、资金管理以及套利交易的程序化;➢支持单图表叠加多个商品的交易和测试;➢技术指标源代码公开,便于指标算法的改进;➢强大的图表化、多维度的交易模型测试分析报告及参数优化功能,可实现多品种、多策略、多图表周期的组合测试,提供了丰富的、和实战密切相关的系统评估指标;➢支持交易模型的导入导出,支持交易模型的加密和无源码模式导出,便于模型研发后的商业应用。
tb编程基础详解1

叠加数据
• • 交易开拓者的超级图表支持商品叠加的显示,当叠加的图表调用各项公式时,可能有 需要使用叠加的商品对应的基础数据 假定,我们新建一个超级图表模块,其主数据对应的商品为:cu1107,在此基础上, 我们叠加了cu1108和cu1109。此时,根据叠加操作的先后顺序,cu1107为Data0, cu1108为Data1,cu1109为Data2,在TradeBlazer公式中,我们可以通过 Data1.Close(),Data2.Vol()类似方法调用叠加Bar数据,叠加Bar数据的函数和Bar数据 一样,只是需要在调用的时候加上数据源。 我们也可以使用Data0.Open()来调用Bar数据,默认情况下,可以省略对主数据源的指 定,为了方便,一般直接使用Open()来代替Data0.Open()。
和周期长度一致的String型序列值。
•
数值型的表达式可以是一个数字,当然,他们也可以是一个数值型的保留字 ,例如:保留字"Close"。或者是通过运算符号组合的一个计算表达式,该表 达式的结果是数值型。下文中的例子都是数值型的表达式。 154; Vol; (High+Low)/2; • 布尔型的表达式能够返回一个值True/False,或者说它可以对表达式的值进 行评估,然后返回其值,要么为True,要么为False。逻辑表达式永远要涉及 到比较运算,下面我们有一些逻辑表达式,它也就是对一个表达式的值是 True还是False进行判断。 Close > Open; 5 < 2; • 字符串的表达式可以是单个字符串,也可以字符串的组合,或者返回值为字 符串的系统函数,如下,就是一个字符串的表达式: "This is a test string expression" ; "Hello"+"World" ;
TB使用说明书及程序开发、交易策略

公式应用在输出数据时,我们是通过输出值的名称来进行识别,名称相同则认为是一个数据,如下的代码,后面语句的输出数据将会覆盖前面语句的输出数 据。
file://C:\Documents and Settings\Administrator\Local Settings\Temp\~hh71F6.htm 2014-10-25
用户函数
Page 4 of 16
PlotNumeric("Test",10); PlotNumeric("Test",20);
最后"Test"输出的数据为20,而不是10。 PlotNumeric
参见PlotNumeric。 PlotBool
参见PlotBool。 PlotString
参见PlotString。 UnPlot
用默认参数调用用户函数
用户函数在被调用的时候,如果传入的参数和参数的默认值一样,可以省略输出参数,使用默认值来调用用户参数。只能够对排列在后面的那些参数使用默认 参数,默认参数的定义参见参数。
公式系统 - TradeBlazer公式的使用 - 公式应用
公式应用
TradeBlazer公式通过公式应用来实现技术分析输出和交易策略的执行,根据使用目的的不同,我们将公式应用分为两类(技术分析和交易策略)进行单独描述。
用户函数的类型
1. 用户函数按照返回值类型不同可以分为数值型(Numeric),布尔型(Bool),字符串(String)三种基本类型,三种类型用户函数在调用时需要将返回值赋予类型 相同的变量。
2. 按照用户函数属性不同,用户函数可以分为内建用户函数和其他用户函数两种,内建用户函数是交易开拓者提供的,用于支持公式系统运行的预置公式, 您可以查看和调用内建用户函数,但是不能删除和修改内建公式。
TB公式入门

TB公式入门交易开拓者公式基础Bar数据:公式在进行计算时,都是建立在基本数据源(Bar数据)之上,我们这里所谓的Bar 数据,是指商品在不同周期下形成的序列数据,在单独的每个Bar上面包含开盘价、收盘价、最高价、最低价、成交量及时间。
期货等品种还有持仓量等数据。
所有的Bar按照不同周期组合,并按照时间从先到后进行排列,由此形成为序列数据,整个序列称之为Bar 数据。
公式如何执行:TradeBlazer公式在计算时按照Bar数据的Bar数目,从第一个Bar到最后一个Bar,依次进行计算,如果公式中出现了调用Bar数据函数的,则取出当前Bar的相应值,进行运算。
公式执行从上至下,Bar从左到右执行。
公式执行顺序公式执行顺序TradeBlazer公式的HelloWorld!/forum/thread-63-1-1.htmlBeginFileAppend("c:\\Formula.log","hello world");End公式的种类指标K线形态特征走势交易指令函数公式环境的组织层次(1)公式环境的组织层次(2)建立一个最简单的指标:画零线BeginPlotNumeric(“Line1”,0);EndBegin和End宣告公式正文的开始和结束,公式语句应该放到Begin和End之间。
PlotNumeric表示输出一个数值型组成的数组。
技术指标属性的设置再画一条线…BeginPlotNumeric(“Line1”,5);End参数一根线ParamsNumeric Length(0);BeginPlotNumeric(“Line1”,length);EndN根线ParamsNumeric Length1(0);Numeric Length2(5);BeginPlotNumeric(“Line1”,length1);PlotNumeric(“Line2”,length2);End取较大值ParamsNumeric Length1(0);Numeric Length2(5);Beginif(Length1 >= Length2){PlotNumeric(“Line1”,length1);}else{PlotNumeric(“Line1”,length1);}EndPlotNumeric由输出的名字来区分是否为同一条线。
使用交易开拓者构建交易系统

课程安排
交易开拓者软件介绍 交易开拓者编程基础 交易系统构建和评测基础
使用交易开拓者构建交易系统
3
内容
控制语句 交易系统的构建 如何在交易中使用交易系统
4
IF语句的应用
IF else 语句举例
条件语句——IF ElseIF语句
条件语句的用途
条件语句多用在各种条件的判断中,在交易 系统构建中经常见到的如“交叉”、“突破 ”、“上涨”、“下跌”等 注意事项:IF语句后不能以分号结束,否则 会出现逻辑错误
逻辑判断符
“与”判断and——多个条件要同时满足才返回“ 真”,否则为“假”。如A and B,需要A和B条件 同时满足才算满足 “或”判断or——只要有一个条件满足即返回“真” ,所有条件不满足才返回“假”。如A or B,只要A 满足或者B满足就算满足 逻辑判断的叠加——使用括号进行叠加,优先计算 括号内的判断,再计算括号外的判断。如(A or B )and C
自动化交易需要注意的问题
模型加载是否正确 自动化交易是否启动 信号出现时发单是否成交 交易数量是否设定正确 总持仓头寸是否正确 合约转换
TB的学习资源
软件自带的公式范例 TB帮助文件(F1) TB公式开发指南
TB系统交易论坛
TB交易网校
最好的学习方法就是自己动手实验
42
43
构建工作区
可以单个合约使用一个工作区 也可以将多个合约共同置于一个工作区中
在每个合约图表上加载模型公式
点击每个合约图表 输入模型公式代码 加载后图表上应有信号指示 不断重复,直到所有图标上都已加载公式
交易开拓者(TB)编程初级篇

交易开拓者(TB)期货程序化交易编程本文仅是写给完全不懂编程的朋友的,仅是最基本的入门资料。
TB里面代码执行1,代码从第一根K线开始执行,一直到最后一根K线;2,在每一根K线上,代码都是从第一行开始执行,一直到最后一行;我们就写个输出每日的收盘价的例子;打开TB,在左边的TB公式里面,点击新建技术指标,然后在出来的公式编辑器里面输入BeginEnd注意,除了参数和变量定义外,所有的代码都必须包含在Begin和End之间我们再在Begin和End之间输入一些代码,完整的就是:BeginFileAppend("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把它搞成字符串CloseK线的收盘价啊,如果代码执行到最后的那根K线我们点公式编辑器上面的工具栏的第五个按钮(打勾的那个东西),校验保存公式,稍微等一下,就OK了我们在回到K线图里面,TB把K线图叫做超级图表在K线图里面右键,选择商品设置,然后吧里面的样本数由默认的300改成5,意思是让在超级图表里面仅仅显示5条K线,点确定后,你就看到在K线图里面只显示了5跟K线,当然现在代码还不能被执行,因为我们现在还需要把我们刚刚所写的那个指标加到K线图上面才能被执行的我们上面说了,我们这个例子仅仅是把每日的收盘价写到文件里面去啊,那么我们找一找文件在什么地方咯? FileAppend("c:\\a.log",很明显,文件是在c盘的,文件的名字是a.log好了,我们到c盘找到a.log文件,双击打开,我们就会看到下面的内容:2007年9月24日的收盘价等于672802007年9月25日的收盘价等于678002007年9月26日的收盘价等于671602007年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(Close));折行代码把第一根K线的收盘价输出到a.log文件里面,于是就输出了"67280"好了,代码在第一根K线上执行完毕,于是再转到第二根K线,再执行第一行代码,再执行第二行代码.........我一直非常愿意帮助客户们解答在编程中的难点,但是却不大愿意帮助客户写完整的公式策略。
TB公式编程官方基础教程1

TradeBlazer公式的结构与编程目录页码一、TB的程序化交易的功能与特点 41-1、TB程序化交易的功能 4 1-2、TB公式说明 4 1-3、TB编程步骤 5 二、数据的说明与使用 62-1、Bar数据 6 2-2、计算方法 6 2-3、叠加数据 8 2-4、行情数据 9 2-5、属性数据 9 三、TB公式编程基础知识 93-1、TB的公式的结构 9 3-2、公式名称规则 11 3-3、语句写法 11 四、参数的说明与应用 214-1、参数说明 22 4-2、参数的使用与说明 22 4-3、参数的默认值 23 4-4、参数使用例子 24 4-5、变量参数 24 五、变量的类型与使用 255-1、变量参数 25 5-2、变量声明 26 5-3、变量的默认值 27 5-4、变量赋值 27 5-5、序列变量 28 5-6、变量、数据与函数的回溯 28 六、系统函数的使用 316-1、标点符号 31 6-2、控制语句 32 6-3、循环语句 37 七、用户函数的使用与说明 407-1、TB用户函数 40 7-2、序列函数 42 7-3、使用内建用户函数 42 7-4、用户函数的调用 44 7-5、用默认参数调用用户函数 44 八、技术指标编写 458-1、技术指标与应用 45 8-2、常用的技术指标应用举例 48 8-3、自编指标的输出 56 8-4、指标编写常见问题 58 九、用户函数编写 589-1、TB用户函数的编写 58 9-2、交易指令(Buy/Sell) 61 9-3、叠加多个商品合约进行交易 62 9-4、交易常用系统函数介绍 62 十、交易策略的程序实现与实例 6510-1、利用技术指标的交易策略 6510-2、止赢止损 7010-3、加仓减仓 7710-4、多品种交易 8010-5、集合竞价数据过滤 8210-6、函数下单撤单和全局变量操作 8310-7、数据库读写 83十一、其他注意事项 88 11-1、信号消失问题及解决办法 9111-2、盘中和盘后公式运行的差别 94十二、策略评估的常用指标 94正文一、TB程序化交易的功能与特点TradeBlazer公式(简称TB),新推出的V4公式,运行效率大幅提高,除支持多线程应用功能,在程序交易的主要特点如下:1-1、TB程序化交易的功能➢所使用的TBL(TradeBlazer Language)语言功能强大、语法简明易懂;➢TB的公式执行机制是在每根BAR上都会执行一遍公式,能实现公式和算法的精确控制;➢具有结构化的控制语句,支持复合语句—IF语句和FOR,WHILE语句;➢提供了丰富的系统函数,支持用户函数,便于实现程序的模块化设计;➢提供A函数、Q函数等,可实时获取当前交易账户的账户信息,并能对叠加商品进行发单和撤单,便于实现头寸调整、风险控制、资金管理以及套利交易的程序化;➢支持单图表叠加多个商品的交易和测试;➢技术指标源代码公开,便于指标算法的改进;➢强大的图表化、多维度的交易模型测试分析报告及参数优化功能,可实现多品种、多策略、多图表周期的组合测试,提供了丰富的、和实战密切相关的系统评估指标;➢支持交易模型的导入导出,支持交易模型的加密和无源码模式导出,便于模型研发后的商业应用。
TB编程基础知识

普通交易指令信号
多头开仓 多头平仓 空头开仓 空头平仓
MinMove最小变动量 行情函数 Q函数 帐户函数A函数 枚举函数Enum_Buy 交易函数EntryPrice、 EntryPrice 其他函数
• PlotNumeric在当前Bar输出一个数值。Numeric PlotNumeric(String Name,Numeric Number,Integer Color=1,Integer BarsBack=0) • PlotString在当前Bar输出一个字符串。String PlotString(String Name,String str,Integer Color=-1,Integer BarsBack=0) • PlotBar在当前Bar输出两个值,用于在图表中当前Bar上画 出连接两个值的线条。PlotBar(String Name,Numeric Value1,Numeric Value2,Integer Color=-1,Integer BarsBack=0) • PlotBool在当前Bar输出一个布尔值。Bool PlotBool(String Name,Bool bPlot,Integer Color=-1,Integer BarsBack=0)
参数、变量的声明
• 声明参数、变量 Params(Vars) 类型 变量名1(初值); 类型 变量名2(初值); 类型 变量名3(初值);
• 变量声明例子:
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
交易开拓者(TB)期货程序化交易编程本文仅是写给完全不懂编程的朋友的,仅是最基本的入门资料。
TB里面代码执行1,代码从第一根K线开始执行,一直到最后一根K线;2,在每一根K线上,代码都是从第一行开始执行,一直到最后一行;我们就写个输出每日的收盘价的例子;打开TB,在左边的TB公式里面,点击新建技术指标,然后在出来的公式编辑器里面输入BeginEnd注意,除了参数和变量定义外,所有的代码都必须包含在Begin和End之间我们再在Begin和End之间输入一些代码,完整的就是:BeginFileAppend("c:\\",Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于");FileAppend("C:\\",Text(Close));End我们再说说这两行代码是什么意思File就是文件,Append就是添加,现在明白了吧FileAppend就是添加一个文件,文件名是什么呢就是你后面写的,这个文件的路径在哪里呢就是c:\\里面的C盘,且在这个文件里面添加一行东西,这行东西的内容就是你后面所写的Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于"当然,如果这个文件已经存在,他就不会添加文件了,仅仅在这个文件的后面添加一行上面你写的内容好了,再看看Text,Text的意思就是把那些不是字符串的东西如数字啊,等变成字符串.而Year,Month,Day就代表了正在执行你写的代码的那一根K线的年,月,日,年月日是数字,我们当然要用Text把它搞成字符串CloseK线的收盘价啊,如果代码执行到最后的那根K线我们点公式编辑器上面的工具栏的第五个按钮(打勾的那个东西),校验保存公式,稍微等一下,就OK了我们在回到K线图里面,TB把K线图叫做超级图表在K线图里面右键,选择商品设置,然后吧里面的样本数由默认的300改成5,意思是让在超级图表里面仅仅显示5条K线,点确定后,你就看到在K线图里面只显示了5跟K线,当然现在代码还不能被执行,因为我们现在还需要把我们刚刚所写的那个指标加到K线图上面才能被执行的我们上面说了,我们这个例子仅仅是把每日的收盘价写到文件里面去啊,那么我们找一找文件在什么地方咯FileAppend("c:\\",很明显,文件是在c盘的,文件的名字是好了,我们到c盘找到文件,双击打开,我们就会看到下面的内容:2007年9月24日的收盘价等于672802007年9月25日的收盘价等于678002007年9月26日的收盘价等于671602007年9月27日的收盘价等于673002007年9月28日的收盘价等于68020我们现在来分析下:首先你写的代码在第一根K线上执行,先执行第一行代码:FileAppend("c:\\",Text(Year)+"年"+Text(Month)+"月"+Text(Day)+"日的收盘价等于");这行代码就输出了第一根K线的年,月,日,就在文件里输出成"2007年9月24日的收盘价等于"然后执行第二行代码:FileAppend("C:\\",Text(Close));折行代码把第一根K线的收盘价输出到文件里面,于是就输出了"67280"好了,代码在第一根K线上执行完毕,于是再转到第二根K线,再执行第一行代码,再执行第二行代码.........我一直非常愿意帮助客户们解答在编程中的难点,但是却不大愿意帮助客户写完整的公式策略。
这其中有三个原因:1、别人写的交易策略,你难以调整它。
据统计,90%以上的交易策略会在2年半之内由于种种原因失效或者效率降低。
通常的做法是一个季度左右,交易员就需要微调其策略,调整参数或改动某些条件。
如果策略不是自己编写的,调整起来就会有困难。
2、别人写的交易策略,你很难彻底执行它。
系统交易最重要的好处在于它的执行能力。
它可以使你的交易摆脱人性的弱点,摆脱心理因素的干扰。
然而这一切的基础,在于自信。
人只会信任自己了解的东西,这是人性。
如果一个交易策略是别人写的,无论它的测试报告是多么天花乱坠,你都不会信任它,因为你不了解它。
一旦市场出现了危机情况,你就会坐立不安,你就会总怀疑是不是策略有问题,然后就又把策略扔到一边,回到凭感觉去操作的老路上去了。
3、最重要的一点在于:编程就是理解,编写交易策略调试交易策略的过程其实就是理解市场的过程。
这是一种非常宝贵的积累。
大多数人都是通过在市场中亏钱,靠爆仓来理解市场的。
成本高昂,而且难以总结。
使用这种方法来了解市场,往往就算你亏了很多钱,交了大把学费,你仍然不知道自己到底输在哪里。
你总结不出来,你就不可能有长进,就不可能赢。
而通过写交易策略来了解市场你不需要交什么学费,从历史测试报告里很容易分析出来自己到底错在哪里,如此你就很容易改进。
把编好的交易策略与模拟帐户交易结合起来就可以为你带来足够逼真的实战经验。
编程其实是一种思想,编程的目的是把你的思想用各种图形表现出来而已我们期货编程的目的是表现我们的交易思想是为思想而编程,不是为编程而编程!现在开始写数据类型,变量和赋值.数据类型分字符串类型,数值型,还有布尔型字符串类型很简单,用分号" "括起来的东西就叫做字符串类型的数据,如"I love you",如"3345",.....数值型数据类型也同样的简单,数值大家知道吧,如1542啊,啊....这些东西就是数值型的数据类型当然,如果把一个数值型的东西用分号""括起来了那他就不再是数值型数据了,而是字符串类型的数据如1688是数值型数据,但是"1688"就是字符串类型的数据了还有就是布尔型,当然,没有接触过编程的朋友可能不明白布尔型的意思说白点,布尔型就是真假型,意思就是布尔类型的数据只能取真(True)或假(False)值.比如2>1,这个东西就是布尔类型的数据,因为2是大于1啊,所以这个表达式返回True(真)那么2<1,大家说这个表达式是不是个布尔类型的数据呢也是,因为2大于1啊,所以2<1是错误的,就返回False(假)大家明白了吧,就这三个类型,其中最只要的就是数值型数据类型用的最多的也是数值型数据类型如果明白了,那么请您就记住在TB里面数值型Numeric看下TB的帮助,数据类型里面还有个序列型,如果数值序列型,字符串序列型,布尔序列型序列这个东西看起来很难理解比如我们的K线图上有10跟K线,Close就是收盘价但是这个Close包含了第一根K线的收盘价,也包含了第二根K线的收盘价.......一直包含到第五根K线的收盘价也就是说序列型的数据在每根K线上都有一个值的说说变量变量就是一个可以改变的东西现在这个变量的值是100,但是等下我可以把它改成20, 只要您喜欢,你可以随心所欲的改变这个值能够修改他的值的东西就叫做变量了记住:在TB里面变量都是要先定义的!而且有着他独到的定义方法,而且这个定义必须放到Begin的前面如我们定义一个数值型变量a.就应该这样VarsNumeric a;Begin......End当然你也可以定义两个或者多个变量,如VarsNumeric a;Numeric b;......更多变量定义Begin......End大家也许想到了我定义这个变量a,我要让他等于2,这个东西很简单你可以在变量定义的时候就给他赋初值让他一开始被定义就等于2,也可以在Begin下面写.如VarsNumeric a(2);Numeric b;......更多变量定义Begin......End明白了么|那么变量b呢我们没有用括号()扩个东西啊,那么这个时候b这个变量等于什么呢很简单,如果你在定义变量的时候没有给他初值,那么b这个时候等于0再看在Begin里面怎么修改这个变量的值VarsNumeric a(2);Numeric b;......更多变量定义Begina = 3;b = 100;End很简单的现在大家应该知道了变量是什么东西了吧对了,忘记告诉大家了,在Begin下面给变量复制仅仅只对当前正在执行你的代码的K线有效,到下一根K线他就是初始值了啊写个例子吧VarsNumeric a(100);.......更多变量定义Begina = 3;b = 100;End现在我们说说TB中的流程控制流程控制就是控制代码执行的流程还说的明白点就是如果满足什么条件就做什么事情或者不满足什么条件的时候做什么事情简单说流程控制就是控制语句控制代码控制语句中分为逻辑控制语句(就是条件控制语句)和循环控制语句条件控制语句中大家记住If这个关键字,翻译成中文就是如果循环控制语句中大家记住For,就是开始循环了先说If.假设一个这样的条件:如果(收盘价>开盘价)则输出:今日收红阳线我们先把这个东西翻译成TB如果翻译成If收盘价和开盘价大家都知道会翻译成Close和Open输出语句就是FileAppend,则翻译成TB就是:If(Close>Open){FileAppend("c:\\","今日收红阳线");}是不是很简单呢大家记住一点,凡是if(如果)语句中的代码,都给我用{}括起来我们再把上面的条件加上一点:如果(收盘价>开盘价)则输出:今日收红阳线否则如果(收盘价==开盘价)则输出:今日收十字线我们再翻译成TB,把否则翻译成Else,如果翻译成IfIf(Close>Open){FileAppend("c:\\","今日收红阳线");}Else If(Close==Open){FileAppend("C:\\","今日收十字线");}同样的简单,我们可以再把上面的条件再加:如果(收盘价>开盘价)则输出:今日收红阳线否则如果(收盘价==开盘价)则输出:今日收十字线否则则输出:今日收绿阴线上面的否则大家知道翻译成Else吧,有两种翻译方法,因为收盘价和开盘价的比较只存在着三种情况: 收盘价大于开盘价,收盘价等于开盘价,收盘价少于开盘价,我们先这样翻译:If(Close>Open){FileAppend("c:\\","今日收红阳线");}Else If(Close==Open){FileAppend("C:\\","今日收十字线");}Else If(Close<Open){FileAppend("c:\\","今日收绿阴线");}上面的这个语句是很好理解的但是大家想到了吗开盘价和收盘价的比较,如果不满足Close>Open,也不满足Close==Open 那么肯定的一点就是:Close<Open,所以上面的语句可以写成:If(Close>Open){FileAppend("c:\\","今日收红阳线");}Else If(Close==Open){FileAppend("C:\\","今日收十字线");}Else{FileAppend("c:\\","今日收绿阴线");}再说For循环语句.先记下For语句的语法格式:For 循环变量= 初始值To 结束值{TradeBlazer公式语句;}也就是(假如变量i已经定义,且循环5次)For i = 0 To 4{TradeBlazer公式语句;}for语句的理解稍微复杂点,我们先看看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公式语句后,Tb系统又自动给变量i加1,上面i已经等于1了,加1,于是这个时候i等于2了,于是再判断变量i的值2是不是少于To后面的4,当然少于拉,于是再执行{}里面的TradeBlazer公式语句;....以此执行,当i等于5的时候,再与To后面的4进行比较,当然5>4了,所以不满足条件了,于是不再执行{}里面的TradeBlazer公式语句;而开始执行{}下面的语句拉大家再研究下下面的HHV的写法,就会很明白了的:比如一个这样的函数请注意,这仅仅是个假想的函数,仅为了帮助理解函数是什么:GetCloseFromTrader我们就很明白,这个函数就是帮助我们到交易所跑一趟,然后把收盘价返回给我们;有点明白了吧,但是仔细一想,这个东西似乎有点问题,比如返回收盘价,交易所那么多的品种,且每个品种都有那么多的月份,他到底返回的是什么东西的收盘价啊那么我们这样写:GetCloseFromTrader(Cu0801)现在应该完全明白了,这个函数就是从交易所返回某个品种的收盘价,到底是什么品种什么月份的收盘价呢Cu0801就是拉.其实,这里面的Cu0801就是这个函数所需要的参数!我们于是就可以这样理解:函数是帮助用户完成某一件事情且返回用户所需要的数据的方法;那么参数呢参数就是参到函数里面去的数,也就是说必须要传递给函数的数;我们现在不要求一定能够自己写函数,但是必须要懂得的是要看懂这个函数是做什么用的,且知道如何去调用这个函数!我们先看看下面的这个函数,这个函数的名字叫:HHV,是根据轮回老大的建议改写的,我们必须要读懂这个函数,且知道怎么样去CODE:....第N天同样如此了;这个时候我们就应该想到,如果当前K线的索引小于你需要的周期数的时候就取当前K线的前面几个周期的最高值于是代码开始写:minDay = Min(CurrentBar,Length-1);这个大家都很明白吧,如果当前K线索引假设是3,而你要得到的是5个周期的最高值,因为暂时还没有5个周期,我们我们就取这3个周期来获得这三个周期的最高值为什么要-1呢因为K线的索引是从0开始计算的,那么前面的minDay呢就是个变量,我们用这个变量来代表周期,于是我们再到定义变量的地方去定义这个变量:Numeric minDay;再看代码:CODE:for i=0 to minDay{highestValue=Max(highestValue,Price[i]);}很明显,这是一个前面我们所说的For循环,在For循环里面我们必须要先定义一个变量i(可以是其他名字),代表从什么基数开始循环;于是再到定义变量的地方去定义这个i变量:VarsNumeric highestValue(0);Numeric minDay;Numeric i;再看这个For循环,当i是0的时候,看这个时候0是不是小于等于最小周期minDay,如果条件成立,就执行:CODE:highestValue=Max(highestValue,Price[i]);Price[0]代表今天的价格,先比较今天的价格和最高值,取最大的那个保存;再把i+1于是这个时候i为1了,再比较是不是小于等于最小周期minDay,如果条件成立,再执行:CODE:highestValue=Max(highestValue,Price[i]);这个时候Price[1]就代表了昨天的价格,把昨天的价格和保存的最高值比较,取他们的最高的那个再次保存;依次循环,我们是不是就得到了某个周期某个价格的最高值了呢最后面,我们用代码:Return highestValue;把这个得到的最高值返回给用户,Return就是返回调用这个函数的时候就更简单了,比如求10个周期的收盘价的最高值:HHV(Close,10);求20个周期的最高价的最高值:HHV(High,20);大家在看看和分析这个文章里面的函数就会完全明白了的我们现在来写一个飞狐的DMA函数原文出自这里:QUOTE:请编飞狐DMA函数.函数:DMA(X,N)别名:动态移动平均参数:X为数组,N为计算周期返回:返回数组说明:求X的动态移动平均。