龙听期货论坛's Archiver

龙听 发表于 2017-11-2 12:48

各类数据(1图)

Bar数据[p=30, 2, left]在介绍Bar数据 之前,首先,我们需要讨论一下TradeBlazer公式的计算方法,针对上面介绍的各种公式类型,包含用户函数,技术分析,交易指令等,在公式进行计算 时,都是建立在基本数据源(Bar数据)之上,我们这里所谓的Bar数据,是指商品在不同周期下形成的序列数据,在单独的每个Bar上面包含开盘价、收盘 价、最高价、最低价、成交量及时间。期货等品种还有持仓量等数据。[/p][p=30, 2, left]所有的Bar按照不同周期组合,并按照时间从先到后进行排列,由此形成为序列数据,整个序列称之为Bar数据。[/p]
[b]以下列出所有的Bar数据系统函数:[/b][table=98%]
[tr][td=1,1,80][b]函数名[/b][/td][td=1,1,80][b]简写[/b][/td][td][b]描述[/b][/td][/tr]
[tr][td=1,1,80][b]Date[/b][/td][td=1,1,80][b]D[/b][/td][td]当前Bar的日期。[/td][/tr]
[tr][td=1,1,80][b]Time[/b][/td][td=1,1,80][b]T[/b][/td][td]当前Bar的时间。[/td][/tr]
[tr][td=1,1,80][b]Open[/b][/td][td=1,1,80][b]O[/b][/td][td]当前Bar的开盘价。[/td][/tr]
[tr][td=1,1,80][b]High[/b][/td][td=1,1,80][b]H[/b][/td][td]当前Bar的最高价。[/td][/tr]
[tr][td=1,1,80][b]Low[/b][/td][td=1,1,80][b]L[/b][/td][td]当前Bar的最低价。[/td][/tr]
[tr][td=1,1,80][b]Close[/b][/td][td=1,1,80][b]C[/b][/td][td]当前Bar的收盘价。[/td][/tr]
[tr][td=1,1,80][b]Vol[/b][/td][td=1,1,80][b]V[/b][/td][td]当前Bar的成交量。[/td][/tr]
[tr][td=1,1,80][b]OpenInt[/b][/td][td=1,1,80][b]无[/b][/td][td]当前Bar的持仓量。[/td][/tr]
[tr][td=1,1,80][b]CurrentBar[/b][/td][td=1,1,80][b]无[/b][/td][td]当前Bar的索引值,从0开始计数。[/td][/tr]
[tr][td=1,1,80][b]BarStatus[/b][/td][td=1,1,80][b]无[/b][/td][td]当前Bar的状态值,0表示为第一个Bar,1表示为中间的普通Bar,2表示最后一个Bar。[/td][/tr]
[/table]计算方法[p=30, 2, left]TradeBlazer公式在计算时按照Bar数据的Bar数目,从第一个Bar到最后一个Bar,依次进行计算,如果公式中出现了调用Bar数据函数的,则取出当前Bar的相应值,进行运算。如下图箭头所示,公式执行从上至下,Bar从左到右执行。[/p]
[align=center][font=“微软雅黑”, Arial, Helvetica, sans-serif][size=18px][img=100,0]http://imga.tb18.net/article/20120414/1333673873.gif[/img][/size][/font][/align][p=30, 2, left]例如,现在有如下语句需要执行,Bar数据如下表所示:[/p]Value1 = Close - Open;        [table=98%]
[tr][td=1,1,60][b]CurrentBar[/b][/td][td=1,1,60][b]Date[/b][/td][td=1,1,60][b]Time[/b][/td][td=1,1,60][b]Open[/b][/td][td=1,1,60][b]High[/b][/td][td=1,1,60][b]Low[/b][/td][td=1,1,60][b]Close[/b][/td][td=1,1,60][b]Vol[/b][/td][td=1,1,60][b]Value1[/b][/td][/tr]
[tr][td=1,1,60][b]0[/b][/td][td=1,1,60][b]2005/04/04[/b][/td][td=1,1,60][b]15:00[/b][/td][td=1,1,60][b]2970[/b][/td][td=1,1,60][b]2979[/b][/td][td=1,1,60][b]2951[/b][/td][td=1,1,60][b]2974[/b][/td][td=1,1,60][b]18[/b][/td][td=1,1,60][b]4[/b][/td][/tr]
[tr][td=1,1,60][b]1[/b][/td][td=1,1,60][b]2005/04/05[/b][/td][td=1,1,60][b]15:00[/b][/td][td=1,1,60][b]2960[/b][/td][td=1,1,60][b]2960[/b][/td][td=1,1,60][b]2946[/b][/td][td=1,1,60][b]2960[/b][/td][td=1,1,60][b]14[/b][/td][td=1,1,60][b]0[/b][/td][/tr]
[tr][td=1,1,60][b]2[/b][/td][td=1,1,60][b]2005/04/06[/b][/td][td=1,1,60][b]15:00[/b][/td][td=1,1,60][b]2951[/b][/td][td=1,1,60][b]2980[/b][/td][td=1,1,60][b]2951[/b][/td][td=1,1,60][b]2963[/b][/td][td=1,1,60][b]30[/b][/td][td=1,1,60][b]12[/b][/td][/tr]
[tr][td=1,1,60][b]3[/b][/td][td=1,1,60][b]2005/04/07[/b][/td][td=1,1,60][b]15:00[/b][/td][td=1,1,60][b]3048[/b][/td][td=1,1,60][b]3048[/b][/td][td=1,1,60][b]2968[/b][/td][td=1,1,60][b]2995[/b][/td][td=1,1,60][b]120[/b][/td][td=1,1,60][b]-57[/b][/td][/tr]
[tr][td=1,1,60][b]4[/b][/td][td=1,1,60][b]2005/04/08[/b][/td][td=1,1,60][b]15:00[/b][/td][td=1,1,60][b]2985[/b][/td][td=1,1,60][b]2987[/b][/td][td=1,1,60][b]2985[/b][/td][td=1,1,60][b]2987[/b][/td][td=1,1,60][b]10[/b][/td][td=1,1,60][b]2[/b][/td][/tr]
[tr][td=1,1,60][b]...[/b][/td][td=1,1,60][b]...[/b][/td][td=1,1,60][b]...[/b][/td][td=1,1,60][b]...[/b][/td][td=1,1,60][b]...[/b][/td][td=1,1,60][b]...[/b][/td][td=1,1,60][b]...[/b][/td][td=1,1,60][b]...[/b][/td][td=1,1,60][b]...[/b][/td][/tr]
[/table]
[p=30, 2, left]如上表所示,从CurrentBar = 0 开始,依次计算每个Bar进行计算;[/p][p=30, 2, left]在公式的编写中,经常会遇到当前Bar的数据和上一个Bar,上N个 Bar数据进行比较,计算的情况,针对这种情况,TradeBlazer公式提供了一种处理机制:回溯。即对数据的向前引用,比如,获取上一个Bar的收 盘价:Close[1],获取10天前的成交量:Vol[10]。以下提供一个简单的例子来说明如何进行回溯处理。[/p][p=30, 2, left]假定有如下语句:[/p]If (Close > Close[1]) {    Buy(1,Close);}[p=30, 2, left]以上公式执行一个简单的操作,当前Bar的收盘价大于上一个Bar的收盘价,即执行按照当前收盘价买入1手的动作。根据上表的数据,公式将在CurrentBar为2和3的时候调用Buy指令。[/p][p=30, 2, left]如果您足够仔细的话,您会发现:对于上面的一段公式的执行,有一个小小 的问题,当第一次计算公式时,即CurrentBar = 0时,这个时候需要获取上一个Bar的数据,但是当前Bar已经是第一个Bar,这个时候就存在着问题,如何来获取此时的Close[1] 呢,TradeBlazer公式将默认Close[1]为无效值,即系统函数中的InvalidNumeric,Close > Close[1]的表达式计算结果是一个Bool值,其结果也是一个无效值,对于Bool值,我们将False作为其无效值。因此,第一个Bar计算 时,Buy指令不会被执行。[/p][p=30, 2, left]对于技术分析这类公式来说,假定Bar数据的总数共有100,相同的代码将从CurrentBar = 0到CurrentBar = 99 共执行100遍,分别输出公式中的结果值。[/p][font=“微软雅黑”, Arial, Helvetica, sans-serif][size=18px][b]注意:[/b]在执行TradeBlazer公式时,可能出现数据不存在的情况,可通过系统函数HistoryDataExist进行判断,如果该函数返回True,即为Bar数据有效。[/size][/font]
叠加数据[p=30, 2, left]交易开拓者的超级图表支持商品叠加的显示,当叠加的图表调用各项公式时,可能有需要使用叠加的商品对应的基础数据,针对这样的需求,TradeBlazer公式提供了叠加数据的支持。[/p][p=30, 2, left]假定,我们新建一个超级图表模块,其主数据对应的商品 为:cu0503,在此基础上,我们叠加了cu0504和cu0505。此时,根据叠加操作的先后顺序,cu0503为Data0,cu0504为 Data1,cu0505为Data2,在TradeBlazer公式中,我们可以通过Data1.Close(),Data2.Vol()类似方法调用 叠加Bar数据,叠加Bar数据的函数和Bar数据一样,只是需要在调用的时候加上数据源。[/p][p=30, 2, left]我们也可以使用Data0.Open()来调用Bar数据,默认情况下,可以省略对主数据源的指定,为了方便,一般直接使用Open()来代替Data0.Open()。[/p]行情数据[p=30, 2, left]除了Bar数据之外,TradeBlazer公式还可以支持实时行情数据的调用,行情数据是指当前商品最新的报价数据,该数据和Bar无关,行情数据的回溯没有意义。[/p][p=30, 2, left]行情数据只在最后Bar是有意义的,其他Bar会返回无效值。因此,在调用行情数据函数时,为了提高效率,最好按照以下方法:[/p]If(BarStatus()==2){    //调用行情数据函数}[p=30, 2, left]行情数据函数都按照以下格式命名Q_XXXXX,比如 Q_Close,Q_BidPrice。在调用行情数据的时候,需要判断当前行情数据是否有效,系统提供函数QuoteDataExist来对有效性进行 判断。如果行情数据已经准备好,返回True,否则,返回False。[/p]属性数据[p=30, 2, left]除了以上的各项数据之外,TradeBlazer公式还提供一组重要的属性数据,反映了该商品的一些基本信息,比如当前数据周期,买卖盘个数、保证金设置等信息。在所有的Bar上面获取的市场属性数据都是一样的,属性数据的回溯没有意义。[/p][p=30, 2, left]关于属性数据的详细说明参见帮助文件附录。[/p]

页: [1]