TradeBlazer公式入门教程.docx

上传人:b****3 文档编号:11486785 上传时间:2023-06-01 格式:DOCX 页数:50 大小:49.26KB
下载 相关 举报
TradeBlazer公式入门教程.docx_第1页
第1页 / 共50页
TradeBlazer公式入门教程.docx_第2页
第2页 / 共50页
TradeBlazer公式入门教程.docx_第3页
第3页 / 共50页
TradeBlazer公式入门教程.docx_第4页
第4页 / 共50页
TradeBlazer公式入门教程.docx_第5页
第5页 / 共50页
TradeBlazer公式入门教程.docx_第6页
第6页 / 共50页
TradeBlazer公式入门教程.docx_第7页
第7页 / 共50页
TradeBlazer公式入门教程.docx_第8页
第8页 / 共50页
TradeBlazer公式入门教程.docx_第9页
第9页 / 共50页
TradeBlazer公式入门教程.docx_第10页
第10页 / 共50页
TradeBlazer公式入门教程.docx_第11页
第11页 / 共50页
TradeBlazer公式入门教程.docx_第12页
第12页 / 共50页
TradeBlazer公式入门教程.docx_第13页
第13页 / 共50页
TradeBlazer公式入门教程.docx_第14页
第14页 / 共50页
TradeBlazer公式入门教程.docx_第15页
第15页 / 共50页
TradeBlazer公式入门教程.docx_第16页
第16页 / 共50页
TradeBlazer公式入门教程.docx_第17页
第17页 / 共50页
TradeBlazer公式入门教程.docx_第18页
第18页 / 共50页
TradeBlazer公式入门教程.docx_第19页
第19页 / 共50页
TradeBlazer公式入门教程.docx_第20页
第20页 / 共50页
亲,该文档总共50页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

TradeBlazer公式入门教程.docx

《TradeBlazer公式入门教程.docx》由会员分享,可在线阅读,更多相关《TradeBlazer公式入门教程.docx(50页珍藏版)》请在冰点文库上搜索。

TradeBlazer公式入门教程.docx

TradeBlazer公式入门教程

TradeBlazer公式入门教程

(1)

Step1、在开始写公式之前,我们先了解以下基本概念

Bar数据:

公式在进行计算时,都是建立在基本数据源(Bar数据)之上,我们这里所谓的Bar数据,是指商品在不同周期下形成的序列数据,在单独的每个Bar上面包含开盘价、收盘价、最高价、最低价、成交量及时间。

期货等品种还有持仓量等数据。

所有的Bar按照不同周期组合,并按照时间从先到后进行排列,由此形成为序列数据,整个序列称之为Bar数据。

公式如何执行:

TradeBlazer公式在计算时按照Bar数据的Bar数目,从第一个Bar到最后一个Bar,依次进行计算,如果公式中出现了调用Bar数据函数的,则取出当前Bar的相应值,进行运算。

公式执行从上至下,Bar从左到右执行。

Step2、接下来,我们从TradeBlazer公式的HelloWorld开始

该贴前期已经发过,因此在此只给出链接:

TradeBlazer公式的HelloWorld!

Step3、建立一个简单的指标:

成交量

对于交易开拓者界面不熟悉的朋友可以参看以下帖子:

如何在交易开拓者中编写技术指标?

新建指标简称:

MyVol

1.Begin

2.    PlotNumeric("Vol",Vol);    

3.End

复制代码

Begin和End宣告公式正文的开始和结束,公式语句应该放到Begin和End之间。

并且总是以";"作为语句结束的标志。

PlotNumeric表示输出一个数值型组成的数组;公式中“”内所引用的是字符串的常量,内容文字即在图表中所输出的技术指标的名称

关于PlotNumeric的使用

函数原形:

  NumericPlotNumeric(StringName,NumericNumber,IntegerColor=-1,IntegerBarsBack=0)

参数:

  Name输出值的名称,不区分大小写;

  Number输出的数值;

  Color输出值的显示颜色,默认表示使用属性设置框中的颜色;

  BarsBack从当前Bar向前回溯的Bar数,默认值为当前Bar。

技术指标属性的设置

在属性里的常规下填写公式的简称、名称、分类以及注释。

也可更改参数等设置:

在“线型”里选择更改技术指标的输出形态,如线条、柱状图、十字图等,并且选择自己爱好的颜色,

以更加个性化的表现形式来迎合您的看盘习惯。

