分享

指南针软件指标编写教程

 高天_流云 2014-06-21
  指南针指标设计(一)

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”(注意这里的“=”是相等而不是赋值的意思),也可以用与和或把简单条件串连起来,型如:“(a > b) & ( b > c)”、“(a = b) | (b < c)”。
  “语句1”、“语句2”可以是任何语句,包括赋值、条件跳转或者循环语句。
  注意条件跳转语句必须包含“THEN”分支,但是可以没有“ELSE”分支,型如:
IF 条件
THEN
  语句1;
  语句2;
  ……
ENDIF;
1.5. 循环语句
  循环语句有3个关键字:LOOPBEGIN (表示开始循环)、LOOP (表示返回上一个LOOPBEGIN处继续执行)、BREAK (表示结束循环)。循环语句的一般形式是:

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

LOOPBEGIN
  IF 条件
  THEN BREAK;
  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 ) 
THEN BREAK;
ENDIF;
T1 = T1 + HIGH[I] - OPEN[I];
T2 = T2 + OPEN[I] - LOW[I];
IF( HIGH[I] > CLOSE[I+1] )
THEN T3 = T3 + HIGH[I] - CLOSE[I+1];
ENDIF;
IF( OPEN[I] > CLOSE[I+1] )
THEN T4 = T4 + OPEN[I] - CLOSE[I+1];
ENDIF;
AV = (HIGH[I+1] + LOW[I+1]) / 2;
IF( HIGH[I] > AV )
THEN T5 = T5 + HIGH[I] - AV;
ENDIF;
IF( AV > LOW[I] )
THEN T6 = 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 ) //条件跳转语句,控制循环结束
  THEN BREAK; //结束循环的分支
  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] )
  THEN T3 = 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]) )
THEN SRDM_DMZ = 0;
ELSE SRDM_DMZ = MAX( ABS(最高价 - 最高价[1]), ABS(最低价 - 最低价[1]) );
ENDIF;
IF( (最高价+最低价) >= (最高价[1]+最低价[1]) )
THEN SRDM_DMF = 0;
ELSE SRDM_DMF = MAX( ABS(最高价 - 最高价[1]), ABS(最低价 - 最低价[1]) );
ENDIF;
SRDM_ADMZ = MA( SRDM_DMZ, 10 );
SRDM_ADMF = MA( SRDM_DMF, 10 );
IF( SRDM_ADMZ > SRDM_ADMF )
THEN SRDM_SRDM = (SRDM_ADMZ - SRDM_ADMF) / SRDM_ADMZ;
ELSE
IF( SRDM_ADMZ = SRDM_ADMF )
THEN SRDM_SRDM = 0;
ELSE SRDM_SRDM = (SRDM_ADMZ - SRDM_ADMF) / SRDM_ADMF;
ENDIF;
ENDIF;
SMA( SRDM_ASRDM, SRDM_SRDM, N, 1 );
—————————————————————————————————
  这里着重分析指标代码中的函数调用。在第一个条件跳转语句IF……ENDIF的ELSE分支是一个赋值语句:
  SRDM_DMZ = MAX( ABS(最高价 - 最高价[1]), ABS(最低价 - 最低价[1]) );
  语句的含义是取相邻两天最高价差值的绝对值与最低价差值绝对值中较大的数值,赋给指标SRDM_DMZ。从这里可以发现,指标平台支持多重函数调用,即函数中再套函数,这种调用的套用次数没有限制。
  代码的的最后是一个调用SMA函数的赋值语句:
  SMA( SRDM_ASRDM, SRDM_SRDM, N, 1 );
  这个语句的含义是对指标SRDM_SRDM作N日指数移动平均,平滑系数是1/N。注意,DMA、EMA、SMA这一类函数的第一个参数必须是结果返回指标,函数计算是会把结果直接赋给第一个参数,所以可以不写赋值部分,这条语句也可以这样写:
  SRDM_ASRDM = SMA( SRDM_ASRDM, SRDM_SRDM, N, 1 );
实际上这两种写法是完全等价的。

 

    指南针指标设计(五)
5. 指标进阶
5.1. 常见错误
  技术指标是量化分析和设计操作方法的基础,每个自定义指标都可以反映作者对股市的独特简介。指南针自定义指标平台推出以来,广大网员编写了许多指标,其中有许多精品,但是也有一些普遍性的错误,在本章中列举一些常见的错误类型,供广大网员参考。
