大学课件指南针指标设计.docx

上传人:b****8 文档编号:10585714 上传时间:2023-02-21 格式:DOCX 页数:36 大小:31.72KB
下载 相关 举报
大学课件指南针指标设计.docx_第1页
第1页 / 共36页
大学课件指南针指标设计.docx_第2页
第2页 / 共36页
大学课件指南针指标设计.docx_第3页
第3页 / 共36页
大学课件指南针指标设计.docx_第4页
第4页 / 共36页
大学课件指南针指标设计.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

大学课件指南针指标设计.docx

《大学课件指南针指标设计.docx》由会员分享,可在线阅读,更多相关《大学课件指南针指标设计.docx(36页珍藏版)》请在冰豆网上搜索。

大学课件指南针指标设计.docx

大学课件指南针指标设计

指南针指标设计

(一)

1.指南针自定义指标语法

  指南针自定义指标平台以高级程序语言语法为模板,定义了功能强大的自定义指标语法,支持高级语言的所有主要的程序结构——顺序、循环和条件跳转。

  指南针自定义指标语法以语句为单位,每个语句都需要以“;”作结尾。

在自定义指标的语法中,有三种语句:

赋值语句、条件跳转语句和循环语句。

  1.1.指标文件结构

  指南针指标文件(zbt或者zbu)可以直接用文本编辑器打开。

但是不提倡直接在文本编辑器中改写指标文件,因为这样做容易发生语法错误,而且无法使用指标平台编辑环境的提示功能。

  指标文件的结构如下(括号中是注释说明):

__ZBT    (指南针指标文件起始标志)

_NAME……  (指标文件名称,不能为空)

_COMM……  (指标文件注释,可以为空)

_PAR……  (指标的参数列表,如果有多个参数,用逗号“,”分割)

_VAR……  (指标的局部变量列表,如果有多个,用逗号“,”分割)

_ZB……   (指标的参数指标列表,即需要用到的指标列表)

_RES……  (指标文件的结果指标列表,即本文件能计算的指标列表)

_DEF……  (指标的默认值,如果在计算中发生错误,则指标值填为默认值)

_CODE    (指标文件代码段起始标志)

……

……     (代码段)

……

__END    (指标文件结束标志)

1.2.运算符

  指南针自定义指标中支持以下运算符(按优先级从高到低排列):

l“(”、“)”左右括号

l“*”、“/”乘、除

l“+”、“-”加、减

l“>”、“<”、“>=”、“<=”大于、小于、大于或等于、小于或等于

l“=”、“<>”等于、不等于

l“&”与,逻辑运算符,仅当两

l“|”或

l“=”赋值,注意赋值号和等于号是一样的

  为了兼容中文输入的使用习惯,下列运算符“()*/+-=”支持中文全角输入。

1.3.赋值语句

  赋值语句的语法非常简单,没有关键字。

赋值语句的型式有:

  a=b+c;

  a=系统函数();

  系统函数();

1.4.条件跳转语句

  条件跳转语句有4个关键字:

IF(表示如果)、THEN(表示则)、ELSE(表示否则)、ENDIF

(表示条件语句结束)。

完整的条件跳转语句的形式是:

IF条件

THEN

  语句1;

  语句2;

  ……

ELSE

  语句1;

  语句2;

  ……

ENDIF;

  “条件”的形式是型如“a>b”、“a

b”(注意这里的“=”是相等而不是赋值的意思),也可以用与和或把简单条件串连起来,型如:

“(a>b)&(b>c)”、“(a=b)