Step4:

前面我们所建的技术指标MyVol,可以输出成交量,但成交量只能设置为属性所选的一种颜色。

如下图:

很多朋友习惯于看红绿色表示涨跌的成交量。

下面我们来实现带红绿颜色的成交量指标,代码如下:

1.Begin

2.  PlotNumeric(“Vol”,Vol,IIf(Close>=Open,Red,Green));

3.End

复制代码

使用的情形如下:

关于IIF

函数原形:

  NumericIIF(BoolConditon,NumericTrueValue,NumericFalseValue)

参数:

  Conditon条件表达式;

  TrueValue条件为True时的返回值;

  FalseValue条件为False时的返回值。

针对上面的使用IIF进行成交量颜色指定的脚本,我们还有另外一种写法:

1.Begin

2.  If(Close>=Open)

3.      PlotNumeric(“Vol”,Vol,Red);

4.  Else

5.      PlotNumeric(“Vol”,Vol,Green);

6.End

复制代码

PlotNumeric由输出的名字来区分是否为同一条线!

关于IF语句

If语句是一个条件语句,当特定的条件满足后执行一部分操作。

语法如下:

If(Condition)

{

  TradeBlazer公式语句;

}

TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。

Step5

关于条件表达式

  

逻辑操作符

逻辑运算符常常用于比较两个True/False的表达式,共有三个逻辑操作符:

AND(&&),OR(||),NOT(!

)。

  

        

      表达式1AND表达式2

      表达式1OR表达式2

     NOT表达式1

        如下图表所示可以让大家更清晰地理解逻辑操作符在表达式中的运算结果

Step6

前面第一贴已经讲过了IF语句,接下来要讲解条件语句的另外三种表达方式:

  If-Else

  If-Else-If

  If-Else的嵌套

关于If-Else语句

If-Else语句是对指定条件进行判断,如果条件满足执行If后的语句。

否则执行Else后面的语句。

语法如下:

1.If(Condition)

2.{

3.  TradeBlazer公式语句1;

4.}Else

5.{

6.  TradeBlazer公式语句2;

7.}

复制代码

Condition是一个逻辑表达式,当Condition为True的时候,TradeBlazer公式语句1将会被执行;Condition为False时,TradeBlazer公式语句2将会被执行。

Condition可以是多个条件表达式的逻辑组合,Condition必须用()括起来。

TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。

 

例如,比较当前Bar和上一个Bar的收盘价,如果Close>Close[1],Value1=Value1+Vol;否则Value1=Value1-Vol,脚本如下:

1.If(Close>Close[1])

2.  Value1=Value1+Vol;

3.Else

4.  Value1=Value1-Vol;

复制代码

关于If-Else-If的语句

If-Else-If是在If-Else的基础上进行扩展,支持条件的多重分支。

语法如下:

1.If(Condition1)

2.{

3.  TradeBlazer公式语句1;

4.}ElseIf(Condition2)

5.{

6.  TradeBlazer公式语句2;

7.}Else

8.{

9.  TradeBlazer公式语句3;

10.}

复制代码

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分支,语法如下:

1.If(Condition1)

2.{

3.  TradeBlazer公式语句1;

4.}ElseIf(Condition2)

5.{

6.  TradeBlazer公式语句2;

7.}

复制代码

If-Else的嵌套

If-Else的嵌套是在If-Else的执行语句中包含新的条件语句,即一个条件被包含在另一个条件中。

语法如下:

1.If(Condition1)

2.{

3.  If(Condition2)

4.  {

5.      TradeBlazer公式语句1;

6.  }Else

7.  {

8.      TradeBlazer公式语句2;

9.  }

10.}Else

11.{

12.  If(Condition3)

13.  {

14.      TradeBlazer公式语句3;

15.  }Else

16.  {

17.      TradeBlazer公式语句4;

18.  }

19.}

复制代码

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张合约。

脚本如下:

1.If(Open>High[1])

2.{

3.  If(Close>Open)

4.  {

5.      Buy(1,close);

6.  }Else

7.  {

8.      Buy(1,open);

9.  }

10.}Else

11.{

12.  If(Close>Open)

13.  {  

14.      Sell(1,close);

15.  }Else

16.  {

17.      Sell(1,open);

18.  }

19.}

复制代码

Step7

现在再回到成交量指标

有人喜欢在成交量指标上加均线,我们来看如何实现这样的功能。