5.1.1. 条件语句没有考虑所有情况
  条件跳转语句属于分支结构,每个条件跳转语句都应该有两个分支——条件满足和条件不满足,原则上两个分支都需要考虑。请看下面指标TEST的实现代码(结果指标是TEST和AA):
  IF( CLOSE > OPEN )
  THEN AA = CLOSE;
  ENDIF;
  TEST = MA( AA, 10 );
  这种类型的代码在指标平台的实际使用中很常见。我们先看条件跳转语句,如果今天K线收阳(CLOSE > OPEN),则结果指标AA赋值为CLOSE,下面直接把AA作简单移动平均赋值给结果指标TEST。但是如果今天K线不收阳(CLOSE<=OPEN)那?此时结果指标AA没有被赋值,接下来对AA作MA运算是没有意义的,此时指标TEST的数值可能会和用户原来的设想大相径庭。
  依据实际情况,这段代码有多种修改方法,例如:
  IF( CLOSE > OPEN )
  THEN AA = CLOSE;
  ELSE AA = OPEN;
  ENDIF;
  TEST = MA( AA, 10 );
  或者
  AA = 0;
  IF( CLOSE > OPEN )
  THEN AA = CLOSE;
  ENDIF;
  TEST = MA( AA, 10 );
  可以看出,第一种修改方法把条件跳转的两个分支都考虑进去了,而第二种方法则是先对指标AA赋初始值,然后无论接下来的条件跳转语句是否会对AA赋值,AA的数值都是有意义的。
5.1.2. 循环语句不能正常退出
  技术指标是量化分析和设计操作方法的基础,每个自定义指标都可以反映作者对股市的独特简介。指南针自定义指标平台推出以来,广大网员编写了许多指标,其中有许多精品,但是也有一些普遍性的错误,在本章中列举一些常见的错误类型,供广大网员参考。
  有两种循环语句:一种明确知道循环次数,另一种则不明确知道循环次数。无论哪种循环语句,在实际使用中都经常出现循环不能正常退出的错误。
  1) 明确知道循环次数的循环语句
  明确知道循环次数的循环语句的一般形式如下(I是局部变量,用来控制循环次数,称为循环控制变量):
I = 0;
LOOPBEGIN
  IF( I >= 10 )
  THEN BREAK;
  ENDIF;
  …… //
  I = I + 1;
LOOP;
  具体来说,这种循环语句由三部分构成:循环控制变量(I)赋初值;通过I值判断是否需要退出循环;累加I。这三个部分是缺一不可的。但是,实际使用中缺经常出现类似下面的代码:
  LOOPBEGIN
    IF( I >= 10 )
    THEN BREAK;
    ENDIF;
    …… 
    I = I + 1;
  LOOP;
  或者
  I = 0;
  LOOPBEGIN
    IF( I >= 10 )
    THEN BREAK;
    ENDIF;
    …… 
  LOOP;
  第一中情况中,循环控制变量I没有赋初值就直接进入循环,此时I值没有意义,所以无论是接下来的条件判断语句或者累加I的操作都变成没有意义了。第二种情况则是忘了写累加I的语句,此时I一直是0,条件语句恒不满足,是个不能退出的死循环。
  2) 不明确知道循环次数的循环语句
  先观察一个实际指标的实现代码(F、N是局部变量,):
  F = 0; //用来累加“换手率”
  N = 0;
  LOOPBEGIN
    IF( F > 100 )
    THEN BREAK;
    ENDIF;
    ……
    F = F + 换手率[N];
    N = N + 1;
  LOOP;
  这个循环语句的结束条件是累加换手率超过100。从设计思想上来说没有错,但是,如果新股刚上市,所有交易日的换手率加起来也不到100,则这个指标就出现问题了,此时循环可能无法退出。应该改为下面的写法:
  F = 0; //用来累加“换手率”
  N = 0;
  LOOPBEGIN
    IF( (F > 100) & (KLINEINDEX <= 0) )
    THEN BREAK;
    ENDIF;
    ……
    F = F + 换手率[N];
    N = N + 1;
  LOOP;
  比较两段代码,可以发现第二段代码中增加了一个退出循环的条件:如果到了上市第一天,也退出循环。通过增加这个条件,避免了新股刚上市的问题。
