在云那方

首页 新随笔 联系 订阅 管理

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无效数据

 

posted on 2013-03-21 17:45  Rich.T  阅读(817)  评论(0编辑  收藏  举报