设为首页收藏本站

 找回密码
 注册
查看: 27781|回复: 4
打印 上一主题 下一主题

如何在1分钟周期上取日线40日ATR值? [复制链接]

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
1#
发表于 2008-10-28 10:24:38 |显示全部楼层
如果要实现这个系统,首先需要至少41天的分钟数据,大概10000多一点。

然后通过HighD(),LowD,CloseD等函数计算ATR,不能直接用Average进行计算,需要自行计算平均值。
理论上是可以实现的,但是还是比较复杂的,我觉得比较简单的方法就是每天开盘前,把ATR作为参数输入。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
2#
发表于 2008-10-29 10:50:49 |显示全部楼层
我估计也应该是有问题, For循环里面的跨周期调用应该是不行的。

用笨办法看看行不行。先求5日的平均ATR,直接写5个试试,不用For语句。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
3#
发表于 2008-10-29 12:52:34 |显示全部楼层
现在应该不行,如果有公式读文件的功能才可以实现。以后会考虑增加这些函数的

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
4#
发表于 2008-10-30 12:55:19 |显示全部楼层
请按以下方式处理:
1、新建用户函数,返回值设置为数值型,命名为TrueRangeD,代码如下:
  1. Params
  2.         Numeric daysAgo(2);
  3. Vars
  4.         NumericSeries preClose;
  5.         NumericSeries barCnt;
  6.         NumericSeries dayHigh;
  7.         NumericSeries dayLow;
  8.         Numeric i;
  9.         Numeric j;
  10.         Numeric nIndex(0);
  11. Begin
  12.         If(Day != Day[1])
  13.         {
  14.                 If(InvalidNumeric != Close[1])
  15.                         preClose = Close[1];
  16.                 Else
  17.                         preClose = Open;
  18.                        
  19.                 barCnt = 1;
  20.                 dayHigh = High;
  21.                 dayLow = Low;
  22.         }Else
  23.         {
  24.                 preClose = preClose[1];
  25.                 barCnt = barCnt[1] + 1;
  26.                 dayHigh = max(dayHigh[1],High);
  27.                 dayLow = min(dayLow[1],Low);
  28.         }
  29.        
  30.         If(daysAgo == 0)
  31.         {
  32.                 If(preClose > dayHigh)
  33.                         Return preClose - dayLow;
  34.                 else if(preClose < dayLow)
  35.                         Return dayHigh - preClose;
  36.                 else
  37.                         Return dayHigh - dayLow;
  38.         }Else
  39.         {
  40.                 For i = 1 To daysAgo
  41.                 {
  42.                         If( i == 1)
  43.                         {       
  44.                                 j = 0;
  45.                         }Else
  46.                         {
  47.                                 j = j + BarCnt[j];
  48.                         }
  49.                         If (j > CurrentBar ) Return InvalidNumeric;
  50.                         nIndex = nIndex + BarCnt[j];
  51.                 }
  52.                
  53.                 If(preClose[nIndex] > dayHigh[nIndex])
  54.                         Return preClose[nIndex] - dayLow[nIndex];
  55.                 else if(preClose[nIndex] < dayLow[nIndex])
  56.                         Return dayHigh[nIndex] - preClose[nIndex];
  57.                 else
  58.                         Return dayHigh[nIndex] - dayLow[nIndex];
  59.         }
  60. End
复制代码

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
20
UID
4
积分
22709
帖子
4802
主题
64
阅读权限
255
注册时间
2007-7-20
最后登录
2024-1-15
5#
发表于 2008-10-30 12:56:51 |显示全部楼层
2、新建技术指标来调用TrueRangeD求日线的ATR,代码如下:
  1. Params
  2.         Numeric Length(5);
  3. Vars
  4.         Numeric TotalTR(0);
  5.         Numeric i(0);
  6. Begin
  7.         For i=0 To Length-1
  8.         {
  9.                 TotalTR= TotalTR+ TrueRangeD(i);
  10.         }       

  11.         PlotNumeric("ATRD",TotalTR/Length);
  12. End
复制代码

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-18 05:46

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部