5.1.3. 局部变量的使用
  在使用中,经常可以发现这样的代码(N是局部变量,TEST是结果指标):
  //……
  //…… 通过一段代码计算出局部变量N的数值
  TEST = MA( N, 10 );
  在通过一系列复杂的运算计算出局部变量N的值后,对N作简单移动平均并把结果赋值给结果指标TEST。这段代码的初始构想是把上面的一系列运算的结果作平均,但是最后一条语句中局部变量的用法却是错误的,得到的结果与原来的构想完全不同。实际上,最后一条语句等同于:
  TEST = N;
  要明白这一点,就要先分清楚局部变量和指标的区别。指标相当与一个数组,指标的数值会随着日期的改变而改变,对于一个指标A来说,A[0]、A[1]、A[2]是不同的数值,一般来说指标数值是不一样的。而局部变量则不同,局部变量的数值不会随着日期的改变而改变,所以N[1]、N[2]、N[3]其实都是N。所以,通过MA的算法可以看出:
  TEST = MA( N, 10 )
  = 10 * N / 10
  = N;
  总的来说,在引用函数、大盘函数和统计函数中,以X表述的参数都应该是一个包含了指标的表达式,例如:
  CLOSE
  CLOSE + OPEN
  (HIGH[1] + LOW) / 2
  等等……。
5.2. 用指标速度测试提高指标计算速度
  自定义指标的代码越复杂,计算速度就越慢。而那些实现复杂,计算速度极慢的自定义指标是系统速度的瓶颈。找到这些指标,对指标代码进行优化,甚至在必要情况下不加载这些指标,往往可以极大的提高系统速度。而自定义指标平台中的“速度测试” 功能则是找到这些“龟速指标”标的利器。
  可以在“速度测试”功能中的“添加指标”中加入一个或者几个指标,但是最方便的方法是使用“添加指标”中的“所有自定义指标”按钮,加入系统中的所有自定义指标进行测试,虽然测试速度会慢一些,但是可以对自己的所有自定义指标的速度有一个综合了解,能够更好的做取舍。

 

       指南针指标平台绘图函数说明:

指标平台绘图函数说明(一) 

画曲线 

2003年1月中旬的指南针证券软件升级中,指标平台新增了一系列功能强大的绘图函数,这些绘图函数包括:画曲线、画折线、画柱状线、画K线,画文本、画标题和画分割线等7类。通过这些绘图函数,可以实现多种画图效果。为了大家能够更好的使用绘图函数,在这里对绘图函数作一个详细的介绍。 

1、画曲线(CURVELINE) 

画曲线的函数是CURVELINE,可以有1~4个参数,画曲线函数的完整形式如下:CURVELINE( 指标表达式_X, 图线颜色_CLR, 线宽_W, 忽略条件_I ) [1] 

同时也可以有如下简化模式:
CURVELINE( 指标表达式_X ) [2] 
CURVELINE( 指标表达式_X, 图线颜色_CLR ) [3] 
CURVELINE( 指标表达式_X, 图线颜色_CLR, 线宽_W ) [4] 

各参数的含义如下:

■ 指标表达式_X 

可以是指标、常数以及指标与常数的表达式,例如CYS13、CYF5[1]、10、(OPEN+CLOSE)/ 2。需要注意的是,参数表达式中只能出现常数、结果指标和参数指标,不能出现临时指标、局部变量和输入参数。

■ 图线颜色_CLR 

这个变量用来定义图线的颜色,在系统中已经预先定义好了一些常用的颜色,引用这些颜色时,只需线输入“clr”,即可在wizard框中选择需要的颜色,这些颜色包括: 

☆clrBlack(黑色)☆clrBlue(蓝色)☆clrDefault(默认色)☆clrGreen(绿色)

☆clrPink(粉红色)☆clrPurple(紫色)☆clrRed(红色) ☆clrSky(天蓝色)

☆ clrWhite(白色)☆clrYellow(黄色) 

其中使用默认色时,系统会为图线选择一种比较合适的颜色。如果不输入这个变量(如[2]),指标平台将自动按照默认色显示指标图线。

除了以上几种颜色外,指标平台还允许使用自定义的颜色,用户可以通过RGB()函数设定自己希望的颜色。RGB函数有三个参数,按顺序分别是红、绿、蓝三种基色,指定了这三个值后,RGB函数将会生成一个系统可用的颜色,这三个参数的取值范围都是0~255。如果不知道自己希望的颜色的这三个值,可以通过指标组编辑对话框中的颜色选择对话框(注意点击“More…”按钮)找到颜色对应的红、绿、蓝三种基色的数值。

注意,这个参数不仅仅可以是常量,还可以是指标、函数等变量表达式,灵活使用这种方法,可以实现在不同的条件下,用不同的颜色画指标图线。大家可以从下面的例子中找到这种应用。

■ 线宽_W 

线宽标示曲线的宽度,以分辨率为单位,取值范围是:1~5。如果不输入这个变量,图线宽度将自动设为1。和图线颜色_CLR一样,这个参数是可以是指标、函数等变量表达式,可以在不同的条件下用不同的线宽显示指标图线。

■ 忽略条件_I 

