博客:www.jiao一个,背景
几天前,朋友在交流股票RSI用DAX处理的问题。因为RSI股票软件的算法几乎都需要股票从上市第一天开始的所有数据。目前RSI的大小影响因素[close]随着时间的推移,影响因素会越来越小(以后通过官方推导验证了结论),所以计算RSI时也往往不会带来从上市到当期的所有数据,因此对结果没有绝对影响。
先看看结果怎么样。(其实是股票软件的样子。)
笔者不是股票行业从业者,在这种情况下,需要注意的是,DAX是为了分享如何处理RSI的,不研究如何使用RSI。(威廉莎士比亚,《北方专家》)。
二、数据源计算逻辑
1、数据源。
2、RSI计算公式
注意(维基百科,打不开的话,你知道):
变形(笔者的自定义变形,能读就好。其中up代表上升,down代表下降,ABS代表绝对值,all代表上升和下降。)
3、计算逻辑。
LC表示昨天[close]
数据源[diff]=close-LC
为期6天的EMA分解计算如下:
1、y表示当前EMA结果。
2、EMA(up)中X=MAX(close-LC,0)、
3、EMA(down)到X=ABS(MIN(close-LC,0))、
4、EMA(all)中X=ABS(close-LC,0)。
e.detail&_iz=31825&index=9" width="240" height="30"/>
temp 其中X的角标和temp表中的【INDEX】相对应的。 要想计算EMA结果,就需要递归,但在DAX中目前笔者还没有找到办法来处理递归的问题。
于是我们加以思考
将上述表达式分别带入得到:
提一个1/6出来后得到
发现规律了吗?
最终推导得到k天指数平均6天的EMA
说明
这里补充文章最开始说的结论,不难看出,随着k的增加,时间越早
值越小,我们带入k=30,
=0.00421,和 5/6比起已经可以忽略不计了。所以“当期RSI的大小影响因素【close】随着时间往前推,时间越早影响因素会越小(后面会通过公式推导验证该结论),所以往往在计算RSI的时候也不会取从上市到当期的所有数据,对结果不造成绝对的影响。”
同时我们可以推导得出 k 天中 n 天指数平均EMA值
EMA的值可以通过X的迭代得到了,迭代在DAX中就好处理了。
三、上DAX
1、上面的temp表,中间过程便于观察,实际应用中不需要。
temp = VAR T1 = ADDCOLUMNS ( ALL ( data ), "INDEX", VAR DATEAC1 = data[date] VAR TP =FILTER ( ALL ( data ), data[date] < DATEAC1 ) RETURN COUNTROWS ( TP ) ) VAR T2 =ADDCOLUMNS ( T1, "diff", VAR I = [INDEX] - 1 VAR PRE =CALCULATE ( SUM ( data[close] ), FILTER ( T1, [INDEX] = I ) ) RETURN IF ( PRE = BLANK (), BLANK (), data[close] - PRE ) ) return T2
2、RSI6,其中N=12,N=24即可求得RSI12、RS24。
RSI6 = VAR N = 6 VAR BN = ( N - 1 ) / N VAR DATE_SELECT = MAX ( 'data'[date] ) VAR T1 = ADDCOLUMNS ( ALL ( data ), "INDEX", VAR DATEAC1 = data[date] VAR TP =FILTER ( ALL ( data ), data[date] < DATEAC1 ) RETURN COUNTROWS ( TP ) ) VAR T2 =ADDCOLUMNS ( T1, "diff", VAR I = [INDEX] - 1 VAR PRE =CALCULATE ( SUM ( data[close] ), FILTER ( T1, [INDEX] = I ) ) RETURN IF ( PRE = BLANK (), BLANK (), data[close] - PRE ) ) VAR T3 =FILTER ( T2, [date] <= DATE_SELECT ) VAR K =COUNTROWS ( T3 ) - 1 VAR T4 =ADDCOLUMNS ( T3, "UP", VAR X = [diff] VAR K1 = [INDEX] RETURN IF ( X > 0 || X = BLANK (), POWER ( BN, K - K1 ) * X, BLANK () ), "ALL", VAR X = [diff] VAR K1 = [INDEX] RETURN IF ( X = BLANK (), BLANK (), POWER ( BN, K - K1 ) * ABS ( X ) ) ) RETURN ROUND(DIVIDE ( SUMX ( T4, [UP] ), SUMX ( T4, [ALL] ) ) * 100,2)
3、5均线,其中n=10,20,60即可得到10均线、20均线、60均线。
5均线 = var n=5 var date1=max('data'[date]) var date2=filter(all('data'[date]),'data'[date]<=date1) var T=topn(n,date2,'data'[date],DESC) VAR R=CALCULATE(SUM(data[close]),T) RETURN DIVIDE( R,COUNTROWS(T))
四、总结
1、DAX中基本没有难度,就是迭代;
2、主要是数据公式推导后即可迎刃而解;
3、为了更好理解,做了个excel逻辑分解
4、最后验证下我们的计算结果
DAX计算出的RSI结果
股票软件结果(RSI24有一点点差异,主要是软件起始天数或者是小数保留问题,不影响使用。)
5、数据源是通过python的tushare包得到,pbix文件可以当个查询工具使用。
by 焦棚子
1.《【rsi怎么计算excel】利用126_Power BI的DAX计算股票RSI和股票平均相关性》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《【rsi怎么计算excel】利用126_Power BI的DAX计算股票RSI和股票平均相关性》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/2531896.html