|(b

  “语句1”、“语句2”可以是任何语句,包括赋值、条件跳转或者循环语句。

  注意条件跳转语句必须包含“THEN”分支,但是可以没有“ELSE”分支,型如:

IF条件

THEN

  语句1;

  语句2;

  ……

ENDIF;

1.5.循环语句

  循环语句有3个关键字:

LOOPBEGIN(表示开始循环)、LOOP(表示返回上一个LOOPBEGIN处继续执行)、BREAK

(表示结束循环)。

循环语句的一般形式是:

LOOPBEGIN

  语句1;

  语句2;

  ……

LOOP;

  

循环语句一般是在满足一定条件时退出循环,所以循环语句一般都需要和条件语句组合使用,型如

LOOPBEGIN

  IF条件

  THENBREAK;

  ENDIF;

  语句1;

  语句2;

  ……

LOOP;

1.6.指标的引用

  自定义指标中需要引用其他指标。

指标的引用分为两类:

引用参数指标和引用结果返回指标。

  1.参数指标的引用

  引用参数指标时的一般形式是:

指标名称[日期偏移](参数列表)。

日期偏移是指需要引用当前天往前几天的指标数值,如果为0则表示引用当前天的指标数值,1则表示当前天往前1天的指标数值,一次类推……,注意日期偏移为0时可以不写;参数列表标示所引用的指标的参数,如果所引用的指标没有参数则不能写该项,如果指标有多个参数,则中间用逗号(半角)分割。

  例如CYF指标需要有一个参数,当引用两天前以22为参数的CYF指标应该表述为:

CYF[2](22);收盘价指标没有参数,需要引用当前天的收盘价应该表述为:

CLOSE[0]或者CLOSE。

  2.结果返回指标的引用

  引用结果返回指标分为两种情况,即结果返回指标出现在等号右侧和出现在等号左侧。

结果返回指标出现在等号右侧时,含义是引用结果返回指标的数值,引用的一般形式是:

指标名称[引用日期]注意此时不能有参数列表;结果返回指标出现在等号左侧时,含义是给结果返回指标赋值,引用的一般形式是:

指标名称,注意此时不能有日期偏移和参数列表。

1.7.注释

指南针自定义指标语法中,允许使用注释来标识语句的具体意义。

注释以双斜杠“//”开始到本行的结束。

在指标文本窗口中注释以绿色字体显示。

指南针指标设计

(二)

自定义指标语法范式

指南针指标设计(三)

函数列表

  3.1.引用函数

  ●BLAST(X,N)

  求0~N-1周期中,最近一次条件X成立的周期到当前天的日期偏移。

如果N为0,则一直搜索到第一个有效周期(上市第一天)。

X是条件表达式,例如CLOSE

>OPEN、CYF13>CYF34等;N是搜索的范围。

如果当前天即满足条件X,返回0,在搜索范围内条件X没有满足则返回N

举例:

BLAST(CYF13>CYF34,10),表示求当前天和过去9天中最近一次CYF13>CYF34的日期偏移。

  ●COST(N)

  取得成本分布情况。

N是一个表示百分比的表达式,如20、涨跌幅等。

合法的N必须是0~100间的数,如果N小于0,则视为0,如果N大于100,则视为100。

  举例:

COST(20),表示20%获利盘的价格是多少,即有20%的流通盘成本在该价格以下(获利盘),其余80%的流通盘成本在该价格以上(套牢盘)。

  ●COSTD(X,N)

  取得价格分布情况。

X是一个表示价格的表达式,如15、CLOSE、HIGH等;N是一个表示百分比的表达式,表示相对价格X的偏移。

合法的N值应该是一个-100到100的数值,如果N<-100,则视为-100,N大于100,则视为100。

  举例:

COSTD(CLOSE,15),表示求当天收盘价(1+15%)

=115%的价格上的获利盘是多少,即有多少流通盘的成本在当天收盘价115%以下。

COSTD(HIGH[1],-10),表示求昨天最高价(1-

10%)=90%的价格上的获利盘是多少。

  ●COUNT(X,N)

  求0~N-1周期中,条件X成立的周期数。

如果N为0,则从第一个有效周期(上市第一天)开始搜索。

X是条件表达式,例如CLOSE>

OPEN、CYF13>CYF34等;N是搜索的范围。

  举例:

COUNT(CLOSE>OPEN,10),表示10日内K线收阳的天数。

  ●DMA(Z,X,A)

  求X的以A为平滑因子的指数移动平均。

其中Z是必须是结果返回指标,X是一个不为常数的表达式,A是平滑因子,其合理范围应该在0~1之间,如果A小于0则视为0,大于1则视为1。

DMA的具体算法:

Z=(1-A)×Z[1]+X×A。

Z[1]表示前一天指标Z的数值。

  举例:

DMA(Z,CLOSE+OPEN,0.2),表示求以0.2为平滑因子的开盘价与收盘价之和的指数移动平均值,结果存放在指标Z中。

  ●EMA(Z,X,N)

  求X的N日指数平滑移动平均。

N是一个非负整数,如果N小于0,则视为0。

EMA的具体算法:

Z=[(N-1)×Z[1]+2×X]/(N+2)

  举例:

EMA(Z,CYF13[1],10),表示对当前天的前一天的CYF13指标作10日指数平滑移动平均,结果存放在指标Z中。

  ●HHV(X,N)

  求N周期内X的最大值。

X应该是一个不为常数的表达式,N是一个非负表达式,表示周期范围,如果N为0表示从第一个有效周期(上市第一天)开始计算。

  举例:

HHV((OPEN+HIGHT+LOW+CLOSE)/4,10),表示求10天内的最高均价。

  ●HHVB(X,N)

  求N周期内X值最大的周期到当前周期的日期偏移。

X和N的含义同HHV(X,N)。

如果X的最大值出现在当前周期,函数返回0。

举例:

HHVB((OPEN+HIGHT+LOW+CLOSE)/4,10),表示求10天内的最高均价出现日期到当前天的偏移值。

  ●KLINEINDEX

  求当前周期是K线链上的第一个节点。

如果当前是上市第一个周期,函数返回0;第二个周期,函数返回1;……

  ●LFCAST(X,N)

  求X的N周期线形回归值。

X应该是一个不为常数的表达式,N是一个非负表达式,表示在多少周期内作线性拟合,如果N为0表示从第一个有效周期(上市第一天)开始拟合。

  举例:

LFCAST(CYF34,0),表示对股票上市以来指标CYF34的线性拟合值。

  ●LLV(X,N)

  求N周期内X的最小值。

X应该是一个不为常数的表达式,N是一个非负表达式,表示周期范围,如果N为0表示从第一个有效周期(上市第一天)开始计算。

  举例:

LLV((OPEN+HIGHT+LOW+CLOSE)/4,20),表示求20天内的最低均价。

  ●LLVB(X,N)

  求N周期内X值最小的周期到当前周期的日期偏移。

X和N的含义同LLV(X,N)。

如果X的最小值出现在当前周期,函数返回0。

  举例:

LLVB((OPEN+HIGHT+LOW+CLOSE)/4,20),表示求20天内的最低均价出现日期到当前天的偏移值

  ●LSLOPE(X,N)

  求X的N周期线形回归线的斜率。

X应该是一个不为常数的表达式,N是一个非负表达式,表示在多少周期内作线性拟合,如果N为0表示从第一个有效周期(上市第一天)开始拟合。

  举例:

LSLOPE(CYF13,0),表示对股票上市以来指标CYF13的数值作线性拟合后的直线斜率。

  ●MA(X,N)

  求X的N周期简单平均值。

X应该是一个不为常数的表达式,N是一个非负表达式,表示在多少周期内作平均,如果N为0表示从第一个有效周期(上市第一天)开始计算。

MA的具体算法是:

  举例:

MA(CLOSE[1]+OPEN,20),表示20个周期内,每日的前收加上今开的平均值。

  ●SMA(Z,X,N,M)

  求X的N日指数移动平均,平滑因子a=M/

N。

其中Z是必须是结果返回指标,X是一个不为常数的表达式,M的数值应该小于N的数值。

SMA的具体算法是:

  举例:

SMA(Z,CYF13,10,5),表示对CYF13作平滑因子为5/10=0.5的指数移动平均。

  ●SUM(X,N)

  求X的N周期简单累加值。

X应该是一个不为常数的表达式,N是一个非负表达式,表示在多少周期内作简单累加,如果N为0表示从第一个有效周期(上市第一天)开始计算。

  举例:

SUM(CLOSE[1]+OPEN,20),表示20个周期内,每日的前收加上今开的简单累加值。

  ●SUMD(X,N,D)

  求X的N周期衰减累加值。

X应该是一个不为常数的表达式;N是一个非负表达式,表示在多少周期内作简单累加,如果N为0表示从第一个有效周期(上市第一天)开始计算;D是相对日期偏移的衰减系数,D应该小于N。

  举例:

SUMD(CLOSE-OPEN,5,1),表示5个周期内的当日涨的衰减累加,即(CLOSE-OPEN)+

(CLOSE[1]-OPEN[1])*4/5+(CLOSE[2]-OPEN[2])*3/5+(CLOSE[3]-

OPEN[3])*2/5+(CLOSE[4]-OPEN[4])/5

3.2.大盘函数

  ●S0(X)

  引用指南针0号指数的数值,X是一个不为常数的表达式。

  举例:

S0(CLOSE[1]+OPEN),表示求0号指数当前周期的前收加今开的数值。

  ●S0A01(X)

  引用指南针0A01指数的数值,X是一个不为常数的表达式。

  举例:

S0A01(成交量),表示求0A01指数当前周期的成交量的数值。

  ●S0AMV(X)

  引用指南针0AMV指数的数值,X是一个不为常数的表达式。

  ●S0DMV(X)

  引用指南针0DMV指数的数值,X是一个不为常数的表达式

3.3.数学函数

  ●ABS(X)

  取绝对值,ABS(X)=|X|。

  ●DERIV(Z,X)

  求X的导数,结果存放在Z中。

Z应该是结果返回指标,X是一个不为常数的表达式。

  举例:

DERIV(Z,CLOSE[1]),表示求前收的导数。

  ●EXP(X)

  求e的X次方,EXP(X)=ex。

  ●INTEGER(X)

  X向下取整,。

  ●LN(X)

  求X的自然对数。

  ●LOG(X)

  求X的以10为底的对数。

  ●MAX(A,B)

  求A、B中的较大值。

  ●MIN(A,B)

  求A、B中的较小值。

  ●MOD(X,N)

  求X模N的值,

  ●POW(X,N)

  求X的N次方,

  ●SGN(X)

  取X的符号,如果X是正数,返回1;如果X是负数返回-1;如果X是0,返回0。

  ●SQRT(X)

  取X的平方根

3.4.统计函数

  ●AVEDEV(X,N)

  求X的N日平均绝对差。

X应该是一个不为常数的表达式,N是一个非负表达式,表示在多少周期内作统计。

  举例AVEDEV(CLOSE–OPEN,10),表示统计10日内的当日涨跌的平均绝对差。

  ●DEVSQ(X,N)

  求X的N日偏差均方和。

X应该是一个不为常数的表达式,N是一个非负表达式,表示在多少周期内作统计。

  举例DEVSQ(CLOSE–OPEN,10),表示统计10日内的当日涨跌的偏差均方和。

  ●STD(X,N)

  求X的N日估算标准差。

X应该是一个不为常数的表达式,N是一个非负表达式,表示在多少周期内作统计。

  举例STD(CLOSE–OPEN,10),表示统计10日内的当日涨跌的估算标准差。

  ●STDP(X,N)

  求X的N日总体标准差。

X应该是一个不为常数的表达式,N是一个非负表达式,表示在多少周期内作统计。

  举例STDP(CLOSE–OPEN,10),表示统计10日内的当日涨跌的估算标准差。

  ●VAR(X,N)

  求X的N日估算样本方差。

X应该是一个不为常数的表达式,N是一个非负表达式,表示在多少周期内作统计。

  举例VAR(CLOSE–OPEN,10),表示统计10日内的当日涨跌的估算样本方差。

  ●VARP(X,N)

  求X的N日总体样本方差。

X应该是一个不为常数的表达式,N是一个非负表达式,表示在多少周期内作统计。

举例VARP(CLOSE–OPEN,10),表示统计10日内的当日涨跌的总体样本方差。

3.5.三角函数

  ●ACOS(X)

  求X的反余弦值。

X取值应该在0~1范围内,如果X小于0,则视为0;如果X大于1,则视为1。

返回值在0~之间。

  ●ASIN(X)

  求X的反正弦值。

X取值应该在0~1范围内,如果X小于0,则视为0;如果X大于1,则视为1。

返回值在~之间。

  ●ATAN(X)

  求X的反正切值。

返回值在0~之间。

  ●COS(X)

  求X的余弦值,X的单位是弧度,返回值在-1~1之间。

  ●SIN(X)

  求X的正弦值,X的单位是弧度,返回值在-1~1之间。

  ●TAN(X)

  求X的正切值,X的单位是弧度。

指南针指标设计(四)

4.指标点评

4.1.AR、BR、CR指标

  我们通过介绍AR、BR、CR指标的实现代码,进一步说明赋值、条件跳转和循环三种基本语句的应用。

指标的代码如下:

—————————————————————————————————

指标名称:

ABCR指标注释:

(空)默认值:

0

输入参数:

M局部变量:

V1,V2,V3,V4,V5,V6,AV,I

参数指标:

开盘价,最高价,最低价,收盘价结果指标:

AR,BR,CR

指标文本:

—————————————————————————————————

T1=0;

T2=0;

T3=0;

T4=0;

T5=0;

T6=0;

I=0;

LOOPBEGIN

IF(I=M)

THENBREAK;

ENDIF;

T1=T1+HIGH[I]-OPEN[I];

T2=T2+OPEN[I]-LOW[I];

IF(HIGH[I]>CLOSE[I+1])

THENT3=T3+HIGH[I]-CLOSE[I+1];

ENDIF;

IF(OPEN[I]>CLOSE[I+1])

THENT4=T4+OPEN[I]-CLOSE[I+1];

ENDIF;

AV=(HIGH[I+1]+LOW[I+1])/2;

IF(HIGH[I]>AV)

THENT5=T5+HIGH[I]-AV;

ENDIF;

IF(AV>LOW[I])

THENT6=T6+AV-LOW[I];

ENDIF;

I=I+1;

LOOP;

AR=T1/T2;

BR=T3/T4;

CR=T5/T6;

  —————————————————————————————————

  下面详细分析指标的代码段,文本的一开始是7条赋值语句,分别把7个局部初始化为0;

T1=0;//赋值语句

T2=0;

T3=0;

T4=0;

T5=0;

T6=0;

I=0;

  接下来是一个循环体:

LOOPBEGIN//循环开始,I是循环控制变量

  IF(I=M)//条件跳转语句,控制循环结束

  THENBREAK;//结束循环的分支

  ENDIF;

  ……

  I=I+1;//赋值语句,循环控制变量赋值

LOOP;//循环结束

  联系前面的赋值语句I=0

、循环中的赋值语句I=I+1以及控制循环的条件跳转语句可以发现,这是一个参数M次的循环,例如如果参数M为10时,这个循环需要执行10次。

  在循环体中有4条赋值语句和5条条件判断语句我们举例说明,

  T1=T1+HIGH[I]-OPEN[I];

  意思是把当前天的前面第I天的最高价和开盘价的差值加到局部变量T1中;

  T2=T2+OPEN[I]-LOW[I];

  是说把当前天往前第I天的开盘价和最低价的差值加到局部变量T2中;

  IF(HIGH[I]>CLOSE[I+1])

  THENT3=T3+HIGH[I]-CLOSE[I+1];

  ENDIF;

  如果当前天前面第I天的最高价大于第I+1天的收盘价,则把当前天往前第I天的最高价和第I+1天的收盘价的差值加到局部变量T3中;

  AV=(HIGH[I+1]+LOW[I+1])/2;

  是说把前天往前第I+1天的最高价和最低价的平均值赋给局部变量AV;

  最后是三句赋值语句,分别给三个结果返回指标赋值。

AR=T1/T2;

BR=T3/T4;

CR=T5/T6;

4.2.SRDM(动向速比率)指标

  SRDM(动向速比率)指标是一个经典指标,我们通过这个指标的实现代码,进一步说明指南针指标平台中函数的应用。

—————————————————————————————————

指标名称:

SRDM指标注释:

动向速比率默认值:

1.000

输入参数:

N局部变量:

参数指标:

最高价,最低价结果指标:

SRDM_DMZ,SRDM_DMF,SRDM_SRDM,SRDM_ASRDM,

SRDM_ADMZ,SRDM_ADMF

指标文本:

  —————————————————————————————————

IF((最高价+最低价)<=(最高价[1]+最低价[1]))

THENSRDM_DMZ=0;

ELSESRDM_DMZ=MAX(ABS(最高价-最高价[1]),ABS(最低价-最低价[1]));

ENDIF;

IF((最高价+最低价)>=(最高价[1]+最低价[1]))

THENSRDM_DMF=0;

ELSESRDM_DMF=MAX(ABS(最高价-最高价[1]),ABS(最低价-最低价[1]));

ENDIF;

SRDM_ADMZ=MA(SRDM_DMZ,10);

SRDM_ADMF=MA(SRDM_DMF,10);

IF(SRDM_ADMZ>SRDM_ADMF)

THENSRDM_SRDM=(SRDM_ADMZ-SRDM_ADMF)/SRDM_ADMZ;

ELSE

IF(SRDM_ADMZ=SRDM_ADMF)

THENSRDM_SRDM=0;

ELSESRDM_SRDM=(SRDM_ADMZ-SRDM_ADMF)/SRD

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

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1