博客:www.jiaopengzi.com 1。背景前几天有个朋友在讲如何用DAX处理股票RSI,因为RSI股票软件的算法几乎都需要用到股票从上市第一天开始的所有数据。影响当前RSI大小的因素【接近】随着时间的推移,时间越早,影响因素越小(这个结论后面会通过公式推导来验证)。所以在计算RSI时,不会取上市到当期的所有数据,不会对结果产生绝对影响。
先来看看结果(其实股票软件长什么样)
需要说明的是,笔者并非股票行业从业者,本案例目的是分享DAX如何处理RSI,我们不研究RSI如何用。
二、数据源计算逻辑
1、数据源
2、RSI计算公式
参考(维基百科,打不开就知道):
得到变形量(作者定义了变形量,可以理解,其中up表示向上,down表示向下,ABS表示绝对值,all表示上下)
3、计算逻辑
信用证的意思是昨天[收盘]
[diff]=数据源中的close-LC
分解计算接下来6天的EMA,
1.y代表当前的EMA结果,
2.在EMA中(上涨),X=MAX(收盘-LC,0),
3.x=EMA(向下)中的ABS(MIN(close-LC,0)),
4.在EMA(all)中,X=ABS(close-LC,0)。
临时x的角标对应于临时表中的[索引]。计算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
RSI6 = VAR N = 6VAR BN = ( N - 1 ) / NVAR DATE_SELECT = MAX ( 'data'
5均线 = var n=5var date1=max('data'
2、主要是数据公式推导后即可迎刃而解;
3、为了更好理解,做了个excel逻辑分解
4、最后验证下我们的计算结果
DAX计算出的RSI结果
股票软件结果(RSI24有一点点差异,主要是软件起始天数或者是小数保留问题,不影响使用。)
5、数据源是通过python的tushare包得到,pbix文件可以当个查询工具使用。
by 焦棚子