开拓者 TB公式入门教程[开拓者公式]
- 咨询内容: 请大家不要在此贴回复,关于该贴的问题请到这里回复,谢谢!
TradeBlazer公式入门教程(1)
Step 1、在开始写公式之前,我们先了解以下基本概念
Bar数据:
公式在进行计算时,都是建立在基本数据源(Bar数据)之上,我们这里所谓的Bar数据,是指商品在不同周期下形成的序列数据,在单独的每个Bar上面包含开盘价、收盘价、最高价、最低价、成交量及时间。期货等品种还有持仓量等数据。所有的Bar按照不同周期组合,并按照时间从先到后进行排列,由此形成为序列数据,整个序列称之为Bar数据。
公式如何执行:
TradeBlazer公式在计算时按照Bar数据的Bar数目,从第一个Bar到最后一个Bar,依次进行计算,如果公式中出现了调用Bar数据函数的,则取出当前Bar的相应值,进行运算。公式执行从上至下,Bar从左到右执行。
Step 2、接下来,我们从TradeBlazer公式的HelloWorld开始
该贴前期已经发过,因此在此只给出链接:
TradeBlazer公式的HelloWorld!
Step 3、建立一个简单的指标:成交量
对于交易开拓者界面不熟悉的朋友可以参看以下帖子:
如何在交易开拓者中编写技术指标?
新建指标简称: MyVol- Begin
- PlotNumeric("Vol",Vol);
- End
- TB技术人员: TradeBlazer公式入门教程(2)
Step 4:
前面我们所建的技术指标MyVol,可以输出成交量,但成交量只能设置为属性所选的一种颜色。如下图:
普通成交量.png (8.75 KB, 下载次数: 291) 2007-8-21 15:50:44 上传下载次数: 291
很多朋友习惯于看红绿色表示涨跌的成交量。
下面我们来实现带红绿颜色的成交量指标,代码如下:- Begin
- PlotNumeric(“Vol”,Vol,IIf(Close>=Open,Red,Green));
- End
使用的情形如下:
红绿色成交量.png (9.19 KB, 下载次数: 293) 2007-8-21 15:50:44 上传下载次数: 293
关于IIF
函数原形:
Numeric IIF(Bool Conditon,Numeric TrueValue,Numeric FalseValue)
参数:
Conditon 条件表达式;
TrueValue 条件为True时的返回值;
FalseValue 条件为False时的返回值。
针对上面的使用IIF进行成交量颜色指定的脚本, 我们还有另外一种写法:
- Begin
- If(Close>=Open)
- PlotNumeric(“Vol”,Vol,Red);
- Else
- PlotNumeric(“Vol”,Vol,Green);
- End
PlotNumeric由输出的名字来区分是否为同一条线!
关于IF语句
If语句是一个条件语句,当特定的条件满足后执行一部分操作。
语法如下:
If (Condition)
{
TradeBlazer公式语句;
}
TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。
[ 本帖最后由 nopain 于 2007-8-21 15:58 编辑 ] - TB客服: TradeBlazer公式入门教程(3)
Step5
关于条件表达式
逻辑操作符
逻辑运算符常常用于比较两个True/False的表达式,共有三个逻辑操作符:AND(&&),OR(||),NOT(!)。
表达式1 AND 表达式2
表达式1 OR 表达式2
NOT表达式1
如下图表所示可以让大家更清晰地理解逻辑操作符在表达式中的运算结果
未命名111.JPG (42.58 KB, 下载次数: 290) 2007-8-22 12:16:51 上传下载次数: 290
[ 本帖最后由 小米 于 2007-8-22 12:19 编辑 ] - 网友回复: TradeBlazer公式入门教程(4)
Step6
前面第一贴已经讲过了IF语句,接下来要讲解条件语句的另外三种表达方式:
If-Else
If-Else-If
If-Else的嵌套
关于If-Else语句
If-Else语句是对指定条件进行判断,如果条件满足执行If后的语句。否则执行Else后面的语句。
语法如下:- If (Condition)
- {
- TradeBlazer公式语句1;
- }Else
- {
- TradeBlazer公式语句2;
- }
Condition是一个逻辑表达式,当Condition为True的时候,TradeBlazer公式语句1将会被执行;Condition为False时,TradeBlazer公式语句2将会被执行。Condition可以是多个条件表达式的逻辑组合,Condition必须用()括起来。
TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。
例如,比较当前Bar和上一个Bar的收盘价,如果Close > Close[1],Value1 = Value1 + Vol;否则Value1 = Value1 - Vol,脚本如下:
- If (Close > Close[1])
- Value1 = Value1 + Vol;
- Else
- Value1 = Value1 - Vol;
关于If-Else-If的语句
If-Else-If是在If-Else的基础上进行扩展,支持条件的多重分支。
语法如下:
- If (Condition1)
- {
- TradeBlazer公式语句1;
- }Else If(Condition2)
- {
- TradeBlazer公式语句2;
- }Else
- {
- TradeBlazer公式语句3;
- }
Condition1是一个逻辑表达式,当Condition1为True的时候,TradeBlazer公式语句1将会被执行,Condition1为False时,将会继续判断Condition2的值,当Condition2为True时,TradeBlazer公式语句2将会被执行。Condition2为False时,TradeBlazer公式语句3将会被执行。Condition1,Condition2可以是多个条件表达式的逻辑组合,条件表达式必须用()括起来。
TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。
If-Else-If的语句可以根据需要一直扩展,在最后的Else之后再加If(Condition)和新的执行代码即可。当然您也可以省略最后的Else分支,语法如下:
- If (Condition1)
- {
- TradeBlazer公式语句1;
- }Else If(Condition2)
- {
- TradeBlazer公式语句2;
- }
If-Else的嵌套
If-Else的嵌套是在If-Else的执行语句中包含新的条件语句,即一个条件被包含在另一个条件中。
语法如下:
- If (Condition1)
- {
- If (Condition2)
- {
- TradeBlazer公式语句1;
- }Else
- {
- TradeBlazer公式语句2;
- }
- }Else
- {
- If (Condition3)
- {
- TradeBlazer公式语句3;
- }Else
- {
- TradeBlazer公式语句4;
- }
- }
Condition1是一个逻辑表达式,当Condition1为True的时候,将会继续判断Condition2的值,当Condition2为True时,TradeBlazer公式语句1将会被执行。Condition2为False时,TradeBlazer公式语句2将会被执行。当Condition1为False的时候,将会继续判断Condition3的值,当Condition3为True时,TradeBlazer公式语句3将会被执行。Condition3为False时,TradeBlazer公式语句4将会被执行。Condition1,Condition2,Condition3可以是多个条件表达式的逻辑组合,条件表达式必须用()括起来。
TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。
例如,在一个交易指令中,条件设置如下:当前行情上涨的时候,如果收盘价高于开盘价时,则产生一个以收盘价买入1张合约;否则产生一个以开盘价买入1张合约。当前行情没有上涨的时候,如果收盘价高于开盘价,则产生一个以收盘价卖出1张合约;否则产生一个以开盘价卖出1张合约。脚本如下:
- If (Open > High[1])
- {
- If (Close>Open)
- {
- Buy(1,close);
- }Else
- {
- Buy(1,open);
- }
- }Else
- {
- If (Close > Open)
- {
- Sell(1,close);
- }Else
- {
- Sell (1,open);
- }
- }
- 网友回复: TradeBlazer公式入门教程(5)
Step7
现在再回到成交量指标
有人喜欢在成交量指标上加均线,我们来看如何实现这样的功能。- Begin
- PlotNumeric(“Vol”,Vol);
- PlotNumeric(“AvgVol5”,AverageFC(Vol,5));
- End
如下图中所示便是加了均线的成交量
avgvol.PNG (11.63 KB, 下载次数: 260) 2007-8-23 15:33:38 上传下载次数: 260
Step8
关于Average和 AverageFC
Average和AverageFC都是内建的用户函数,目的都是用来求N个Bar以来的平均值,您可以直接看到实现的代码。
如下:
Average
- Params
- NumericSeries Price(1);
- Numeric Length(10);
- Vars
- Numeric AvgValue;
- Begin
- AvgValue = Summation(Price, Length) / Length;
- Return AvgValue;
- End
AverageFC
- Params
- NumericSeries Price(1);
- Numeric Length(10);
- Vars
- Numeric AvgValue;
- Begin
- AvgValue = SummationFC(Price, Length) / Length;
- Return AvgValue;
- End
Average和AverageFC有什么不同呢?AverageFC是指FastCalculate,即快速计算。当这两个函数的第二个变量,即N个Bar是常量时,使用AverageFC,提高计算效率。当N是不确定的变量时,则必须使用Average,否则会出现计算问题。
单看Average和AverageFC似乎是一样的,唯一不同的是AvgValue的计算方式用到的是Summation和SumamtionFC。
Summation和SumamtionFC
现在再来看看Summation与SumamtionFC的不同之处。公式表达如下:
Summation
- Params
- NumericSeries Price(1);
- Numeric Length(10);
- Vars
- Numeric SumValue(0);
- Numeric i;
- Begin
- If (CurrentBar >= Length-1)
- {
- for i = 0 to Length - 1
- {
- SumValue = SumValue + Price[i];
- }
- }Else
- {
- SumValue = InvalidNumeric;
- }
- Return SumValue;
- End
SummationFC
- Params
- NumericSeries Price(1);
- Numeric Length(10);
- Vars
- NumericSeries SumValue(0);
- Numeric i;
- Begin
- If ( CurrentBar < Length || Price[Length] == InvalidNumeric || SumValue[1] == InvalidNumeric )
- {
- for i = 0 to Length - 1
- {
- SumValue = SumValue + Price[i];
- }
- }Else
- {
- SumValue = SumValue[1] + Price - Price[Length] ;
- }
- Return SumValue;
- End
关于Average函数的参数
Numeric Average(NumericSeries Price, Numeric Length);
Price 需要进行平均的序列变量
Length 平均时回溯的Bar数量
[ 本帖最后由 小米 于 2007-8-24 10:35 编辑 ]
有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友
可联系技术人员 QQ: 262069696 进行 有偿 编写!(不贵!点击查看价格!)
相关文章
-
没有相关内容