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 ); 实际上这两种写法是完全等价的。 |
|