1.Bar数据
在公式进行计算时,都是建立在基本数据源(Bar数据)之上,我们这里所谓的Bar数据,是指商品在不同周期下形成的序列数据,在单独的每个Bar上面包含开盘价、收盘价、最高价、最低价、成交量及时间。期货等品种还有持仓量等数据。
所有的Bar按照不同周期组合,并按照时间从先到后进行排列,由此形成为序列数据,整个序列称之为Bar数据。
函数名 |
简写 |
描述 |
Date |
D |
当前Bar的日期 |
Time |
T |
当前Bar的时间,是以当前BAR开始的时间来记录 |
Open |
O |
当前Bar的开盘价 |
High |
H |
当前Bar的最高价,Tick时为当时的委卖价 |
Low |
L |
当前Bar的最低价,Tick时为当时的委买价 |
Close |
C |
当前Bar的收盘价 |
Vol |
V |
当前Bar的成交量 |
OpenInt |
无 |
当前Bar的持仓量 |
CurrentBar |
无 |
当前Bar的索引值,从0开始计数 |
BarStatus |
无 |
当前Bar的状态值,0表示第一个Bar,1表示中间的普通Bar,2表示最后一个Bar |
Date:在当前公式应用商品在当前BAR的日期,格式为YYYYMMDD的整数,如: 当前Bar日期为2004-1-24,Date返回值为20040124。若是在周线或是月线上,返回的则是当周或是当月第一个交易日的日期。
Time: 当前公式应用商品在当前Bar的时间,格式为0.HHMMSSmmm的浮点数,如:当前时间为11:34:21.356,Time返回值为0.113421356。除日线及以上级别的周期,time返回的都是该Bar开始的时间。日线、周线、月线上的time均为0。
Close: 当前公式应用商品在当前Bar的收盘价。当一个Bar没有结束之前,close的值是一直以最新价来更新变动的,直至此Bar的结束。
2.行情数据
除了Bar数据之外,交易开拓者也提供行情数据并支持在TB公式中对行情数据的调用,行情数据是指当前商品最新的报价数据,行情数据在TB语言中是以“Q_”打头的一系列函数,该类数据与Bar无关,不能进行回溯。简单地说就是只能取到最新的数据,不能对历史中的行情数据进行回溯或是调用。
行情数据只在最后一个Bar是有意义的,其它Bar会返回无效值(部分行情函数,如:Q_UpperLimit, Q_PreSettlePrice等是当日内可以取有效值)。因此,在调用行情数据函数时,为了提高效率,最好按照以下方法:
if(BarStatus==2)
{
//调用行情函数
}
行情数据函数都按照以下格式命名Q_XXXX,比如Q_AvgPrice (当前公式应用商品的实时均价),Q_BidPrice(当前公式应用商品的最新买盘价格)。
在调用行情数据的时候,需要判断当前行情数据是否有效,系统提供函数QuoteDataExist来对有效性进行判断。如果行情数据已经准备好,返回True,否则,返回False。
3.属性数据
TradeBlazer公式还提供一组重要的属性数据,反映了图表当前该商品的一些基本信息,比如当前的数据周期,买卖盘个数、保证金设置等信息。在所有的Bar上面获得的市场属性数据都是一样的,属性数据的回溯没有意义。
示例:
Symbol当前公式应用商品的合约代码
Symbol当前公式应用商品的名称
MarginRatio当前公式应用商品的默认保证金比率
4.帐户数据
TradeBlazer公式可以支持实时帐户数据的调用,帐户数据是指当前交易帐户最新的帐户数据,该数据和Bar无关。
帐户数据只在最后Bar是有意义的,其他Bar会返回无效值。因此,在调用帐户数据函数时,为了提高效率,最好按照以下方法:
If(BarStatus==2)
{
//调用帐户数据函数
}
帐户数据函数都按照以下格式命名A_XXXXX,比如A_BuyPosition,A_FreeMargin,A_OpenOrderContractNo。在调用行情数据的时候,需要判断当前所应用的公式是否已经关联了交易帐户,只有在已关联交易帐户的情况下方可有效调用此类数据。系统提供函数A_AccountID来对有效性进行判断。如果帐户数据已经准备好,返回交易帐户ID,否则返回空的字符串。
其中帐户函数A_SenderOrder() 配合使用枚举函数可以做到对帐户直接发出指令,而不会在图表上做出任何的信号标识。
当公式每运行一次,只要在条件满足的情况下,A_SendOrder()都会执行一次,也就是都会发一次委托。这样一来,势必会因为重复的委托动作导致最后交易次数过多,与原意不符。所以,使用A_SendOrder()来进行交易的话,需要全局变量配合使用,从而达到理想的交易效果。
5.数据叠加
交易开拓者的超级图表支持商品数据叠加的显示,当叠加的图表调用各项公式时,可能有需要使用叠加的商品对应的基础数据,针对这样的需求,TradeBlazer公式提供了叠加数据的支持。这样的功能使得价差分析以及和套利交易的实现成为可能。
假定,我们新建一个超级图表模块,其主数据对应的商品为:cu1109,在此基础上,我们叠加了cu1201和cu1205。(叠加商品的操作是在文件菜单的“插入”里选择“插入商品”或是在超级图表上右键菜单里选择“插入商品”)。此时,根据叠加操作的先后顺序,cu1109为Data0,cu1201为Data1,cu1203为Data2,在TradeBlazer公式中,我们可以通过Data1.Close(),Data2.Vol()类似方法调用叠加Bar数据,叠加Bar数据的函数和Bar数据一样,只是需要在调用的时候加上数据源。
我们也可以使用Data0.Open()来调用Bar数据,默认情况下,可以省略对主数据源的指定,为了方便,一般直接使用Open()来代替Data0.Open()。
现有价差计算的公式如下:
Begin
PlotNumeric("Spread",Data0.Close - Data1.Close);
End
6.公式的报警
TradeBlazer公式提供报警功能,您可以在公式应用中通过Alert函数来实现报警。
您可以在用户函数或公式应用中按照以下方式来编写自己的报警。例如:
Vars Bool Condition1;
Begin
Condition1 = ...... // 您设定的条件表达式;
If(AlertEnabled AND Condition1)
{
Alert("报警信息...");
}
End
当公式编译保存成功之后,您可以将其应用在超级图表中,通过报警属性页启动报警。当条件满足之后,将会产生报警信息,并发送到消息中心。
7.常用函数
关键字 |
说明 |
PlotBool |
输出布尔型值 |
PlotNumeric |
输出数值型值 |
PlostString |
输出字符串值 |
Unplot |
取消指定位置的输出 |
Alert |
报警输出 |
FileAppend |
在指定文件中追加一行字符串,返回值为布尔型。执行成功返回True,执行失败返回False。 语法:Bool FileAppend(String strPath,String strText); 参数: strPath 指定文件的路径,请使用全路径表示,并使用 \\ 做路径分割符,否则会执行失败 , strText 输出的字符串内容; |
Commentary |
在超级图表当前Bar添加一行注释信息。该函数无返回值,作为系统调试的辅助工具,您可以双击超较级图表出现十字光标后,在工具栏选择“显示提示框”,这样便可以看到任意Bar上的注释信息了。 |
Buy |
多头建仓操作,对当前合约发出买入开仓的指令,如果图表讯号显示当前持有空仓,则会先平掉空仓,再开多仓; |
Sell |
多头平仓操作,对当前合约发出平多仓的指令,当图表信号显示有多头持仓时,方可执行此指令; |
SellShort |
空头建仓操作,对当前合约发出卖出开仓的指令,如果图表讯号显示当前持有多仓,则会先平掉多仓,再开空仓; |
BuyToCover |
空头平仓操作,对当前合约发出平空仓的指令,当图表信号显示有空头持仓时,方可执行此指令; |
示例:
if(condition1 && marketposition!=1) //条件满足且没有持多仓情况下开多
{
buy();
}
else if(condition2 && marketposition!=-1) //条件满足且没有持空仓时开空
{
sellshort();
}
PlotNumeric-----在当前Bar输出一个数值;
语法:PlotNumeric(String Name,Numeric Number,Numeric Locator=0,Integer Color=-1,Integer BarsBack=0)
Name 输出值的名称的字符串,可以为中、英文、数字或是其它字符;
Number 输出的数值;
Locator 输出值的定位点,默认时输出单点,否则输出连接两个值线段,用法请看例2;
Color 输出值的显示颜色,默认表示使用属性设置框中的颜色;
BarsBack 从当前Bar向前回溯的Bar数,默认值为当前Bar。
例1:PlotNumeric ("RSI",RSIValue);输出RSI的值。
例2:PlotNumeric ("OpenToClose",open,close);输出开盘价与收盘价的连线。(需要在公式属性的输出线形选择柱状图)
PlotBool-----在当前Bar输出一个布尔值。
语法:PlotBool(String Name,Bool bPlot,Numeric Locator=0,Integer Color=-1,Integer BarsBack=0)
Name 输出值的名称,不区分大小写;bPlot 输出的布尔值;
Locator 输出值的定位点;
Color 输出值的显示颜色,默认表示使用属性设置框中的颜色
BarsBack 从当前Bar向前回溯的Bar数,默认值为当前Bar。
示例:PlotBool ("con",con,high); 在bar的最高价位置输出条件con的布尔值。
PlotString-----在当前Bar输出一个字符串。
语法:PlotString(String Name,String str,Numeric Locator=0,Integer Color=-1,Integer BarsBack=0)
Name 输出值的名称,不区分大小写;
str 输出的字符串;
Locator 输出值的定位点;
Color 输出值的显示颜色,默认表示使用属性设置框中的颜色;
BarsBack 从当前Bar向前回溯的Bar数,默认值为当前Bar。
示例:PlotString ("Bear Market","Bear Bear",high,blue); 在bar的最高价位置输出一个蓝色的字符串Bear Bear。
8.全局变量
目前系统在单个公式应用中可提供最多500个全局变量,全局变量的索引值从0开始计数到499,不能大于500。
全局变量的初始值为无效值,与普通变量不同,其值不会因为当前Bar的变化而变化。只有在对全局变量进行赋值之后,其值才会被改变以及保存。
全局变量附着在超级图表上,一旦关掉超级图表之后,所有保存的值将会部被删除。在图表上进行数据刷新的动作,也会导致全局变量的值跟随刷新的计算而重新赋值。
用户自行通过SetGlobalVar()进行保存以及GetGlobalVar()来获取数据的操作。
例如:
SetGlobalVar(1,myprice); 将第2个全局变量设置为自定义的变量”myprice”。
Val = GetGlobalVar(0); 将第一个全局变量值取出来赋值给Val。
9.杂项
InvalidString 无效字符串,相当于null
InvalidNumeric无效数据