《{财务管理投资管理}量化投资经典公式入门》由会员分享,可在线阅读,更多相关《{财务管理投资管理}量化投资经典公式入门(54页珍藏版)》请在金锄头文库上搜索。
1、TB公式入门,Bar数据:公式在进行计算时,都是建立在基本数据源(Bar数据)之上,我们这里所谓的Bar数据,是指商品在不同周期下形成的序列数据,在单独的每个Bar上面包含开盘价、收盘价、最高价、最低价、成交量及时间。期货等品种还有持仓量等数据。所有的Bar按照不同周期组合,并按照时间从先到后进行排列,由此形成为序列数据,整个序列称之为Bar数据。 公式如何执行:TradeBlazer公式在计算时按照Bar数据的Bar数目,从第一个Bar到最后一个Bar,依次进行计算,如果公式中出现了调用Bar数据函数的,则取出当前Bar的相应值,进行运算。公式执行从上至下,Bar从左到右执行。,交易开拓者公
2、式基础,公式执行顺序,公式执行顺序,公式的种类,指标 K线形态 特征走势 交易指令 函数,公式环境的组织层次(1),BAR数据,指标,K线形态,特征走势,交易指令,公式环境的组织层次(2),BAR数据,指标,K线形态,特征走势,交易指令,函数,建立一个最简单的指标:画零线,Begin PlotNumeric(“Line1”,0); End Begin和End宣告公式正文的开始和结束,公式语句应该放到Begin和End之间。 PlotNumeric表示输出一个数值型组成的数组。 技术指标属性的设置,再画一条线,Begin PlotNumeric(“Line1”,5); End,参数,一根线 Pa
3、rams 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 P
4、lotNumeric(“Line1”,length1); End PlotNumeric由输出的名字来区分是否为同一条线。,关于IF语句,If语句是一个条件语句,当特定的条件满足后执行一部分操作。 语法如下: If (Condition) TradeBlazer公式语句; TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略,二条或者二条以上的语句必须使用。,关于条件表达式,逻辑操作符 :AND( Else TradeBlazer公式语句2; ,If-Else-If,If-Else-If是在If-Else的基础上进行扩展,支持条件的多重分支。 语
5、法如下: If (Condition1) TradeBlazer公式语句1; Else If(Condition2) TradeBlazer公式语句2; Else TradeBlazer公式语句3; If-Else-If的语句可以根据需要一直扩展,在最后的Else之后再加If(Condition)和新的执行代码即可。当然您也可以省略最后的Else分支,,If-Else的嵌套,If-Else的嵌套是在If-Else的执行语句中包含新的条件语句,即一个条件被包含在另一个条件中。 If (Condition1) If (Condition2) TradeBlazer公式语句1; Else Trade
6、Blazer公式语句2; Else If (Condition3) TradeBlazer公式语句3; Else TradeBlazer公式语句4; ,回到指标,赋值语句 用变量使流程清晰 Params Numeric Length1(0); Numeric Length2(5); Vars Numeric biger; Begin if(Length1 = Length2) biger = Length1; else biger = Length2; PlotNumeric(“Line1”, biger ); End,公式的三段论,函数(1),用函数使流程更加简洁 Params Numeri
7、c Length1(0); Numeric Length2(5); Vars Numeric biger; Begin biger = GetBiger(Length1,Length2); PlotNumeric(“Line1”, biger ); End,函数(1),GetBiger的内容 Return 语句 Params Numeric Length1(0); Numeric Length2(5); Begin if(Length1 = Length2) return Length1; else return Length2; End,指标模板,Params . Vars Numeric
8、line1; Numeric line2; . Begin line1 = GetLine1(.); line2 = GetLine2(.); PlotNumeric(“Line1”, line1 ); PlotNumeric(“Line2”, line2 ); . End 参考MA指标的模板写法,函数(2),假设要写这样一个指标:两个数字型参数,比较其大小,并输出两条线 Params Numeric Length1(0); Numeric Length2(5); Vars Numeric biger; Numeric smaller; Begin biger = GetBiger(Lengt
9、h1,Length2); smaller = GetSmaller(Length1,Length2); PlotNumeric(“bigger”, biger ); PlotNumeric(“smaller”, smaller); End 然而,函数(2),引用型参数 函数compare的内容 Params Numeric param1(0); Numeric param2(5); NumericRef samller; Begin if(param1 = param2) smaller = param2; return param1; else smaller = param1; retur
10、n Length2; End,函数(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,一个新需求,用函数计算最近三根BAR的最低点 Begin if(low = low1 End,一个新需求(另一种写法:冒泡),Vars numer
11、ic smallest(999999);/ 初始值很重要! Begin if(low2 samllest) smallest = low2; if(low1 samllest) smallest = low1; if(low samllest) smallest = low; return smallest; End,最近N个BAR的最低值(循环语句),Params numeric Length(5); Vars numeric smallest(999999);/ 初始值很重要! numeric i; Begin for i=1 to Length-1 if(lowi = smallest)
12、 smallest = lowi; return smallest; End,最近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(lowi = smallest) smallest = lowi; return smallest; End,数据回溯,如何使用回溯表达? XXXnOffset nOffset是要回溯引用的
13、Bar相对于当前Bar的偏移值,该值必须大于等于0,当nOffset = 0时,即为获取当前Bar的参数值。并且nOffset不能大于当时的CurrentBar,这样会导致数据访问越界。造成不可预知的计算结果。 变量回溯,参数回溯,函数回溯(系统函数),序列参数,Params numericSeriesPrice(1); numeric Length(5); Vars numeric smallest(999999);/ 初始值很重要! numeric i; Begin if(CurrentBar Length -1) return InvalidNumeric; for i=1 to Len
14、gth-1 if(Pricei = smallest) smallest =Pricei; return smallest; End,没完没了的新需求,得到最低值与最低值的位置,没完没了的新需求,Params numericSeriesPrice(1); numericRefPosition; Vars numericSeries smallest(999999); numericSeries i; Begin if(CurrentBar = 0) smallest = Price; I = 0; Position = i; return smallest; else smallest = s
15、mallest1; I = i1; if(price = smallest) samllest = price; I = currentBar; return smallest; End,关于常量和变量的定义,常量是用来代替一个数或字符串的名称 。在公式整个执行过程中不发生改变。 变量是一个存储值的地址,当变量被声明之后,就可以在脚本中使用变量,可以对其赋值,也可以在其他地方引用变量的值进行计算,要对变量进行操作,直接使用变量名称即可。 变量的主要用处在于它可以存放计算或比较的结果,以方便在之后的脚本中直接引用运算的值,而无需重现计算过程。,关于变量的类型,TradeBlazer公式支持有三种
16、基本数据类型:数值型(Numeric)、字符串(String)、布尔型(Bool)。 为了通过用户函数返回多个值,我们对三种数据类型进行了扩展,增加了引用数据类型。另外,为了对变量,参数进行回溯,我们增加了序列数据类型。因此,我们的数据类型共有九种,9种数据类型,Bool布尔型。 BoolRef布尔型引用。 BoolSeries和周期长度一致的Bool型序列值。 Numeric数值型。 NumericRef数值型引用。 NumericSeries和周期长度一致的Numeric型序列值。 String字符串。 StringRef字符串引用。 StringSeries和周期长度一致的String型序列值。,关于参数,参数是一个预先声明的地址,用来存放输入参数的值,在声明之后,您就可以在接下来的公式中使用该参数的名称来引用