6评论

0收藏

TradeBlazer参数

avatar EA狙击手 | 4148 人阅读 | 6 人评论 | 2013-07-16

参数
参数是一个预先声明的地址,用来存放输入参数的值,在声明之后,您就可以在接下来的公式中使用该参数的名称来引用其值。
参数的值在公式的内部是不能够被修改,在整个程序中一直保持不变,不能对参数进行赋值操作(引用参数是个特例)。参数的好处在于您可以在调用执行技术分析,交易指令的时候才指定相应的参数,而不需要重新编译。
例如,我们常用的移动平均线指标,就是通过不同的Length来控制移动平均线的周期,在调用指标时可以随意修改各个Length的值,使之能够计算出相对应的移动平均线。您可以指定4个参数为5,10,20,30计算出这4条移动平均线,也可以修改4个参数为1022100250计算出另外的4条移动平均线。
参数的修改很简单,在超级图表调用指标的过程中,您可以打开指标的属性设置框,切换到参数页面,手动修改各项参数的值,然后应用即可,交易开拓者将根据新的参数设置计算出新的结果,在超级图表中反映出来。
另外,参数的一个额外的优点是,我们可以通过修改交易指令不同的参数,计算交易指令组合的优劣,达到优化参数的目的。
参数类型在介绍参数类型之前,我们需要对于TradeBlazer公式的六种类型作一些说明,用户函数是六种公式中比较特殊的一类,它自身不能被超级图表,行情报价这样的模块调用,只能被其他五类公式或者用户函数调用,因此它的参数类型也和其他几种不一样。
用户函数的参数类型可以包含TradeBlazer公式的九种类型,而其他五类公式只能使用三种简单的基本类型。
三种简单类型参数通过传值的方式将参数值传入公式,公式内部通过使用参数名称,将参数值用来进行计算或赋值。
引用参数是在调用的时候传入一个变量的地址,在用户函数内部会修改参数的值,在函数执行完毕,上层调用的公式会通过变量获得修改后的值,引用参数对于需要通过用户函数返回多个值的情况非常有用。
序列参数可以通过回溯获取以前Bar的值,具体介绍可参见参数回溯
参数声明在使用参数之前,必须对参数进行声明,TradeBlazer公式使用关键字"Params"来进行参数宣告,并指定参数类型。可以选择赋默认值,也可以不赋默认值。如果某个参数没有赋予默认值,则这个参数之前的其他参数的默认值都将被忽略。
参数定义的语法如下:
Params    参数类型 参数名1(初值);    参数类型 参数名2(初值);    参数类型 参数名3(初值);
下面是一些参数定义的例子:
Params    Bool          bTest(False); //定义布尔型参数bTest,默认值为False;    Numberic      Length(10);   //定义数值型参数Length,默认值为10    NumericSeries Price(0);     //定义数值型序列参数Price,默认值为0    NumericRef    output(0);    //定义数值型引用参数output,默认值为0    String        strTmp("Hi"); //定义字符串参数strTmp,默认值为Hi;
参数名称的命名规范详细说明参见命名规则
整个公式中只能出现一个Params宣告,并且要放到公式的开始部分,在变量定义之前。
参数的默认值在声明参数时,通常会赋给参数一个默认值。例如上例中的False100等就是参数的默认值。用户函数的默认值是在当用户函数被其他公式调用,省略参数时作为参数的输入值,其他五种公式的默认值是用于图表,报价等模块调用公式时默认的输入值。
参数的默认值的类型在定义的时候指定,默认值在公式调用的时候传入作为参数进行计算。只能够对排列在后面的那些参数提供默认参数,例如:
Params    Numeric       MyVal1;    Numeric       MyVal2(0);    Numeric       MyVal3(0);
您不能够使用以下方式对参数的默认值进行设定:
Params    Numeric       MyVal1(0);    Numeric       MyVal2(0);    Numeric       MyVal3;
参数使用在声明参数之后,我们可以在脚本正文中通过参数名称使用该参数,在使用的过程中要注意保持数据类型的匹配,示例如下:
Params    NumericSeries Price(1);Vars    Numeric CumValue(0);Begin    CumValue = CumValue[1] + Price;     Return CumValue;End
在以上的公式中,首先定义了一个数值型序列参数Price,并将其默认值设置为1。接着定义了一个变量CumValue。脚本正文中,将CumValue的上一个Bar值加上Price,并将值赋给CumValue,最后返回CumValue
通过上述的公式可以看到,我们只需要调用参数名,就可以使用参数的值进行计算了,如果要对序列参数进行回溯,请参见参数回溯
引用参数TradeBlazer公式的用户函数可以通过返回值,返回函数的计算结果,返回值只能是三种简单类型。当我们需要通过函数进行计算,返回多个值的时候,单个的返回值就不能满足需求了。在这种情况下,我们提出了引用参数的概念,引用参数是在调用的时候传入一个变量的地址,在用户函数内部会修改参数的值,在函数执行完毕,上层调用的公式会通过变量获得修改后的值。因为引用参数的使用是没有个数限制,因此,我们可以通过引用参数返回任意多个值。
例如,用户函数MyFunc如下:
Params    NumericSeries   Price(0);    NumericRef      oHigher(0);    NumericRef      oLower(0);Vars    Numeric         Tmp(0);Begin    Tmp = Average(Price,10);    oHigher = IIf(Tmp > High,Tmp,High);    oLower = IIf(Tmp < Low,Tmp,Low);    Return Tmp;End
以上代码通过两个数值型引用参数返回10个周期的Price平均值和最高价的较大值oHigher,以及10个周期的Price平均值和最低价的较小值oLower,并且通过函数返回值输出10个周期的Price平均值。在调用该用户函数的公式中,可以通过调用该函数获得3个计算返回值,示例如下:
Vars    Numeric AvgValue;    Numeric       HigherValue;    Numeric LowerValue;Begin    AvgValue = MyFunc(Close,HigherValue,LowerValue);    ...End
""
还没有人打赏,支持一下

评论|共 6 个

代号1

发表于 2014-11-12 08:49:46 | 显示全部楼层

多谢分享 看看是什么

icetea1984

发表于 2014-11-12 09:53:44 | 显示全部楼层

看看是什么东西啊

test1234a

发表于 2014-11-27 14:32:52 | 显示全部楼层

路过。。看下先。

mkolc

发表于 2014-11-27 16:51:35 | 显示全部楼层

看看,看看。谢谢。你要发,我也要发。

FXSIN外汇

发表于 2014-12-26 22:30:34 | 显示全部楼层

今天黄金怎么操作

点差

发表于 2018-9-6 14:51:46 | 显示全部楼层

我是个凑数的。。。

您需要登录后才可以回帖 登录 | 注册 微信登录

EA之家评论守则