量化投资经典 TB公式入门
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指标模板
Params ………………….. Vars Numeric line1; Numeric line2; ………………….. Begin line1 = GetLine1(…….); line2 = GetLine2(…….); …………………… PlotNumeric(“Line1”, line1 ); PlotNumeric(“Line2”, line2 ); ………………….. End 参考MA指标的模板写法
然而……
函数(2)
引用型参数 函数compare的内容
Params Numeric param1(0); Numeric param2(5); NumericRef samller; Begin if(param1 >= param2) { smaller = param2; return param1; }else { smaller = param1; return Length2; } End
PlotNumeric由输出的名字来区分是否为同一条线。
关于IF语句
If语句是一个条件语句,当特定的条件满足后执行 一部分操作。 语法如下: If (Condition) { TradeBlazer公式语句; } TradeBlazer公式语句是一些语句的组合,如果 TradeBlazer公式语句是单条,您可以省略{},二条 或者二条以上的语句必须使用{}。
函数(1)
GetBiger的内容 Return 语句
Params Numeric Length1(0); Numeric Length2(5); Begin if(Length1 >= Length2) { return Length1; }else { return Length2; } End
If-Else的嵌套
If-Else的嵌套是在If-Else的执行语句中包含新的条件语句,即一个条件被包含在另一个条件中。 If (Condition1) { If (Condition2) { TradeBlazer公式语句1; }Else { TradeBlazer公式语句2; } }Else { If (Condition3) { TradeBlazer公式语句3; }Else { TradeBlazer公式语句4; } }
最近N个BAR的最低值
Params numeric Length(5); Vars numeric smallest(999999);// 初始值很重要! numeric i; Begin if(CurrentBar < Length -1) { return InvalidNumeric; } for i=1 to Length-1 { if(low[i] <= smallest) { smallest = low[i]; } } return smallest; End
关于条件表达式
逻辑操作符 :AND(&&),OR(||),NOT(!) 表达式1 AND 表达式2 表达式1 OR 表达式2 NOT表达式1 注意:浮点数字的等于
详细介绍参见帮助文件-公式系统-操作符 注意:条件表达式括号后面不要加分号。
IF-Else
函数(2)
调用compare Params Numeric param1(0); Numeric param2(5); Vars Numeric biger; Numeric smaller; Begin biger = compare(param1,param2,smaller); PlotNumeric(“bigger”, biger ); PlotNumeric(“smaller”, smaller); End
If-Else语句是对指定条件进行判断,如果条件满足 执行If后的语句。否则执行Else后面的语句。 语法如下: If (Condition) { TradeBlazer公式语句1; }Else { TradeBlazer公式语句2; }
If-Else-If
Βιβλιοθήκη Baidu
公式执行顺序
公式执行顺序
TradeBlazer公式的HelloWorld!
www.tradeblazer.net/forum/thread-63-1-1.html Begin FileAppend("c:\\Formula.log","hello world"); End
公式的种类
指标 K线形态 特征走势 交易指令
一个新需求
用函数计算最近三根BAR的最低点 Begin if(low <= low[1] && low <=low[2]) { return low; } if(low[1] <= low && low[1] <=low[2]) { return low[1]; } if(low[2] <= low && low[2] <=low[1]) { return low[2]; } End
函数
公式环境的组织层次(1)
指标 K线形态 特征走势 交易指令
BAR数据
公式环境的组织层次(2)
指标 K线形态 特征走势 交易指令
函数
BAR数据
建立一个最简单的指标:画零线
Begin PlotNumeric(“Line1”,0); End Begin和End宣告公式正文的开始和结束,公 式语句应该放到Begin和End之间。 PlotNumeric表示输出一个数值型组成的数组。 技术指标属性的设置
没完没了的新需求
得到最低值与最低值的位置
没完没了的新需求
Params numericSeries numericRef Vars numericSeries numericSeries Begin if(CurrentBar == 0) { smallest = Price; I = 0; Position = i; return smallest; }else { smallest = smallest[1]; I = i[1]; } if(price <= smallest) { samllest = price; I = currentBar; } return smallest; End Price(1); Position; smallest(999999); i;
TB公式入门
交易开拓者公式基础
Bar数据:公式在进行计算时,都是建立在基本数据源 (Bar数据)之上,我们这里所谓的Bar数据,是指商品在 不同周期下形成的序列数据,在单独的每个Bar上面包 含开盘价、收盘价、最高价、最低价、成交量及时间。 期货等品种还有持仓量等数据。所有的Bar按照不同周 期组合,并按照时间从先到后进行排列,由此形成为序 列数据,整个序列称之为Bar数据。 公式如何执行:TradeBlazer公式在计算时按照Bar数据 的Bar数目,从第一个Bar到最后一个Bar,依次进行计 算,如果公式中出现了调用Bar数据函数的,则取出当 前Bar的相应值,进行运算。公式执行从上至下,Bar从 左到右执行。
再画一条线…
Begin PlotNumeric(“Line1”,5); End
参数
一根线 Params Numeric Length(0); Begin PlotNumeric(“Line1”,length); End N根线 Params Numeric Length1(0); Numeric Length2(5); Begin PlotNumeric(“Line1”,length1); PlotNumeric(“Line2”,length2); End
取较大值
Params Numeric Length1(0); Numeric Length2(5); Begin if(Length1 >= Length2) { PlotNumeric(“Line1”,length1); }else { PlotNumeric(“Line1”,length1); } End
If-Else-If是在If-Else的基础上进行扩展,支持条件的多重分支。 语法如下: If (Condition1) { TradeBlazer公式语句1; }Else If(Condition2) { TradeBlazer公式语句2; }Else { TradeBlazer公式语句3; } If-Else-If的语句可以根据需要一直扩展,在最后的Else之后再加 If(Condition)和新的执行代码即可。当然您也可以省略最后的Else分支,
一个新需求(另一种写法:冒泡)
Vars numeric smallest(999999); Begin if(low[2] < samllest) { smallest = low[2]; } if(low[1] < samllest) { smallest = low[1]; } if(low < samllest) { smallest = low; } return smallest; End // 初始值很重要!
End
公式的三段论
函数(1)
用函数使流程更加简洁 Params Numeric Length1(0); Numeric Length2(5); Vars Numeric biger; Begin biger = GetBiger(Length1,Length2); PlotNumeric(“Line1”, biger ); End
数据回溯
如何使用回溯表达? XXX[nOffset] nOffset是要回溯引用的Bar相对于当前Bar的 偏移值,该值必须大于等于0,当nOffset = 0 时,即为获取当前Bar的参数值。并且 nOffset不能大于当时的CurrentBar,这样会 导致数据访问越界。造成不可预知的计算结 果。 变量回溯,参数回溯,函数回溯(系统函数)
最近N个BAR的最低值(循环语句)
Params numeric Length(5); Vars numeric smallest(999999); // 初始值很重要! numeric i; Begin for i=1 to Length-1 { if(low[i] <= smallest) { smallest = low[i]; } } return smallest; End
函数(2)
假设要写这样一个指标:两个数字型参数,比较其大小,并 输出两条线
Params Numeric Length1(0); Numeric Length2(5); Vars Numeric biger; Numeric smaller; Begin biger = GetBiger(Length1,Length2); smaller = GetSmaller(Length1,Length2); PlotNumeric(“bigger”, biger ); PlotNumeric(“smaller”, smaller); End
回到指标
赋值语句 用变量使流程清晰
Params Numeric Length1(0); Numeric Length2(5); Vars Numeric biger; Begin if(Length1 >= Length2) { biger = Length1; }else { biger = Length2; } PlotNumeric(“Line1”, biger );
序列参数
Params numericSeries Price(1); numeric Length(5); Vars numeric smallest(999999); // 初始值很重要! numeric i; Begin if(CurrentBar < Length -1) { return InvalidNumeric; } for i=1 to Length-1 { if(Price[i] <= smallest) { smallest =Price[i]; } } return smallest; End