开拓者期货期权程序化系统交易论坛

标题: 我想编写一个指标 [打印本页]

作者: jiqi    时间: 2007-9-17 23:41:36     标题: 我想编写一个指标

我想编写一个指标,能统计出任何一段BAR数据中阴线和阳线的比例。
请帮忙!
作者: nopain    时间: 2007-9-18 09:47:30

原帖由 jiqi 于 2007-9-17 23:41 发表
我想编写一个指标,能统计出任何一段BAR数据中阴线和阳线的比例。
请帮忙!


对于取指定返回内的阳线,阴线,有两种方式:
一是按照移动平均的方式,传入N值,求最近N个Bar的阴阳线比例。
二是求从第一个Bar以来所有的阴阳线比例。
以下代码用函数来实现取阴阳线个数值,当Length<=0时,按第二种方式处理,否则按第一种方式处理。
用户函数GetMyBars代码如下:
  1. //------------------------------------------------------------------------
  2. // 简称: GetMyBars
  3. // 名称: 获取涨或跌的Bars
  4. // 类别: 用户函数
  5. // 类型: 用户函数
  6. // 输出: 布尔型
  7. //------------------------------------------------------------------------

  8. Params
  9.         Numeric Length(10);
  10.         NumericRef UpBars;
  11.         NumericRef DnBars;
  12. Vars
  13.         NumericSeries Value1(0);
  14.         NumericSeries Value2(0);
  15.         Numeric i;
  16. Begin
  17.         If(Length <= 0)
  18.         {
  19.                 If(CurrentBar == 0)
  20.                 {
  21.                         Value1 = 0;
  22.                         Value2 = 0;
  23.                 }Else
  24.                 {
  25.                         Value1 = Value1[1];
  26.                         Value2 = Value2[1];
  27.                 }

  28.                 If(Close>Open)
  29.                         Value1 = Value1 + 1;
  30.                        
  31.                 If(Close<Open)
  32.                         Value2 = Value2 + 1;
  33.                        
  34.         }Else
  35.         {
  36.                 If ( CurrentBar < Length || Close[Length] == InvalidNumeric || Open[Length] == InvalidNumeric ||
  37.                         Value1[1] == InvalidNumeric || Value2[1] == InvalidNumeric)
  38.                 {
  39.                         for i = 0 to Length - 1
  40.                         {
  41.                                 Value1 = Value1 + IIF(Close[i]>Open[i],1,0);
  42.                                 Value2 = Value2 + IIF(Close[i]<Open[i],1,0);
  43.                         }
  44.                 }Else
  45.                 {
  46.                         Value1 = Value1[1] + IIF(Close>Open,1,0) - IIF(Close[Length]>Open[Length],1,0);
  47.                         Value2 = Value2[1] + IIF(Close<Open,1,0) - IIF(Close[Length]<Open[Length],1,0);
  48.                 }               
  49.         }
  50.                
  51.         UpBars = Value1;
  52.         DnBars = Value2;       
  53.         Return true;
  54. End

  55. //------------------------------------------------------------------------
  56. // 编译版本        GS2004.06.12
  57. // 用户版本        2007/09/18 09:28
  58. // 版权所有        nopain
  59. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  60. //                        每一版本的TrabeBlazer公式修改和重写的权利
  61. //------------------------------------------------------------------------
复制代码


技术指标jiqi代码如下:
  1. //------------------------------------------------------------------------
  2. // 简称: jiqi
  3. // 名称: 用户指标
  4. // 类别: 技术指标
  5. // 类型: 其它类
  6. // 输出:
  7. //------------------------------------------------------------------------

  8. Params
  9.         Numeric Length(10);
  10. Vars
  11.         Numeric UpCount;
  12.         Numeric DnCount;
  13. Begin
  14.         GetMyBars(Length,UpCount,DnCount);
  15.         PlotNumeric("UpDn",UpCount/DnCount);
  16. End

  17. //------------------------------------------------------------------------
  18. // 编译版本        GS2004.06.12
  19. // 用户版本        2007/09/18 09:25
  20. // 版权所有        nopain
  21. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  22. //                        每一版本的TrabeBlazer公式修改和重写的权利
  23. //------------------------------------------------------------------------
复制代码

作者: nopain    时间: 2007-9-18 09:48:44

注意,当返回的阴线数量为0时,因为0不能作为除数,所以会出现无效值。
作者: jiqi    时间: 2007-9-19 22:44:17

感谢热心回复、、、、、、
作者: jiqi    时间: 2007-9-19 23:06:28

用户函数编译是出错,RETURN返回值类型不符,
不知什么原因
作者: skywalker    时间: 2007-9-19 23:42:50

原帖由 jiqi 于 2007-9-19 23:06 发表
用户函数编译是出错,RETURN返回值类型不符,
不知什么原因


NOPAIN写的那段例子用户函数返回值是布尔值,所以你在新建用户函数的时候,必须把该函数的返回值选择为布尔值
  1. // 简称: GetMyBars
  2. // 名称: 获取涨或跌的Bars
  3. // 类别: 用户函数
  4. // 类型: 用户函数
  5. // 输出: 布尔型
复制代码

作者: fugongcha    时间: 2018-2-13 09:50:05






欢迎光临 开拓者期货期权程序化系统交易论坛 (http://bbs.tb18.net/) Powered by Discuz! X2