忽律条件用于设定在什么条件下不画图线,例如显示CYS13的图线时,不希望看到CYS13大于0的部分,则可以把忽略条件设定为:CYS13 > 0,此时CYS13大于0的部分将不被显示。如果忽略条件是0,则标识不忽略。 

下面举一些画曲线的简单例子,下面每一个例子中都附带有一个zbt文件,解压压缩包后会生成到本文档所在目录,把对应的zbt文件拷贝到“盘后分析\自定指标\指标”目录即可直接使用。

1) 简单模式 

在CURVE1.zbt中只有一句话:CURVELINE(CYS13); 即画CYS13的曲线,曲线函数中仅有一个参数——指标名称,从上面的分析我们可以知道,此时系统使用默认颜色画曲线,线宽为1,不忽略任何交易日,整条曲线是完整的。 

曲线如下图示: 

2) 指定颜色 

CURVELINE( CYS13, CHOOSE(CYS13 > -1.6, clrPurple, clrYellow) ); 

在Curve2.zbt的CURVELINE函数中,指定了图线的颜色,但是,我么可以看到,指标代码中并不是单纯指定一种颜色,而是使用了CHOOSE函数,CHOOSE函数是一个简单的二选一函数,它的意思是当第一个参数为真是,返回第二个参数的数值,否则返回第三个参数的数值。在Curve2.zbt中,当CYS13大于-1.6时,指标图线是粉色的,否则指标图线是黄色的。显示效果如下图示:

仔细观察图线可能会有这样的疑问——为什么有些地方似乎CYS13大于了-1.6了,但是指标图线却是黄色,而有些地方CYS13小于-1.6,指标图线却是粉红的?这种情况与曲线的特性有关,我们看到的指标窗中的曲线并不平滑,它其实是由相邻两天对应指标值的连线连接而成,是一条很密集的折线。而连接相邻两天指标值的线段是曲线的最小绘图单位,没条线段只能有一种颜色,这种颜色由时间较晚的交易日的指标数值决定。假设第4天CYS13是-3,而第5天CYS13是2,那么连接第4第5天的线段的颜色将由第5天的指标数值来决定,此时应该是粉色的。在另外一个参数“忽略条件_I”中,也有这种情况。

3) 指定颜色与线宽 

CURVELINE( CYS13, CHOOSE(CYS13 > -1.6, clrPurple, clrYellow), 3 ) 

在CURVE3.zbt中,CURVELINE函数除了指定图线颜色,还指定了线宽(线宽_W)参数,数值为3,效果如下图所示。在CURVELINE函数中,线宽的取值范围为[1, 5],数值越大,图线越粗。注意,所有小于1的值视同1,所有大于5的值视同5。

4) 带忽略条件 

CURVELINE( CYS13, CHOOSE(CYS13 > -1.6, clrPurple, clrYellow), 3, CYS13< -4 ) 

忽略条件的作用是当第N日满足忽略条件时,不画第N日与第N-1日间的指标线。在CURVE4.zbt中,我们画出了CYS13的图线,但是忽略CYS13<-4的部分。仔细观察下图可能会发现,有些图线中CYS13的数值明显小于4,但是也被画出来了,原因和“图线颜色_CLR”一样,请参照CURVE2.zbt的说明。

5) 综合效果——渐变色 

CURVELINE( CYS13 

, RGB( ABS(MOD(KLINEINDEX*4,511)-255) 

, ABS(MOD(KLINEINDEX*4,511)-330) 

, ABS(MOD(KLINEINDEX*4,420)-350)) 

, 3 ) 

前面所举的几个关于CURVELINE的例子中,图线颜色参数都是常数或者是有限的几种颜色,这是CURVELINE的基本应用。除此以外,CURVELINE函数中的颜色参数还支持变量,允许的变量形式是:函数、结果指标、参数指标和他们的四则运算式。在CURVE5.zbt中,主要就是以KLINEINDEX函数作为变量通过RGB函数组合出每一个交易日的指标颜色,效果如下图示。

如果不希望使用RGB函数组合颜色,甚至可以直接指定一个指标作为颜色,如 CURVELINE( CYS5, CYF13, 3 )。此时每日的指标图线都以CYF13的数值作为颜色。有兴趣的用户可以自己动手试试这样的效果(注意有些地方可能看起来没有指标线,但是这不是被忽略了,而是因为这些交易日CYF13的数值转换为颜色后是黑色,和背景色一样,所以…… J )。

6) 综合效果——线宽渐变 

CURVELINE( CYS13 

, RGB( ABS(MOD(KLINEINDEX*4,511)-255) 

, ABS(MOD(KLINEINDEX*4,511)-330) 

, ABS(MOD(KLINEINDEX*4,420)-350)) 

, CHOOSE(CYS13 >-0.8, 3, CHOOSE(CYS13 > -2.8, 1, 2)) ) 