1.Begin

2.  PlotNumeric(“Vol”,Vol);

3.  PlotNumeric(“AvgVol5”,AverageFC(Vol,5));

4.End

复制代码

如下图中所示便是加了均线的成交量

 

Step8

关于Average和AverageFC

Average和AverageFC都是内建的用户函数,目的都是用来求N个Bar以来的平均值,您可以直接看到实现的代码。

如下:

Average

1.Params

2.      NumericSeriesPrice

(1);

3.      NumericLength(10);

4.Vars

5.      NumericAvgValue;

6.Begin

7.      AvgValue=Summation(Price,Length)/Length;      

8.      ReturnAvgValue;

9.End

复制代码

AverageFC

1.Params

2.      NumericSeriesPrice

(1);

3.      NumericLength(10);

4.Vars

5.      NumericAvgValue;

6.Begin

7.      AvgValue=SummationFC(Price,Length)/Length;      

8.      ReturnAvgValue;

9.End

复制代码

Average和AverageFC有什么不同呢?

AverageFC是指FastCalculate,即快速计算。

当这两个函数的第二个变量,即N个Bar是常量时,使用AverageFC,提高计算效率。

当N是不确定的变量时,则必须使用Average,否则会出现计算问题。

单看Average和AverageFC似乎是一样的,唯一不同的是AvgValue的计算方式用到的是Summation和SumamtionFC。

 

Summation和SumamtionFC

现在再来看看Summation与SumamtionFC的不同之处。

公式表达如下:

Summation

1.Params

2.    NumericSeriesPrice

(1);

3.    NumericLength(10);

4.Vars

5.    NumericSumValue(0);

6.    Numerici;

7.Begin

8.    If(CurrentBar>=Length-1)

9.    {

10.        fori=0toLength-1

11.        {

12.            SumValue=SumValue+Price[i];

13.        }

14.    }Else

15.    {

16.        SumValue=InvalidNumeric;

17.    }

18.    ReturnSumValue;

19.End

复制代码

SummationFC

1.Params

2.    NumericSeriesPrice

(1);

3.    NumericLength(10);

4.Vars

5.    NumericSeriesSumValue(0);

6.    Numerici;

7.Begin

