交易开拓者(TradeBlazer)公式详细介绍
概述
本章节内容是TradeBlazer公式的全面参考手册,详细介绍了TradeBlazer公式的结构、语法、特点、使用方法及功能等。
通过阅读该参考手册,您能够了解TradeBlazer公式的基本语法、操作符、表达式及控制语句等,通过手册提供的各种示例程序,掌握各种TradeBlazer公式的编写要领,最终达到能够熟练将自己的思想转化为TradeBlazer公式,并在交易开拓者中应用。
什么是TradeBlazer公式?
TradeBlazer公式是一种专为分析金融数据-时间序列而设计的高级语言,它提供直接、强大的框架将交易思想转化为用户函数、用户字段、技术分析,交易指令等计算机能够识别的代码。
TradeBlazer公式是一门语法简单但是功能强大的语言,它能帮助您创建自己的交易和技术分析工具。通过组合普通的交易指令和简单的语句,TradeBlazer公式使您能够很容易并且直接的用简单语句表达自己的交易规则和行为。
交易开拓者能够读取您开发的TradeBlazer公式,在历史价格数据基础上进行评估,并能自动执行特定的交易动作,将您的交易思想转化为实际的交易操作。
TradeBlazer公式能做什么?
通过TradeBlazer公式,您能够创建自己的交易指令、技术指标、K线型态、特征走势、用户函数以及用户字段。您也可以拷贝,修改并使用系统内置几百个函数、字段、技术分析和交易指令。 TradeBlazer公式包含的公式类型如下:
? 用户函数:用户函数是能够通过函数名称进行引用的指令集,它执行一系列操作并返回一个值。
您可以在其他任何公式中使用用户函数进行计算;
? 用户字段:用户字段是TradeBlazer公式为交易开拓者报价类窗体提供的一项数据输出公式,通
过用户字段执行一系列语言指令,给报价窗体返回一个特定的显示值;
? 技术指标:技术指标是基于基础数据,通过一系列的数学运算,在每个Bar返回相应的结果值
的一类公式,这些值在图表模块中输出为线条、柱状图、点等表现形式;
? K线型态:K线型态是类似于技术指标的一类公式,它主要着重于反映一段K线的特定型态,并
通过不同的技术指标的方式输出到图表;
? 特征走势:特征走势是类似于技术指标的一类公式,它主要着重于反映整个价格曲线的趋势、
变化特征,并通过特定的表达方式输出到图表;
? 交易指令:交易指令是包含买、卖、平仓,头寸,仓位控制的并执行交易指令的一类公式,它
主要帮助您将您的交易思想转化为计算机的操作。
通过调用TradeBlazer公式,您可以在交易开拓者中进行技术分析、交易策略优化测试、公式报警、自动交易等操作。
各类数据
Bar数据
在介绍Bar数据之前,首先,我们需要讨论一下TradeBlazer公式的计算方法,针对上面介绍的各种公式类型,包含用户函数,技术分析,交易指令等,在公式进行计算时,都是建立在基本数据源(Bar数据)之上,我们这里所谓的Bar数据,是指商品在不同周期下形成的序列数据,在单独的每个Bar上面包含开盘价、收盘价、最高价、最低价、成交量及时间。期货等品种还有持仓量等数据。
所有的Bar按照不同周期组合,并按照时间从先到后进行排列,由此形成为序列数据,整个序列称之为Bar数据。
以下列出所有的Bar数据系统函数:
函数名 Date Time Open High Low Close Vol OpenInt CurrentBar BarStatus 简写 D T O H L C V 无 无 无 当前Bar的日期。 当前Bar的时间。 当前Bar的开盘价。 当前Bar的最高价。 当前Bar的最低价。 当前Bar的收盘价。 当前Bar的成交量。 当前Bar的持仓量。 当前Bar的索引值,从0开始计数。 当前Bar的状态值,0表示为第一个Bar,1表示为中间的普通Bar,2表示最后一个Bar。 描述 计算方法
TradeBlazer公式在计算时按照Bar数据的Bar数目,从第一个Bar到最后一个Bar,依次进行计算,如果公式中出现了调用Bar数据函数的,则取出当前Bar的相应值,进行运算。如下图箭头所示,公式执行从上至下,Bar从左到右执行。
例如,现在有如下语句需要执行,Bar数据如下表所示: Value1 = Close - Open; CurrentBar 0 1 2 3 4 ... 如上表所示,从CurrentBar = 0 开始,依次计算每个Bar进行计算;
在公式的编写中,经常会遇到当前Bar的数据和上一个Bar,上N个Bar数据进行比较,计算的情况,针对这种情况,TradeBlazer公式提供了一种处理机制:回溯。即对数据的向前引用,比如,获取上一个Bar的收盘价:Close[1],获取10天前的成交量:Vol[10]。以下提供一个简单的例子来说明如何进行回溯处理。 假定有如下语句:
If (Close > Close[1]) { Buy(1,Close); } Date 2005/04/04 2005/04/05 2005/04/06 2005/04/07 2005/04/08 ... Time 15:00 15:00 15:00 15:00 15:00 ... Open 2970 2960 2951 3048 2985 ... High 2979 2960 2980 3048 2987 ... Low 2951 2946 2951 2968 2985 ... Close 2974 2960 2963 2995 2987 ... Vol 18 14 30 120 10 ... Value1 4 0 12 -57 2 ... 以上公式执行一个简单的操作,当前Bar的收盘价大于上一个Bar的收盘价,即执行按照当前收盘价买入1手的动作。根据上表的数据,公式将在CurrentBar为2和3的时候调用Buy指令。
如果您足够仔细的话,您会发现:对于上面的一段公式的执行,有一个小小的问题,当第一次计算公式时,即CurrentBar = 0时,这个时候需要获取上一个Bar的数据,但是当前Bar已经是第一个Bar,这个时候就存在着问题,如何来获取此时的Close[1]呢,TradeBlazer公式将默认Close[1]为无效值,即系统函数中的InvalidNumeric,Close > Close[1]的表达式计算结果是一个Bool值,其结果也是一个无效值,对于Bool值,我们将False作为其无效值。因此,第一个Bar计算时,Buy指令不会被执行。
对于技术分析这类公式来说,假定Bar数据的总数共有100,相同的代码将从CurrentBar = 0到CurrentBar = 99 共执行100遍,分别输出公式中的结果值。
注意:在执行TradeBlazer公式时,可能出现数据不存在的情况,可通过系统函数HistoryDataExist进行判断,如果该函数返回True,即为Bar数据有效。
叠加数据
交易开拓者的超级图表支持商品叠加的显示,当叠加的图表调用各项公式时,可能有需要使用叠加的商品对应的基础数据,针对这样的需求,TradeBlazer公式提供了叠加数据的支持。
假定,我们新建一个超级图表模块,其主数据对应的商品为:cu0503,在此基础上,我们叠加了cu0504和cu0505。此时,根据叠加操作的先后顺序,cu0503为Data0,cu0504为Data1,cu0505为Data2,在TradeBlazer公式中,我们可以通过Data1.Close(),Data2.Vol()类似方法调用叠加Bar数据,叠加Bar数据的函数和Bar数据一样,只是需要在调用的时候加上数据源。
我们也可以使用Data0.Open()来调用Bar数据,默认情况下,可以省略对主数据源的指定,为了方便,一般直接使用Open()来代替Data0.Open()。
行情数据
除了Bar数据之外,TradeBlazer公式还可以支持实时行情数据的调用,行情数据是指当前商品最新的报价数据,该数据和Bar无关,行情数据的回溯没有意义。
行情数据只在最后Bar是有意义的,其他Bar会返回无效值。因此,在调用行情数据函数时,为了提高效率,最好按照以下方法: If(BarStatus()==2) { //调用行情数据函数 } 行情数据函数都按照以下格式命名Q_XXXXX,比如Q_Close,Q_BidPrice。在调用行情数据的时候,需要判断当前行情数据是否有效,系统提供函数QuoteDataExist来对有效性进行判断。如果行情数据已经准备好,返回True,否则,返回False。
属性数据
除了以上的各项数据之外,TradeBlazer公式还提供一组重要的属性数据,反映了该商品的一些基本信息,比如当前数据周期,买卖盘个数、保证金设置等信息。在所有的Bar上面获取的市场属性数据都是一样的,属性数据的回溯没有意义。
关于属性数据的详细说明参见帮助文件附录。
数据类型
TradeBlazer公式支持有三种基本数据类型:数值型、字符串、布尔型。
为了通过用户函数返回多个值,我们对三种数据类型进行了扩展,增加了引用数据类型。另外,为了对变量,参数进行回溯,我们增加了序列数据类型。因此,我们的数据类型共有九种,如下表所示:
名称 Bool BoolRef BoolSeries Numeric NumericRef 布尔型。 布尔型引用。 和周期长度一致的Bool型序列值。 数值型。 数值型引用。 说明 NumericSeries 和周期长度一致的Numeric型序列值。 String StringRef StringSeries 字符串。 字符串引用。 和周期长度一致的String型序列值。 命名规则