和颜色参数一样,线宽参数“线宽_W”也支持变量表达式。在CURVE6.zbt中,当CYS13>-0.8时,线宽为3,CYS13在-2.8到-0.8之间时,线宽为1,小于-2.8时线宽为2。

指标平台绘图函数说明(二) 

画折线 

2003年1月中旬的指南针证券软件升级中,指标平台新增了一系列功能强大的绘图函数,这些绘图函数包括:画曲线、画折线、画柱状线、画K线,画文本、画标题和画分割线等7类。通过这些绘图函数,可以实现多种画图效果。为了大家能够更好的使用绘图函数,在这里对绘图函数作一个详细的介绍。 

2、 画折线(ZIGLINE)
画折线的函数是ZIGLINE,可以有2~5个参数,画折线函数的完整形式如下:

ZIGLINE(周期条件_TC,图线位置_P,图线颜色_CLR,线宽_W,忽略条件_I ) [5] 

同时也可以有如下简化模式:

ZIGLINE (周期条件_TC,图线位置_P) [6] 

ZIGLINE (周期条件_TC,图线位置_P,图线颜色_CLR ) [7] 

ZIGLINE(周期条件_TC,图线位置_P,图线颜色_CLR,线宽_W,忽略条件_I ) [8]

各参数的含义如下:

n 周期条件_TC 与 图线位置_P 

这两个参数是ZIGLINE函数最基本的部分,折线是指把所有“转折点”用直线连接起来的指标图线,周期条件的作用就是确定那些交易日是转折点。周期条件应该是一个条件表达是,当周期条件非0是,表示当前交易日是转折点,例如把HHVB(OPEN,7)=0作为周期条件,那么“当前天的开盘价是过去七日的最大开盘价”的交易日将成为折线的转折点。

确定了那些交易日是转折点以后,相当于确定了转折点的横坐标,我们还需要确定转折点的纵坐标,这个纵坐标通过“图线位置_P”参数确定。

例如周期条件是第N日和第M日是两个相邻的转折点,图线位置是最高价(HIGH),则ZIGLINE函数会一个直线段把N、M两天的最高价连接起来。

n 图线颜色_CLR 

折线的图线颜色于曲线完全一致,可以参照CURVELINE函数“图线颜色”参数的说明。折线的图线颜色也支持变量表达式。

n 线宽_W 

折线函数的“线宽”参数于曲线函数完全一致,可以参照CURVELINE的“线宽”参数的说明。折线的“线宽”参数也支持变量表达式。

n 忽略条件_I 

折线函数的“忽略条件”参数于曲线函数完全一致,可以参照CURVELINE的“忽略条件”参数的说明。折线的“忽略条件”参数也支持变量表达式。 

下面举一些画折线的简单例子(K线窗叠加):

1) 简单模式 

ZIGLINE( HHVB(HIGH,7)=0, HIGH ) 

在ZIGLINE1.zbt中,ZIGLINE函数只有“周期条件”和“图线位置”两个参数,这也是折线函数最简单的应用。上例中,周期条件是HHVB(HIGH,7)=0,即当前交易日是过去7个交易日最高价的最大值;位置条件是最高价(HIGH)。画图效果如下图示(K线窗叠加的效果)。

在下图中,最晚几天没有图线,这不是有忽略条件起作用,而折线函数的性质决定的——要出现一条折线段,就必须有两个相邻的转折点,可以看出在下图最后的10天中,没有符合的HHVB(HIGH,7)=0交易日,找不到转折点,所以最后10天没有图线。事实上,折线能画到最后一个交易日的情况极少(仅当最后一个交易日满足周期条件),大多数情况最后几天是没有图线的。使用ZIGLINE函数时还需要注意一种更特殊的情况——新股K线链较短,可能整条K线链上只要一个转折点甚至一个都没有,此时将完全看不到折线!!! 

2) 综合效果 

ZIGLINE( HHVB(HIGH,7)=0, HIGH , CHOOSE(HIGH / LOW > 1.02, clrPurple,clrSky) , 3, CLOSE>OPEN ); 

在ZIGLINE2.zbt中,ZIGLINE函数的“周期条件”和“图线位置”两个参数与ZIGLINE1.zbt一样。此外:

&sup2; 当天振幅大于2%时,用紫色(clrPurple)画图线,否则用天蓝色(clrSky)画图线;

&sup2; 折线的线宽为3;

&sup2; 如果当前天收阳线,则忽略当前天与前一天的线段。

指标平台绘图函数说明(三) 

画柱状线 

