打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
指南针指标编写设计(五)
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. 用指标速度测试提高指标计算速度
  自定义指标的代码越复杂,计算速度就越慢。而那些实现复杂,计算速度极慢的自定义指标是系统速度的瓶颈。找到这些指标,对指标代码进行优化,甚至在必要情况下不加载这些指标,往往可以极大的提高系统速度。而自定义指标平台中的“速度测试”功能则是找到这些“龟速指标”标的利器。
  可以在“速度测试”功能中的“添加指标”中加入一个或者几个指标,但是最方便的方法是使用“添加指标”中的“所有自定义指标”按钮,加入系统中的所有自定义指标进行测试,虽然测试速度会慢一些,但是可以对自己的所有自定义指标的速度有一个综合了解,能够更好的做取舍。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
指南针自定义指标语法知识(1)
指南针指标设计(一)
代码调试是程序员必备技巧,简单示例,VS如何调试C程序
【原创】自制编程语言-7 注释&if语句初步
InstallShield脚本语言的初识
【指南针鬼域平台和自定义指标平台】参考使用版
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服