- 精华
- 2
- 在线时间
- 192 小时
- UID
- 390
- 积分
- 2142
- 帖子
- 286
- 阅读权限
- 70
- 注册时间
- 2007-9-21
- 最后登录
- 2019-4-1
- 精华
- 2
- UID
- 390
- 积分
- 2142
- 帖子
- 286
- 主题
- 45
- 阅读权限
- 70
- 注册时间
- 2007-9-21
- 最后登录
- 2019-4-1
|
发表于 2007-10-21 10:03:24
|显示全部楼层
现在说说参数与函数,说完了这个东西,就要进入实践阶段了咯,就要准备开始实打实的独立编写指标了
首先我们必须明白,参数仅仅存在于函数里面,如果函数里面存在着参数,那么当你调用这个函数的时候必须要先传递参数给这个函数
看起来似乎有点深奥和晦涩,那么我们先来明白函数是什么就很容易明了
函数就是帮助我们完成某一件事情,并且完成这件事情以后会返回个东西给我们的一个方法.
比如一个这样的函数请注意,这仅仅是个假想的函数,仅为了帮助理解函数是什么):
GetCloseFromTrader
我们就很明白,这个函数就是帮助我们到交易所跑一趟,然后把收盘价返回给我们;
有点明白了吧,但是仔细一想,这个东西似乎有点问题,比如返回收盘价,晕死,交易所
那么多的品种,且每个品种都有那么多的月份,他到底返回的是什么东西的收盘价啊?
呵呵,那么我们这样写:
GetCloseFromTrader(Cu0801)
现在应该完全明白了,这个函数就是从交易所返回某个品种的收盘价,到底是什么品种什么月份的收盘价呢?
Cu0801就是拉.
其实,这里面的Cu0801就是这个函数所需要的参数!
我们于是就可以这样理解:函数是帮助用户完成某一件事情且返回用户所需要的数据的方法;
那么参数呢?参数就是参到函数里面去的数,也就是说必须要传递给函数的数;
我们现在不要求一定能够自己写函数,但是必须要懂得的是要看懂这个函数是做什么用的,且知道如何去调用这个函数!
我们先看看下面的这个函数,这个函数的名字叫:HHV,是根据轮回老大的建议改写的,我们必须要读懂这个函数,且知道怎么样去
调用这个函数,如果真懂了,这课就圆满的完成了!- //------------------------------------------------------------------------
- // 简称: HHV
- // 名称: 求N周期的最高值
- // 类别: 用户函数
- // 类型: 用户函数
- // 输出: 数值型
- //------------------------------------------------------------------------
- Params
- NumericSeries Price(0);
- Numeric Length(5);
- Vars
- Numeric highestValue(0);
- Numeric minDay;
- Numeric i;
- Begin
- minDay = Min(CurrentBar,Length-1);
- for i=0 to minDay
- {
- highestValue=Max(highestValue,Price[i]);
- }
- Return highestValue;
- End
- //------------------------------------------------------------------------
- // 编译版本 GS2004.06.12
- // 用户版本 2007/09/24 08:29
- // 版权所有 pwqzc
- // 更改声明 TradeBlazer Software保留对TradeBlazer平台
- // 每一版本的TrabeBlazer公式修改和重写的权利
- //------------------------------------------------------------------------
复制代码 我们一行一行的读,一行一行的理解;
首先我们都知道,//后面的代表是注释,什么是注释?我狂晕!
通过注释我们可以粗略的明白这个函数是干什么的?代表了什么意思:
这个函数的名字HHV,他的作用是求N周期的最高值,并且会把这个最高值返回给调用这个函数的用户
通过此,我们就能够想到,这个N是个参数,比如5个周期或者10个周期或者其他周期的最高值,
再仔细一想,是什么价格的最高值啊?是收盘价的最高值还是开盘价的最高值?或者是最高价的最高值呢?
于是我们也就想到了这个函数的另外个参数:价格,比如5个周期的收盘价的最高值,或者10个周期的最高价的最高值
紧接着,这个函数开始定义参数了,
Params后面定义的就是参数,一个代表要得到什么价格的最高值,一个代表要得到什么周期的最高值;
参数定义完了,这个函数就开始定义变量,对于函数,我们首先定义一个变量highestValue,我们这个函数必须要把这个变量返回给用户的
这个变量highestValue就代表了你想得到的最高值!其他的两个变量我们先不要理睬,紧接着就是Begin了,前面我们说过,Begin后面,我们的代码就要开始工作拉
我们先想一想,假设我们求5天的收盘价的最高值,在第一根K线上,我们希望得到的收盘价的最高值就是这天的收盘价;
到第二根K线的时候我们希望得到的收盘价的最高值是这两天的收盘价中价格最高的那个,第三根就是得到这三根K线里面收盘价最大的那个收盘价,
第四天同样如此,第五天同样如此,第六天开始就取前面5天的收盘价的最高价,第七天......第N天同样如此了;
这个时候我们就应该想到,如果当前K线的索引小于你需要的周期数的时候就取当前K线的前面几个周期的最高值
于是代码开始写:
minDay = Min(CurrentBar,Length-1);
这个大家都很明白吧,如果当前K线索引假设是3,而你要得到的是5个周期的最高值,因为暂时还没有5个周期,我们我们就取这3个周期来获得这三个周期的最高值
为什么要-1呢?因为K线的索引是从0开始计算的,那么前面的minDay呢?就是个变量,我们用这个变量来代表周期,于是我们再到定义变量的地方去定义这个变量:
Numeric minDay;
再看代码:- for i=0 to minDay
- {
- highestValue=Max(highestValue,Price[i]);
- }
复制代码 很明显,这是一个前面我们所说的For循环,在For循环里面我们必须要先定义一个变量i(可以是其他名字),代表从什么基数开始循环;
于是再到定义变量的地方去定义这个i变量:
Vars
Numeric highestValue(0);
Numeric minDay;
Numeric i;
再看这个For循环,
当i是0的时候,看这个时候0是不是小于等于最小周期minDay,如果条件成立,就执行:- highestValue=Max(highestValue,Price[i]);
复制代码 Price[0]代表今天的价格,先比较今天的价格和最高值,取最大的那个保存;再把i+1
于是这个时候i为1了,再比较是不是小于等于最小周期minDay,如果条件成立,再执行:- highestValue=Max(highestValue,Price[i]);
复制代码 这个时候Price[1]就代表了昨天的价格,把昨天的价格和保存的最高值比较,取他们的最高的那个再次保存;
依次循环,我们是不是就得到了某个周期某个价格的最高值了呢?
呵呵
最后面,我们用代码:
Return highestValue;
把这个得到的最高值返回给用户,Return就是返回拉.
明白了吗?
调用这个函数的时候就更简单了,比如求10个周期的收盘价的最高值:
HHV(Close,10);
求20个周期的最高价的最高值:
HHV(High,20);
呵呵
大家在看看和分析这个文章里面的函数就会完全明白了的
http://www.tradeblazer.net/forum/thread-520-1-1.html
[ 本帖最后由 pwqzc 于 2007-10-21 10:04 编辑 ] |
|