2003年1月中旬的指南针证券软件升级中,指标平台新增了一系列功能强大的绘图函数,这些绘图函数包括:画曲线、画折线、画柱状线、画K线,画文本、画标题和画分割线等7类。通过这些绘图函数,可以实现多种画图效果。为了大家能够更好的使用绘图函数,在这里对绘图函数作一个详细的介绍。 

3、画柱状线(COLUMN)
柱状线函数是COLUMN,可以有3个或者3个以上的参数,画柱状线函数的完整形式如下:COLUMN(柱线类型_TYPE, 顶价_TOP, 底价_BOTTOM, 图线颜色_CLR, 忽略条件_I, 价格1_V1, 价格颜色1_C1, ... ) [9] 

同时也可以有如下简化模式:
COLUMN (柱线类型_TYPE, 顶价_TOP, 底价_BOTTOM) [10] 

COLUMN (柱线类型_TYPE, 顶价_TOP, 底价_BOTTOM, 图线颜色_CLR) [11] 

COLUMN (柱线类型_TYPE, 顶价_TOP, 底价_BOTTOM, 图线颜色_CLR, 忽略条件_I) [12] 

各参数的含义如下:

n 柱线类型_TYPE 

一共有3种类型的柱状线:

&sup2; 同向柱状线(clt1Dir);

&sup2; 异向柱状线(clt2Dir);

&sup2; 悬空柱状线(cltSuspend);

同向柱状线与异向柱状线和指标组平台中一样,在本函数中新增了悬空柱状线。所谓悬空柱状线是指不以0为基点的柱状线,在后面的例子中可以清除的看到它们的区别。

n 顶价_TOP和底价_BOTTOM 

要确定一条柱状线,就需要确定柱状线顶部和底部的位置,这两个信息通过“顶价”和“底价”参数确定。

注意,虽然“底价”也是COLUMN函数中必须填写的参数,但是底价只有在悬空柱状线中才起作用,对于同向和异向柱状线来说,这个参数不起作用,可以随便填(但是必须填)。

n 图线颜色_CLR 

这里说的图线颜色其实是图线的默认颜色,如果COLUMN函数中没有“价格”和“价格颜色”的参数列表,这个图线颜色可以唯一确定柱状线的颜色。

n 忽略条件_I 

柱状线的忽略条件的含义和曲线、折线函数基本相同,可以参照前面对忽略条件的说明。

n 价格、价格颜色列表 

理论上来说,价格、价格颜色列表的元素个数没有限制,但是这两个参数必须成对出现,每个价格都必须有一个价格颜色与之对应。列表中的每个元素应该按照价格降序排列,排在前面的元素价格应该较大。

每个价格、价格颜色表示当指标值大于价格(V)时柱状线使用的颜色。我们可以通过一个简单的例子了解价格、价格颜色列表的作用:

COLUMN( clt2Dir, CYS13, 0, clrGreen, 0 , 0, clrRed , -4, clrYellow , -10, clrPurple ); 

上例中,默认颜色是绿色(clrGreen),价格、价格颜色列表中一共有3个元素,综合起来看,每条柱状线CYS13大于等于0的部分用红色(clrRed)画,大于等于-4小于0的部分用黄色(clrYellow)画,大于等于-10小于-4的部分用紫色(clrPurple)画,小于-10的部分没有定义,使用“图线颜色”参数中所指定的颜色——绿色(clrGreen)。最终的图线效果如下图示:

下面举一些画柱状线的简单例子:

1) 简单模式1——同向与异向柱状线 

COLUMN( clt2Dir, HIGH - MA(HIGH,10), 0, CHOOSE(OPEN < CLOSE,clrRed,clrGreen) ) 

在COL1.zbt中,COLUMN函数画的是一条异向柱状线;顶价是今天的最高价与过去10日最高价简单平均的差值;如前面所说,“底价”参数只在悬空柱状线(cltSuspend)中起作用,同向和异向柱状线中可以随便填写,这里填入一个0;在图线颜色上,这个例子中COLUMN函数没有价格、价格颜色列表,每根柱状线的颜色都由图线颜色参数确定——阳线时用红色,阴线时用绿色。

2) 简单模式2——悬空柱状线 

COLUMN(cltSuspend,CLOSE,OPEN, CHOOSE(CLOSE >= OPEN,clrRed,clrGreen)) 

在COL2.zbt中,COLUMN函数画了一条悬空柱状线,顶价是收盘价,底价是开盘价,图线颜色与正常K线的颜色一致,这其实就是正常K线的实体部分。效果如下图示:

3) 综合效果

