设为首页收藏本站

 找回密码
 注册
楼主: 追涨杀跌

跨周期数据转换函数以及跨周期技术指标调用的实现 [复制链接]

Rank: 4

精华
0
UID
2864
积分
253
帖子
23
主题
6
阅读权限
50
注册时间
2008-11-24
最后登录
2019-3-30
发表于 2011-7-14 09:16:02 |显示全部楼层
老大,能否把RSI和SAR的跨周期完成,谢谢!

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
30159
积分
1116
帖子
280
主题
23
阅读权限
60
注册时间
2011-3-23
最后登录
2019-3-21
发表于 2011-7-14 13:20:11 |显示全部楼层
回复 66# 追涨杀跌


    恩 那就只能打包写在一起啦

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
30159
积分
1116
帖子
280
主题
23
阅读权限
60
注册时间
2011-3-23
最后登录
2019-3-21
发表于 2011-7-14 13:39:24 |显示全部楼层
发现一个问题,还请老师帮忙解决一下
   mtBarCnt = MtBar(TimeFrame,BarsBack,refCurBar,refOpen,refHigh,refLow,refClose,refVol,refOpenInt);
// 目标时间周期内小周期Bar个数的索引
        mtCurBar = refCurBar; // 目标时间周期下的Bar索引
        mtClose = refClose; // 目标时间周期下的收盘价


    关于目标周期数据的回溯会出现错误,如果mtclose,为目标周期的收盘价,往前回溯 1 个数据可以写成 mtclose[mtBarCnt],没有问题,但是如果我的回溯周期是 [N] 的话,则非常难以取值,写成
mtclose[mtBarCnt*N]  的形式 经观察比较输出值错误,请追涨老师解决这个问题,因为很多策略都需要用到大于1 的回溯值

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
发表于 2011-7-14 15:59:25 |显示全部楼层
本帖最后由 追涨杀跌 于 2011-7-14 16:00 编辑

回复 69# 读书山林

这种就要用循环的方式,可以参考 mtSummation的实现部分。
Params
        NumericSeries Price(1);
        NumericSeries BarCnt(0);
        Numeric Length(10);
Vars
        NumericSeries SumValue(0);
        Numeric i;
        Numeric j(0);
Begin
        SumValue = 0;
        For i = 1 to Length
        {
                If (Price[j] <> InvalidNumeric)
                {
                        SumValue = SumValue + Price[j];
                        j = j + BarCnt[j];
                }
                else Break;
        }

        Return SumValue;
End

最关键的一句就是:j = j + BarCnt[j]

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
发表于 2011-7-14 16:02:01 |显示全部楼层
老大,能否把RSI和SAR的跨周期完成,谢谢!
cxwh 发表于 2011-7-14 09:16


RSI已经完成,请查看前面的帖子。SAR的麻烦点,再等几天吧。

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
30159
积分
1116
帖子
280
主题
23
阅读权限
60
注册时间
2011-3-23
最后登录
2019-3-21
发表于 2011-7-14 17:39:09 |显示全部楼层
老师给解释一下啊,j = j + BarCnt[j]有点看不明白 ,
要回溯的周期n,和j的 关系又是什么呢,老师给写个回溯周期的函数吧  或者写段代码 作为引用参数返回也行啊

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
30159
积分
1116
帖子
280
主题
23
阅读权限
60
注册时间
2011-3-23
最后登录
2019-3-21
发表于 2011-7-15 11:49:03 |显示全部楼层
根据追涨大侠的提示 看了下代码 ,如果Length 为目标周期下的回溯周期[Length ],应该是求  1 to Length 内 barcnt  的 累计相加求和,因为每个目标周期内的barcnt  不相等 否则直接Length *barcnt   就可以啦
  1. //------------------------------------------------------------------------
  2. // 简称: MTRef
  3. // 名称: 跨期求回溯周期
  4. // 类别: 用户函数
  5. // 类型: 用户函数
  6. // 输出: 数值型
  7. //------------------------------------------------------------------------

  8. Params

  9.         NumericSeries BarCnt(0);//目标周期内小周期的bar
  10.         Numeric Length(10);// 目标周期下的回溯周期
  11. Vars

  12.                 NumericSeries mtBarCnt(1);

  13.         Numeric i;
  14.         Numeric j(0);// 与目标周期下的回溯周期 等值的小周期回溯周期值
  15. Begin

  16.         For i = 1 to Length
  17.         {
  18.                 If (mtBarCnt[j] <> InvalidNumeric)
  19.                 {

  20.                         j = j + BarCnt[j];
  21.                 }
  22.                 else Break;
  23.         }
  24.         Return J;
  25. End
复制代码
追涨大侠看看这样写对吗,

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
30159
积分
1116
帖子
280
主题
23
阅读权限
60
注册时间
2011-3-23
最后登录
2019-3-21
发表于 2011-7-15 12:04:21 |显示全部楼层
无效值判断有问题 是直接去掉还是怎么修改

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
0
UID
20842
积分
931
帖子
382
主题
2
阅读权限
255
注册时间
2010-12-3
最后登录
2022-2-15
发表于 2011-7-18 18:30:40 |显示全部楼层
本帖最后由 追涨杀跌 于 2011-7-18 18:57 编辑

回复 73# 读书山林

我看了一下,觉得还是写得有点问题,我试着改了一下,你测一下看是不是正确?
  1. //------------------------------------------------------------------------
  2. // 简称: MtRef
  3. // 名称: 跨周期求回溯周期
  4. // 类别: 用户函数
  5. // 类型: 用户函数
  6. // 输出: 数值型
  7. //------------------------------------------------------------------------


  8. Params

  9.         NumericSeries mtBarCnt(0);        // MtBar函数返回的mtBarCnt值
  10.         Numeric Length(10);              // 目标周期下的回溯周期
  11. Vars
  12.         Numeric i;
  13.         Numeric j(0); // 与目标周期下的回溯周期 等值的小周期回溯周期值
  14. Begin

  15.         For i = 1 to Length
  16.         {
  17.                 If (mtBarCnt[j] <> InvalidNumeric)
  18.                 {

  19.                         j = j + mtBarCnt[j];
  20.                 }
  21.                 else Break;
  22.         }
  23.         Return j;
  24. End
复制代码

使用道具 举报

Rank: 5Rank: 5

精华
1
UID
30159
积分
1116
帖子
280
主题
23
阅读权限
60
注册时间
2011-3-23
最后登录
2019-3-21
发表于 2011-7-19 09:08:05 |显示全部楼层
恩 谢谢老大 ok啦

使用道具 举报

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

bottom

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

GMT+8, 2024-3-28 16:35

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部