8.    If(CurrentBar

9.    {

10.        fori=0toLength-1

11.        {

12.            SumValue=SumValue+Price[i];

13.        }

14.    }Else

15.    {

16.        SumValue=SumValue[1]+Price-Price[Length];

17.    }

18.    ReturnSumValue;

19.End

复制代码

关于Average函数的参数

NumericAverage(NumericSeriesPrice,NumericLength);

Price 需要进行平均的序列变量

Length 平均时回溯的Bar数量

Step9

接下来我们再说一下常量与变量的定义

常量  

是用来代替一个数或字符串的名称,在公式整个执行过程中不发生改变。

变量

是一个存储值的地址,当变量被声明之后,就可以在脚本中使用变量,可以对其赋值,也可以在其他地方引用变量的值进行计算,要对变量进行操作,直接使用变量名称即可。

变量的主要用处在于它可以存放计算或比较的结果,以方便在之后的脚本中直接引用运算的值,而无需重现计算过程。

例如,我们定义一个变量Y,我们把一个收盘价(Close)乘上8%的所得的值存储在Y中,即Y=Close*8%。

那么一旦计算出Close*8%的值,便赋给变量Y。

而无需在公式中输入计算过程,只需调用变量名称即可引用变量的值。

变量有助于程序的优化,这是TradeBlazer公式必须重复调用一些数据,这些数据可能是某些函数(如:

Bar数据),或通过表达式执行计算和比较的值。

因此,在表达式频繁使用的地方使用变量可提高程序的运行速度和节约内存空间。

使用变量也可以避免输入错误,使程序的可读性提高,示例如下:

未使用变量的公式代码:

1.If(Close>High[1]+Average(Close,10)*0.5)

2.{

3.  Buy(100,High[1]+Average(Close,10)*0.5);

4.}

复制代码

如果使用变量,则整个代码变得简洁:

1.Value1=High[1]+Average(Close,10)*0.5;

2.If(Close>Value1)

3.{

4.  Buy(100,Value1);

5.}

复制代码

如果一些表达式的组合经常在不同的公式中被调用,这个时候变量就不能实现功能,变量只能在单个公式的内部使用,这个时候我们需要建立用户函数来完成这些功能,详细说明参见用户函数(在TB软件里按F1便会出现联机帮助--公式系统--公式应用--用户函数)。

变量类型

TradeBlazer公式支持有三种基本数据类型:

数值型(Numeric)、字符串(String)、布尔型(Bool)。

为了通过用户函数返回多个值,我们对三种数据类型进行了扩展,增加了引用数据类型。

另外,为了对变量,参数进行回溯,我们增加了序列数据类型。

因此,我们的数据类型共有九种。

但对于变量定义,引用类型是无效的,剩余六种数据类型中分为简单和序列两大类,简单类型变量是单个的值,不能对其进行回溯,序列类型变量是和Bar长度一致的数据排列,我们可以通过回溯来获取当前Bar以前的任意值。

9种数据类型

Bool            布尔型。

BoolRef        布尔型引用。

BoolSeries      和周期长度一致的Bool型序列值。

Numeric        数值型。

NumericRef    数值型引用。

NumericSeries  和周期长度一致的Numeric型序列值。

String          字符串。

StringRef      字符串引用。

StringSeries    和周期长度一致的String型序列值。

 

变量声明

在使用变量之前,必须对变量进行声明,TradeBlazer公式使用关键字"Vars"来进行变量宣告,并指定变量类型。

可以选择赋默认值,也可以不赋默认值。

变量定义的语法如下:

1.Vars

2.  变量类型变量名1(初值);

3.  变量类型变量名2(初值);

4.  变量类型变量名3(初值);

复制代码

下面是一些变量定义的例子:

1.Vars

2.  NumericSeries  MyVal1(0);          //定义数值型序列变量MyVal1,默认值为0;

3.  Numeric      MyVal2(0);          //定义数值型变量MyVal2,默认值为0;

4.  Bool        MyVal3(False);      //定义布尔型变量MyVal3,默认值为False;

5.  String      MyVal4("Test");      //定义字符串变量MyVal4,默认值为Test。

复制代码

变量定义的个数没有限制,变量名称的命名规范详细说明参见命名规则。

整个公式中只能出现一个Vars宣告,并且要放到公式的开始部分,在参数定义之后,正文之前。

变量的默认值

在声明变量时,通常会赋给变量一个默认值。

例如上例中的0,False,"Test"等就是变量的默认值。

如果某个变量没有赋予默认值,系统将会自动给该变量赋予默认值。

数值型变量的默认值为0,布尔型变量的默认值为False,字符串的默认值为空串。

变量的默认值是在当公式在执行时,给该变量赋予的初值,使该变量在引用时存在着有效的值。

在该公式每个Bar的执行过程中,改变量的默认值都会被重新赋值。

 

变量赋值

变量声明完成之后,您可以在脚本正文中给变量指定一个值。

语法如下:

1.Name=Expression;

复制代码

"Name"是变量的名称,表达式的类型可以是数值型、布尔型、字符串中的任何一种。

不过表达式的类型一定要和变量的数据类型相匹配。

如果变量被指定为是数值型的,那么表达式一定要是数值型的表达式。

例如:

下面的语句将Close的10周期平均值赋值给变量Value1:

1.Value1=Average(Close,10);

复制代码

在下面这个语句中,声明了一个名为"KeyReversal"的逻辑型变量,然后又把计算的值赋给它。

1.Vars

2.  Bool      KeyReversal(False);

3.Begin

4.  KeyReversal=LowHigh[1];

5.  ...

6.End

复制代码

变量使用

变量定义、赋值之后,在表达式中直接使用变量名就可以引用变量的值。

例如在下面的语句中计算了买入价格后,把值赋给数值型变量EntryPrc,在买入指令中便可直接应用变量名,通过变量名便可引用变量的值:

1.Vars

2.  NumericEntryPrc(0);

3.Begin

4.  EntryPrc=Highest(High,10);

5.  If(MarkerPosition<>1)

6.  {

7.      Buy(1,EntryPrc);

8.  }

9.End

复制代码

接下来的例子,我们计算最近10个Bar最高价中的最大值(不包括当前Bar),对比当前High,然后通过If语句,产生报警信息。

1.Vars

2.  Bool  Con1(False);

3.Begin

4.  Con1=High>Highest(High[1],10);

5.  If(Con1)

6.  {

7.      Alert("New10-barhigh");

8.  }

9.End

复制代码

其实我们并不一定都要应用条件为True的情况,有时候我们需要

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2