COLUMN( cltSuspend, HIGH, LOW, clrGreen, CLOSE / OPEN > 1.02 , HIGH - (HIGH - LOW) * 0.2, clrYellow , HIGH - (HIGH - LOW) * 0.4, clrBlue , HIGH - (HIGH - LOW) * 0.6, clrRed , HIGH - (HIGH - LOW) * 0.8, clrSky , HIGH - (HIGH - LOW), clrPurple ); 

COL3.zbt中,COLUMN画的是一条悬空柱状线,柱状线的顶价是最高价(HIGH),底价是最低价(LOW),默认图线颜色是绿色,如果K线长阳(CLOSE / OPEN > 1.02)则忽略当天的柱状线,通过后面的价格、价格颜色列表,把每根柱状线的平均分割为5段,每段一种颜色。

值得注意的是上图中虽然“图线颜色”参数是绿色(clrGreen),但是因为价格、价格颜色列表已经完全含盖柱状线的范围,所以“图线颜色”参数相当于不起作用。

指标平台绘图函数说明(四) 

画K线(KLINE) 

2003年1月中旬的指南针证券软件升级中,指标平台新增了一系列功能强大的绘图函数,这些绘图函数包括:画曲线、画折线、画柱状线、画K线,画文本、画标题和画分割线等7类。通过这些绘图函数,可以实现多种画图效果。为了大家能够更好的使用绘图函数,在这里对绘图函数作一个详细的介绍。 

4、画K线(KLINE) 
画K线的函数是KLINE,可以有4个或者4个以上的参数,画K线函数的完整形式如下:

KLINE( 开_OPEN , 高_HIGH , 低_LOW , 收_CLOSE , 图线颜色_CLR , 忽略条件_I , 价格1_V1, 价格颜色1_C1, ... ) [13] 

同时也可以有如下简化模式:

KLINE ( 开_OPEN, 高_HIGH, 低_LOW, 收_CLOSE ) [14] 

KLINE (开_OPEN, 高_HIGH, 低_LOW, 收_CLOSE, 图线颜色_CLR) [15] 

KLINE( 开_OPEN , 高_HIGH , 低_LOW , 收_CLOSE , 图线颜色_CLR , 忽略条件_I ) [16] 

各参数的含义如下:

n 开_OPEN, 高_HIGH, 低_LOW, 收_CLOSE 

构成K线的四个基本指标,分别对应正常K线的开、高、低、收四个指标,输入时注意参数顺序。

n 图线颜色_CLR、忽略条件_I、价格、价格颜色列表 

KLINE函数的“图线颜色”、“忽略条件”、“价格、价格颜色列表” 参数和柱状线函数完全一样,可以参照COLUMN函数中的说明。

一般而言,K线都分为阴线和阳线,用不同的颜色显示,所以,一般使用KLINE函数时,“图线颜色”参数应该使用CHOOSE函数,例如CHOOSE( CLOSE >= OPEN, clrRed, clrGreen )。 

下面举一些画K线的简单例子: 
1、简单模式

