全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 python论坛
4916 4
2019-04-19
数据:
rsidata.head(10)
DateClosePrcChangeupPrcdownPrc

2014/1/3

3.79

-0.03

0

0.03

2014/1/6

3.75

-0.04

0

0.04

2014/1/7

3.77

0.02

0.02

0

2014/1/8

3.8

0.03

0.03

0

2014/1/9

3.79

-0.01

0

0.01

2014/1/10

3.8

0.01

0.01

0

2014/1/13

3.82

0.02

0.02

0

2014/1/14

3.79

-0.03

0

0.03

2014/1/15

3.76

-0.03

0

0.03

2014/1/16

3.76

0

0

0

6日RSI
ta.RSI(BOCMclp,6)

2014/1/2

NaN

2014/1/3

NaN

2014/1/6

NaN

2014/1/7

NaN

2014/1/8

NaN

2014/1/9

NaN

2014/1/10

42.85714

2014/1/13

51.21951

2014/1/14

40.54054

2014/1/15

32.42742

2014/1/16

32.42742

求解其中的具体算法,网上的EMA公式 Y=[2*X+(N-1)*Y’]/(N+1) ,自已套了多次,得不到相同的结果,请前辈指点一下,万谢!如有人能解出来,我发个小红包作为奖励。

数据是经过一阶差分平移整理后的
DateClosePrcChangeupPrcdownPrc

2014/1/3

3.79

-0.03

0

0.03

2014/1/6

3.75

-0.04

0

0.04

2014/1/7

3.77

0.02

0.02

0

2014/1/8

3.8

0.03

0.03

0

2014/1/9

3.79

-0.01

0

0.01

2014/1/10

3.8

0.01

0.01

0

2014/1/13

3.82

0.02

0.02

0

2014/1/14

3.79

-0.03

0

0.03

2014/1/15

3.76

-0.03

0

0.03

2014/1/16

3.76

0

0

0


通过这两列就可以计算出6日RSI

2014/1/10

42.85714

2014/1/13

61.53847

2014/1/14

66.66667

2014/1/15

46.15385

2014/1/16

30

第1项计算
avgUP=(0.02+0.03+0.01)/6=0.06/6=0.01
avgDown=(0.03+0.04+0.01)/6=0.08/6=0.04/3
RS=0.01/(0.04/3)=3/4
RSI=3/7 *100 =  42.857143
第2项传统算法
avgUP=(0.02+0.03+0.01+0.02)/6=0.08/6
avgDown=(0.04+0.01)/6=0.05/6
RS=0.08/0.05=8/5
RSI=8/13 *100 =  61.53847
第3项传统算法
avgUP=(0.02+0.03+0.01+0.02)/6=0.08/6
avgDown=(0.01+0.03)/6=0.04/6
RS=0.08/0.04=8/4
RSI=8/12 *100 = 66.66666666

据了解第三方TALIB包是采用EMA计算,所以跟传统的计算方不同,但首项是一样的,因为作为基数

2014/1/10

42.85714

2014/1/13

51.21951

2014/1/14

40.54054

2014/1/15

32.42742

2014/1/16

32.42742



我查过公式,也套了数据,但发现对应不上,有人能解出来?
这个是网上的解说链接,但也套不通https://www.*/community/topic/292/%E6%B1%82%E5%8A%A9talib%E7%9A%84rsi%E6%8C%87%E6%A0%87%E8%AE%A1%E7%AE%97
附件列表

029.rar

大小:6.63 KB

 马上下载

相关数据文件和参考脚本

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2019-4-29 09:20:08
数据脚本文件已上传,再求解答!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-5-30 09:21:11
您好,如果您的求助没有解决,请到项目交易发布需求,会有更快更专业的用户帮助您 https://bbs.pinggu.org/z_prj.php
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2019-6-2 07:41:22
你好,我感觉你这写错了,首先第一步要对close做差分,然后通过这个差分与0的大小关系来进一步计算,我感觉你代码里没有这个判断(我是门外汉,我也不清楚,希望可以帮到你)

def rsi(price,period=6):
    import pandas as pd
    import numpy as np

    clprcChange=price-price.shift(1)
    clprcChange=clprcChange.dropna()

    indexprc=clprcChange.index
    upPrc=pd.Series(0,index=indexprc)
    upPrc[clprcChange>0]=clprcChange[clprcChange>0]

    downPrc=pd.Series(0,index=indexprc)
    downPrc[clprcChange<0]=-clprcChange[clprcChange<0]
    rsidata=pd.concat([price,clprcChange,upPrc,downPrc])
    rsidata.columns=[\'price\',\'PrcChange\',\'upPrc\',\'downPrc\']
    rsidata=rsidata.dropna()

    SMUP=[]
    SMDOWN=[]
    for i in range(period,len(upPrc)+1):
        SMUP.append(np.mean(upPrc.values[(i-period):i],dtype=np.float32))
        SMDOWN.append(np.mean(downPrc.values[(i-period):i],dtype=np.float32))
        rsi=[100*SMUP[i]/(SMUP[i]+SMDOWN[i]) for i in range(0,len(SMUP))]

    indexRsi=indexprc[(period-1):]
    rsi=pd.Series(rsi,index=indexRsi)
    return(rsi)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-3-13 19:05:54
RSI default 是EMA,指数平均值。所以算出来会跟simple moving average有点不一样。

股价 1, -1, 1, -1, 1, -1
波动nan -2, 2, -2, 2, -2

你的设定RSI需要3个波动,所以day4 开始才有数值

Day4 : 这天是EMA的base 情况,所以用simple moving average
up: 2/3
down: (2+2)/3 = 4/3
RS = 1/2
RSI = 1/3*100 = 33.333333

Day5: 这天开始,up 和 down 的平均值要用指数平均值 系数为2/(N+1)
up = 2/3up(day4) + 1/3 * 2 = 10/9
down = 2/3down(day4) + 1/3 * 0 = 8/9
RS = 5/4
RSI = 5/9*100 = 55.55555

这里看出哪怕是不在3天window里面的价格也会对后面的平均值产生影响。后果就是如果取值时间很短,前面的指数移动平均值会很不稳定,所以通常可以看到我们observe的window要大于calculation window, 这样会更加平滑准确些。

关于这项说明,在这里:

http://ta-lib.org/d_api/ta_setunstableperiod.html
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群