您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 制造加工工艺 > TB编程基础知识student
TB编程基础知识刘海燕•Bar数据:公式在进行计算时,都是建立在基本数据源(Bar数据)之上。TB基础知识•Bar数据:公式在进行计算时,都是建立在基本数据源(Bar数据)之上。TB基础知识Bar周期T1:一个Tick数据,这里是0.5秒,是最小的单位,每个Tick数据到来,系统会重新计算策略。S10:10秒;Ns:在秒的级别自定义;M5:5分钟;H11小時;D1:一天等。数据源•Data0-Data49个数据源的Bar数据•Data0:原图表bar数据•Data1:第二个数据源•Data2:第二个数据源•……•调用方法:Data0.A_SendOrder(…)\Data1.Close等等公式执行顺序公式执行从上至下,Bar从左到右执行。TB公式能做什么?•技术指标图表模块中输出为线条、柱状图、点等表现形式(PlotNumeric、PlotBool、PlotString)•K线形态主要着重于反映一段K线的特定型态,并通过不同的技术指标的方式输出到图表(PlotBar)•特征走势主要着重于反映整个价格曲线的趋势、变化特征,并通过特定的表达方式输出到图表(通过PlotBar返回数据)•交易指令交易指令是包含买、卖、平仓,头寸,仓位控制的并执行交易指令的一类公式(buy\sell\sellshort\buytocover,A_SendOrder)公式环境的组织层次(1)BAR数据指标K线形态特征走势交易指令公式环境的组织层次(2)BAR数据指标K线形态特征走势交易指令用户函数系统函数分类数学函数Abs字符串函数Text颜色函数时间函数Time、CurrentTime数据函数barcount、high属性函数BarType、MinMove最小变动量行情函数Q函数帐户函数A函数枚举函数Enum_Buy交易函数EntryPrice、EntryPrice其他函数•PlotNumeric在当前Bar输出一个数值。NumericPlotNumeric(StringName,NumericNumber,IntegerColor=-1,IntegerBarsBack=0)•PlotString在当前Bar输出一个字符串。StringPlotString(StringName,Stringstr,IntegerColor=-1,IntegerBarsBack=0)•PlotBar在当前Bar输出两个值,用于在图表中当前Bar上画出连接两个值的线条。PlotBar(StringName,NumericValue1,NumericValue2,IntegerColor=-1,IntegerBarsBack=0)•PlotBool在当前Bar输出一个布尔值。BoolPlotBool(StringName,BoolbPlot,IntegerColor=-1,IntegerBarsBack=0)尝试一个简单的技术指标PlotBoolPlotBool注意:通过索引查找,我们注意到:NumericPlotNumeric(StringName,NumericNumber,NumericLocator=0,IntegerColor=-1,IntegerBarsBack=0)有5个参数,一般来讲前两个参数是不可以省略的,这些参数其实是有先后次序的,如:新版本中写:PlotNumeric(“OpenToClose”,open,red);是错误的,但是它在老版本中是正确的。因为这里red前边有Locator的参数,所以指定Locator再说。在Red后边的BarsBack就可以省略。PlotNumeric(OpenToClose,open,0,red);PlotBool火车轨的实现公式结构9种数据类型•Bool布尔型。•BoolRef布尔型引用。•BoolSeries和周期长度一致的Bool型序列值。•Numeric数值型。•NumericRef数值型引用。•NumericSeries和周期长度一致的Numeric型序列值。•String字符串。•StringRef字符串引用。•StringSeries和周期长度一致的String型序列值。参数、变量的声明•声明参数、变量Params(Vars)类型变量名1(初值);类型变量名2(初值);类型变量名3(初值);•变量声明例子:VarsNumericSeriesMyVal1(0);//定义数值型序列变量MyVal1,默认值为0;NumericMyVal2(0);//定义数值型变量MyVal2,默认值为0;BoolMyVal3(False);//定义布尔型变量MyVal3,默认值为False;StringMyVal4(Test);//定义字符串变量MyVal4,默认值为Test。•系统自动赋值规则:数值型变量的默认值为0;布尔型变量的默认值为False;字符串的默认值为空字符串。编写函数•一个函数由三部分组成,参数定义,变量定义,脚本正文。•语法如下:Params参数定义语句;Vars变量定义语句;Begin脚本正文;End序列变量•通过“变量名[nOffset]来回溯以前的变量值•Ref(close,1)等于Close[1]Close[1]Close[5]序列变量一个序列公式-计算天数编写用户函数用户函数名:myfun:myfun引用参数•用户函数可以通过引用参数返回函数的计算结果。返回多个计算结果。引用参数交易指令•普通交易指令Buy开多、Sell平多、SellShort开空、BuyToCover平空•A函数A_SendOrder发委托指令•二者区别1.普通交易指令在图表上出信号,与图表关联,不与账户关联.2.A_sendorder与账户关联,交易不在图表上产生信号,只对实时行情操作.因为可以同时交易多个账户,这时候就用到A_sendorder.A_SendOrder根据参数的不同,可以下即时单和止损获利单,即时单直接提交给交易所的,不在TB服务器;止损获利单在服务器(ctp帐户不支持此功能),仅限当天有效,如果当天没有成交,柜台会清掉该委托。交易指令普通交易指令1.Buy:平掉所有空头持仓,开多头仓位。2.Sell:平掉指定的多头持仓。3.SellShort:平掉所有多头持仓,开空头仓位。4.BuyToCover:平掉指定的空头持仓。BoolBuy(NumericShare=0,NumericPrice=0,BoolDelay=False)Share买入数量,为整型值,默认为使用系统设置参数;Price买入价格,为浮点数,默认=0时为使用现价(非最后Bar为Close);Delay买入动作是否延迟,默认为当前Bar发送委托,当Delay=True,在下一个Bar执行。普通交易指令信号空头开仓空头平仓多头开仓多头平仓信号消失•基于前面的描述,如果用Close变化的数据来计算开平仓条件,就可能出现信号消失。•为了解决信号消失,可以使用前面所讲的Delay,或者使用另外一种方式,特别是我们经常用的突破系统。•使用High,Low,Open这样能够保持住的价格来进行条件判断。是价格往上的突破形成的交易操作用High来判断。是价格下上的突破形成的交易操作用Low来判断。其他不确定方向的情况最好用Open来判断。A函数和Q函数•Q函数,指以Q_开头的系统函数,主要是获取实时行情信息。•A函数,指以A_开头的系统函数,获取自动交易关联帐户的帐户信息,只有在启动自动交易的情况下才能取值。•Q函数和A函数都是反映最新的实时状态,不能取历史上的值,所以只能在当前有效,在公式中表现为只能在最后Bar上取值。全局变量•每个超级图表有50个全局变量0~49•BoolSetGlobalVar(IntegernIndex,NumericfVal)•NumericGetGlobalVar(IntegernIndex)•经常用于配合A_SendOrder使用,控制发单。全局变量:例子•If(A_SellPosition==0&&GetGlobalVar(0)==0&&cond1){A_SendOrder(Enum_Sell,Enum_Entry,1,Q_BidPrice());SetGlobalVar(0,1);}Elseif(…..){A_SendOrder(Enum_Sell,Enum_Exit,1,Q_AskPrice());SetGlobalVar(0,0);}全局变量:例子下面介绍几个常用函数以及语法•CrossOver、CrossUnder•函数原型:•BoolCrossOver(NumericSeriesPrice1,NumericSeriesPrice2)•CrossOver(Close,AvgPrice);上穿、下穿函数Cross的应用•延迟有两种,1.判断前一个条件,在当前bar开仓cond1=ma1[1];cond2=ma2[1];if(crossover(cond1,cond2))buy(1,open);2.判断当前条件,在下一个bar开仓if(crossover(ma1,ma2))buy(1,nextopen,true);Cross防止信号消失•使用High,Low,Open这样能够保持住的价格来进行条件判断。是价格往上的突破形成的交易操作用High来判断。是价格下上的突破形成的交易操作用Low来判断。其他不确定方向的情况最好用Open来判断。•CrossOver(high,AvgPrice);关于调试语句•Commentry•在超级图表当前Bar添加一行注释信息。•例子:Commentary(开仓价格:+Text(myEntryPrice))。•FileAppend•在指定文件中追加一行字符串。•FileAppend(C:\\Formula.txt,Close=+Text(Close));•Alert(StringAlertInfo)产生一个报警动作。控制语句•条件语句(If-Else)•循环语句(For\While)关系运算符操作符说明大于小于=大于等于=小于等于==等于!=不等于不等于If(12)语句1;If(1!=2)语句1;相当于:If(12)语句1;If(左表达式关系运算符右表达式)算术运算符操作符说明+加-减*乘/除%求模()括号If(10%5==0)我是语句1;If(21%5==1)我是语句2;关于条件表达式•逻辑操作符:AND(&&),OR(||),NOT(!)1.表达式1AND表达式2(表达式1&&表达式2)2.表达式1OR表达式2(表达式1||表达式2)3.NOT表达式1(!表达式1)•注意:条件表达式括号后面不要加分号。IF语句•语法如下:If(Condition){TradeBlazer公式语句;}•如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。IF-Else•语法如下:•If(Condition)•{•TradeBlazer公式语句1;•}Else•{•TradeBlazer公式语句2;•}If-Else-If•语法如下:If(Condition1){TradeBlazer公式语句1;}ElseIf(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{TradeBlazer公式语句2;}}Else{If(Condition3){TradeBlazer公式语句3;}Else{TradeBlazer公式语句4;}}If-Else例子•If(OpenHigh[1]){If(
本文标题:TB编程基础知识student
链接地址:https://www.777doc.com/doc-2862080 .html