KLINE( OPEN, HIGH, LOW, CLOSE, CHOOSE(CLOSE>=OPEN,clrRed,clrGreen) 

KLINE1.zbt中,KLINE函数画的是一条标准的K线,值得留意的地方是颜色的设定,KLINE函数中,只有一个“图线颜色”的参数,但是,通过CHOOSE函数,可以针对多种情况定义多种颜色。

2、综合效果1

KLINE( OPEN, HIGH, LOW, CLOSE, CHOOSE(CLOSE>OPEN,clrRed,clrGreen), 0 , 10.5, clrBlue , 10.3, clrPink , 10.1, clrPurple , 9.9, clrSky , 9.7, clrWhite , 9.5, clrYellow ); 

和KLINE1.zbt相比,在KLINE2.zbt中K线除了默认颜色外,还增加了价格、价格颜色列表。在颜色列表中,大于价格10.5的部分用蓝色画、[10.5, 10.3]的部分使用粉色、……、[9.7,9.5]的部分使黄色、小于9.5的部分在颜色列表中没有设定,用“图线颜色”参数中设定的默认色画。效果如下图示:

3、综合效果2

KLINE( OPEN, HIGH, LOW, CLOSE, CHOOSE(CLOSE>OPEN,clrRed,clrGreen), OPEN >CLOSE , HIGH - (HIGH - LOW) * 0.2, clrYellow , HIGH - (HIGH - LOW) * 0.4, clrBlue , HIGH - (HIGH - LOW) * 0.6, clrRed , HIGH - (HIGH - LOW) * 0.8, clrSky , HIGH - (HIGH - LOW), clrPurple ) 

和KLINE1.zbt相比,在KLINE3.zbt中增加了颜色列表和忽略条件,和KLINE2.zbt不同的是,KLINE2.zbt中的颜色列表中的价格都是常数,而KLINE3.zbt中的颜色列表其实是把当前天K线等分为5个部分,每个部分使用一种颜色显示。此外KLINE3.zbt中增加了忽略条件(OPEN >CLOSE),也就是说,忽略所有阴线交易日,仅画出阳线交易日的K线 。


实例:

思路:寻找领头羊

__ZBT

_COMM        
_PAR        
_VAR        
_ZB        HIGH, LOW, CLOSE, CYC13, CYC34, POC
_LOCAL        
_RES        L, L1, L2, L3
_DEF        0.000
_DCOMM        寻找领头羊
_DCOMM        { 绿线上穿紫线时,可作波段买入,绿线上穿白线时很可能是大牛股.}
_CODE
写法:

指南针软件指标编写教程7


套改公式方法

HIGH, LOW, CLOSE, CYC13, CYC34, POC  填在参数指标栏;
L, L1, L2, L3 填在结果指标栏。
编码区:
指标文本:
SMA(L,HIGH,21,2);
SMA(L1,LOW,21,2);
SMA(L2,LOW,5,1);
SMA(L3,CLOSE,2,1);
CURVELINE(L*1.05,clrWhite);
CURVELINE(L1*0.95,clrYellow);
CURVELINE(L2,clrPink);
CURVELINE(L3,clrGreen);
CURVELINE(CHOOSE(CROSSUP(L3,L2),(L*1.05)*1.05,L2),clrPink);
CURVELINE(CHOOSE(CROSSUP(L3,L*1.05)&CYC13>CYC34,(L*1.05)*1.1,(L1*0.95)),clrYellow);
TITLE("波段买入:",CHOOSE(CROSSUP(L3,L2),(L*1.05)*1.05,0),"",clrPink,"领头羊:",CHOOSE(CROSSUP(L3,L*1.05),(L*1.05)*1.1,0),"",clrYellow,"超跌:",CHOOSE(L3<=L1*0.95,(L1*0.95)*1.03,0)|CHOOSE(L2<=L1*0.95,(L1*0.95)*1.06,0),"",clrGreen);
COLUMN(cltSuspend,CHOOSE(L3<=L1*0.95,(L1*0.95)*1.03,L1*0.95),L1*0.95,clrGreen);
COLUMN(cltSuspend,CHOOSE(L2<=L1*0.95,(L1*0.95)*1.06,L1*0.95),L1*0.95,clrRed);
DRAWTEXT(L*1.05,CROSSUP(L*1.05,L3),clrGreen,posBottom,posMid,"卖");

写成后的公式指标全文:
__ZBT
_COMM        
_PAR        
_VAR        
_ZB        HIGH, LOW, CLOSE, CYC13, CYC34, POC
_LOCAL        
_RES        L, L1, L2, L3
_DEF        0.000
_DCOMM        寻找领头羊
_DCOMM        { 绿线上穿紫线时,可作波段买入,绿线上穿白线时很可能是大牛股.}
_CODE

SMA(L,HIGH,21,2);
SMA(L1,LOW,21,2);
SMA(L2,LOW,5,1);
SMA(L3,CLOSE,2,1);
CURVELINE(L*1.05,clrWhite);
CURVELINE(L1*0.95,clrYellow);
CURVELINE(L2,clrPink);
CURVELINE(L3,clrGreen);
CURVELINE(CHOOSE(CROSSUP(L3,L2),(L*1.05)*1.05,L2),clrPink);
CURVELINE(CHOOSE(CROSSUP(L3,L*1.05)&CYC13>CYC34,(L*1.05)*1.1,(L1*0.95)),clrYellow);
TITLE("波段买入:",CHOOSE(CROSSUP(L3,L2),(L*1.05)*1.05,0),"",clrPink,"领头羊:",CHOOSE(CROSSUP(L3,L*1.05),(L*1.05)*1.1,0),"",clrYellow,"超跌:",CHOOSE(L3<=L1*0.95,(L1*0.95)*1.03,0)|CHOOSE(L2<=L1*0.95,(L1*0.95)*1.06,0),"",clrGreen);
COLUMN(cltSuspend,CHOOSE(L3<=L1*0.95,(L1*0.95)*1.03,L1*0.95),L1*0.95,clrGreen);
COLUMN(cltSuspend,CHOOSE(L2<=L1*0.95,(L1*0.95)*1.06,L1*0.95),L1*0.95,clrRed);
DRAWTEXT(L*1.05,CROSSUP(L*1.05,L3),clrGreen,posBottom,posMid,"卖");
__END

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多