问答

怎么计算CMRA因子

作者:admin 2021-09-06 我要评论

有两列数据,一列是日期,一列是收益率。我想基于每天,找出第21天的数,第42天,第36天......第252天的收益率。然后第二十一天的数作为第一个月收益率,42天收...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

有两列数据,一列是日期,一列是收益率。我想基于每天,找出第21天的数,第42天,第36天......第252天的收益率。然后第二十一天的数作为第一个月收益率,42天收益率/21天收益率-1作为第二个月收益率,63/42-1做第三个月,以此类推,会得到12个月的收益率。这些数ln(x+1).然后每个月的值等于前面的累加(也就是算出来了12个值,然后这十二个值+1,再lin。得到12个新值。然后这些值,第一个作为第一个值,第1+2作为第二个值,第1+2+3作为第三个值。1+2+3+。。。+12作为第12个值)。最后,求出这12个里面最大值Max(Z(T)),最小值Min(Z(T))。最后LN(1+Max(Z(T)))-LN(1+Min(Z(T)))作为最终的结果,也就是当天的CMRA因子值。

这种除了循环有没有比较好的写法啊?

我能想到的,就是用日期循环,基于每个日期,然后选出252天,然后一步一步去标记去算。DolphinDB database有很多函数,想知道有没有更好的简便方法?

###
def calcCRMA(date, ret){
    t=table(date as date, ret as ret)
    t[`cr1] =log(move(ret, 21) +1)
    diff = t[`cr1] - log( move(ret, 21))
    for(x in 2 .. 12){
        t["cr" + string(x) ] = diff + log(move(ret, 21*x))
    }
    return exec log(1 + rowMax(cr1,cr2,cr3,cr4,cr5,cr6,cr7,cr8,cr9,cr10,cr11,cr12)) - log(1 + rowMin(cr1,cr2,cr3,cr4,cr5,cr6,cr7,cr8,cr9,cr10,cr11,cr12)) from t
}

//产生一些模拟数据
t=table(2019.01.01 + 0..252 as date,  norm(0.0005, 0.0001, 253)+ 0.01 as ret, take(`ibm, 253) as sym)

//计算全部股票每天的crma
select sym,date, ret, calcCRMA(date, ret) as crma from t context by sym

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 怎么计算CMRA因子

    怎么计算CMRA因子

  • 对DolphinDB表中的列做基于条件的计算

    对DolphinDB表中的列做基于条件的计算

  • 请教linux权限问题

    请教linux权限问题

  • 数据去重时out of memory

    数据去重时out of memory

腾讯云代理商
海外云服务器