TB交易网校2011.12.29课程:交易开拓者公式编写基础(一)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例2 运行结果
参数的作用
假如我们要写一个均线指标,现在是用10天做周期。代码 如下:
Begin PlotNumeric("MA",AverageFC(Close,10)); End
那如果要改用20天做周期,我们必须改程序,把10改成 20,然后编译。下次想用别的周期,还得改,非常麻烦。 如果使用参数,就方便多了。程序写好,使用时改参数就 好了。代码如下:
Params
公式参数段
Vars
NumericSeries MA; ……
公式变量段
Begin
MA = AverageFC(Close, Length); …… End
9
公式脚本段
例1:Hello World
Sample1:
Begin FileAppend("c:\\tb\\sample1.txt","Hello World!"); End
数值型序列变量/参数(NumericSeries) 字符型序列变量/参数(StringSeries) 布尔型序列变量/参数(BoolSeries)
为了通过用户函数返回多个值,又增加了引用类型
数值型引用(NumericRef) 字符型引用(StringRef) 布尔型引用(BoolRef)
参数的声明和使用
For 语句 2
如果希望For语句从大到小进行循环,可以使用以下的 语法: For 循环变量 = 初始值 DownTo 结束值 { TradeBlazer公式语句; } For-DownTo让循环变量从结束值每次递减1直到等于结 束值,依次调用TradeBlazer公式语句执行,初始值必须 大于或等于结束值才有意义。
例4:For语句求和及均线
Sample4:
Params Numeric Length(10); Vars Numeric SumValue(0); Numeric MA; Numeric i; Begin
SumValue = 0; for i = 0 to Length - 1 { SumValue = SumValue + Close[i]; } MA = SumValue/Length; Commentary("SumValue="+text(SumValue)); Commentary("MA="+Text(MA)); End
----- 输出值的名称 ----- 输出的布尔值; ----- 输出值的定位点; ----- 输出值的颜色; ----从当前BAR回溯的 BAR数
举例:
PlotBool(―con",con,High); 在Bar的最高价位置输出布尔变量con的值,如果con为真, 则显示“笑脸”图标,否则显示为“哭脸”图标
7
历史回测和实时交易的区别
历史回测 Bar数据 公式运行 交易信号 是否发单 函数调用 确定不变 每根BAR一次 固定不变 否 部分函数无效 实时交易 实时更新 每个Tick一次 有可能变化 是 (受公式机制控制) 有效
8
TB公式的结构
TB的公式一般由三段组成。
Numeric Length(10); ……
4
序列数据
序 列 变 量 N
序 列 变 量
序 列Leabharlann Baidu变 量
序 列 变 量 …
序 列 变 量 …
序 列 变 量 …
序 列 变 量 …
序 列 变 量
…
序 列 变 量
…
序 列 变 量 2
序 列 变 量 1
序 列 变 量 0
5
N-1 …
非序列变量(简单变量)
非序列变量
6
TB公式运行机制
从左到右,从上到下
九种类型; 公式应用的参数一定要有初始值,而用户函数的参数可以没有默 认值;
参数的值在公式的脚本段中只能引用,不能修改;
变量
变量的主要用处在于它可以存放计算或比较的结果,以方 便在之后的脚本中直接引用运算的值,而无需重现计算过 程。 变量在使用前必须进行声明,声明方法如下:
Vars NumericSeries MA; Numeric Stopline(30);
例5:BarsSinceToday
Sample5:(求当天第一根Bar到现在的BAR数) Vars Numeric TodayBars; Begin TodayBars = 0; While ( CurrentBar > TodayBars and date[TodayBars] == date[TodayBars+1] ) { TodayBars = TodayBars + 1; } Commentary("TodayBars = " + text(TodayBars)); End
条件语句----IF Else语句
语法如下:
If (Condition) { TB公式语句1; } Else { TB公式语句2; }
如果TB公式语句是单条,您可以省略{},二条 或者二条以上的语句必须使用{}。
For 语句 1
For语句是一个循环语句,重复执行某项操作,直到循 环结束。语法如下: For 循环变量 = 初始值 To 结束值 { TradeBlazer公式语句; } For循环的执行是从循环变量从初始值到结束值,按照 步长为1递增,依次执行TradeBlazer公式语句,结束值必 须大于或等于初始值才有意义。
举例:
PlotNumeric(―MA‖,AverageFC(Close,10)); 输出均线指标值 PlotNumeric (―OpenToClose‖,open,close); 输出开盘价与收盘价的连线(线型选择柱状图)
28
技术指标输出函数(2)
PlotString – 在当前BAR输出一个字符串
Bar数据 Date 当前K线的日期 含义
Time Open
High Low Close Vol OpenInt CurrentBar BarStatus
当前K线的开始时间 当前K线的开盘价
当前K线的最高价 当前K线的最低价 当前K线的收盘价(最新价) 当前K线成交量 当前K线持仓量 当前K线的索引值(K线的编号,从0开始) 当前K线的状态值(0—第一根K线、2—最后即最新 一根K线、1—其他K线)
举例:
PlotString("CandleStick","阳线",Low,Red); 在Bar的最低价位置输出字符串“阳线”,并显示为红色
29
技术指标输出函数(3)
PlotBool – 在当前BAR输出一个布尔值
参数:String Name Bool bPlot Numeric Locator=0 Integer Color=-1 Integer BarsBack=0
BarsSinceToday的算法
Vars NumericSeries ReBars; Begin If(CurrentBar == 0 || Date != Date[1]) { ReBars = 0; }Else { ReBars = ReBars + 1; } Return ReBars;
End
变量的赋值(变量类型和表达式的类型要一致)
变量名称 = 表达式; 例如:MA = AverageFC(Close,10);
例3:使用参数和变量
Sample3:
Params String Filename("c:\\tb\\sample3.txt"); Vars Numeric change; Begin change = Close - Close[1]; FileAppend(Filename,"Date="+DateToString(Date) +" Time="+TimeToString(time) +" Close="+Text(Close) +" 涨跌:"+text(change)); End
参数:String Name String str Numeric Locator=0 Integer Color=-1 Integer BarsBack=0
----- 输出值的名称 ----- 输出的字符串; ----- 输出值的定位点; ----- 输出值的颜色; ----从当前BAR回溯的 BAR数
公式运行结果
大家都知道每 个Hello World! 都是怎么产生 的吗?
例2:输出BAR数据
Sample2:
Begin FileAppend(―c:\\tb\\sample2.txt","Date= "+DateToString(Date) +" Time= "+TimeToString(time) +" Close="+Text(Close) +" CurrentBar= "+Text(CurrentBar) +" Barstatus= "+Text(BarStatus)); End
技术指标输出函数(1)
PlotNumeric – 在当前BAR输出一个数值
参数:String Name Numeric Number Numeric Locator=0 Integer Color=-1 Integer BarsBack=0
----- 输出值的名称; ----- 输出的数值; ----- 输出值的定位点; ----- 输出值的颜色; ----从当前BAR回溯的 BAR数
Params
Numeric Length(10);
Begin PlotNumeric("MA",AverageFC(Close,Length)); End
数据类型
TB公式中有三种基本的数据类型
数值型(Numeric) 字符型(String) 布尔型(Bool)
为了对变量、参数进行回溯,又增加了序列类型
3
Bar数据的使用
Bar数据是TB公式运行的基础。 Bar数据是序列数据,可以回溯读取(图示)。 举例: 比较今天的最高价是否突破了昨天的最高价 表达式为:High > High[1] 比较今天的最高价是否突破了前两天的最高价 表达式为:High > High[1] and High>High[2] 或者:High > High[1] && High>High[2]
While循环
While语句在条件为真的时候重复执行某一项操作。即, 只要条件表达式的值为真(True)时,就重复执行某个动 作。直到行情信息改变以致条件为假 (False)时,循环 才结束。 语法如下: While (Condition) { TradeBlazer公式语句; } Continue 和 Break
参数在使用前必须进行声明,声明方法如下:
Params Numeric Length(10); String Filename("D:\\sample2.log"); bool OutputToFile(false);
公式应用和用户函数的参数略有不同:
公式应用的参数只支持三种基本类型,用户函数的参数支持全部
交易开拓者公式编写基础 (一)
蔡云华 深圳开拓者科技有限公司
1
内容概要
交易开拓者公式平台体系架构
TBL语言的基本语法和控制语句
系统函数和内建用户函数的使用
TB公式应用的编写
2
Bar数据(K线数据)
商品在所选时间周期下的所有K线样本数据,按照时间从先到 后的顺序排列而成的序列数据。每根K线的数据如下:
30
例6:单均线包络线指标
Sample6: Params Numeric Length(10); // 均线周期 Numeric FilterPercent(20); // 通道幅度比例(%%) Vars NumericSeries MA; NumericSeries UpperBand; NumericSeries LowerBand; Bool ConBuy(False); Bool ConSell(False); Begin MA = AverageFC(Close,Length); UpperBand = MA * ( 1 + FilterPercent / 10000 ); LowerBand = MA * ( 1 - FilterPercent / 10000 );
例3 运行结果
控制语句
条件语句(If-Else) if 语句 if - else 语句 if - Else if 语句 if - Else 嵌套 循环语句(For\While) For 循环变量 = 初始值 TO 结束值 For 循环变量 = 初始值 Downto 结束值 While 循环