设为首页收藏本站

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

ATR用于止损的问题 [复制链接]

Rank: 4

精华
0
UID
84717
积分
442
帖子
113
主题
46
阅读权限
50
注册时间
2011-12-6
最后登录
2013-9-11
跳转到指定楼层
1#
发表于 2013-3-21 14:32:47 |只看该作者 |倒序浏览
本帖最后由 wwwasdlike 于 2013-3-21 14:34 编辑



有个小技术问题请教大神,本人想用ATR做止损。用昨日最高价减最低价得到TR。再计算ATR的时候出现问题。
公式如下
        TR = HighD111[1] - LowD111[1]; (highd111是我自己编的变量,与haghd意义相同。TB的内建函数highD是错误的,默认数值为2,应该为1)
        PlotNumeric("TR",TR);
       
        ATR = Average(TR ,3);
                PlotNumeric("ATR",ATR);       
TR为循环变量,我在求ATR的时候计算的总是前三跟BAR的TR值。而不是前三天的。所以导致ATR在计算了前三跟BAR以后就变成了跟TR一样的数值。求如何解决! 我想算前三天的TR值!
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
无尽的野望

Rank: 4

精华
0
UID
84717
积分
442
帖子
113
主题
46
阅读权限
50
注册时间
2011-12-6
最后登录
2013-9-11
2#
发表于 2013-3-21 14:40:12 |只看该作者
请高人解答一下

使用道具 举报

Rank: 4

精华
0
UID
84717
积分
442
帖子
113
主题
46
阅读权限
50
注册时间
2011-12-6
最后登录
2013-9-11
3#
发表于 2013-3-21 15:08:57 |只看该作者
没有高手么?!!。。。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
3
UID
5
积分
26584
帖子
12686
主题
49
阅读权限
200
注册时间
2007-7-20
最后登录
2021-11-3
4#
发表于 2013-3-21 19:16:54 |只看该作者
本帖最后由 小米 于 2013-3-21 19:21 编辑
wwwasdlike 发表于 2013-3-21 15:08
没有高手么?!!。。。


先建一个函数,比如命令为atrD
  1. Params
  2.         Numeric daysAgo(2);
  3. Vars
  4.         NumericSeries barCnt;
  5.         NumericSeries dayHigh;
  6.         NumericSeries dayLow;
  7.         NumericSeries dayatr;
  8.         Numeric i;
  9.         Numeric j;
  10.         Numeric nIndex(0);
  11.         Numeric CBIndex;
  12. Begin
  13.         CBIndex = CurrentBar;
  14.         If(CBIndex == 0 || Date != Date[1])
  15.         {
  16.                 barCnt = 1;
  17.                 dayHigh = High;
  18.                 daylow = low;
  19.         }Else
  20.         {
  21.                 barCnt = barCnt + 1;
  22.                 If(High > dayHigh)
  23.                         dayHigh = High;
  24.                 If(Low < dayLow)
  25.                         dayLow = Low;
  26.                        
  27.                
  28.         }
  29.         dayatr = dayhigh - daylow;
  30.         If(daysAgo == 0)
  31.         {
  32.                 return dayatr;
  33.         }Else
  34.         {
  35.                 For i = 1 To daysAgo
  36.                 {
  37.                         If( i == 1)
  38.                         {       
  39.                                 j = 0;
  40.                         }Else
  41.                         {
  42.                                 j = j + BarCnt[j];
  43.                         }
  44.                         If (j > CBIndex )
  45.                                 Return InvalidNumeric;
  46.                         nIndex = nIndex + BarCnt[j];
  47.                 }
  48.                 Return dayatr[nIndex];
  49.         }
  50. End
复制代码
再到公式应用里计算取得前三天的high-low的平均值。如下公式应用里的avgatr就是你想要的那个值。
  1. Params
  2.         Numeric length(3);
  3. Vars
  4.        
  5.         Numeric i;
  6.         Numeric aa;
  7.         Numeric sumatr;
  8.         Numeric avgatr;
  9. Begin
  10.         for i = length downto 1
  11.         {
  12.                 aa = atrd(i);
  13.                 sumatr =sumatr +aa;
  14.         }
  15.         avgatr = sumatr/length;
  16.         Commentary(Text(avgatr));
  17. End
复制代码

使用道具 举报

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

bottom

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

GMT+8, 2024-5-19 15:31

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部