126_Power BI中使用DAX计算股票RSI及股票均线相关
博客:www.jiaopengzi.com
焦棚子的文章目录
请点击下载附件
一、背景
前些日子,有朋友在交流股票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)。
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 )RETURNCOUNTROWS ( TP ))
VAR T2 =ADDCOLUMNS (T1,"diff",VAR I = [INDEX] - 1VAR 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 )RETURNCOUNTROWS ( TP ))
VAR T2 =ADDCOLUMNS (T1,"diff",VAR I = [INDEX] - 1VAR 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]RETURNIF ( X > 0 || X = BLANK (), POWER ( BN, K - K1 ) * X, BLANK () ),"ALL",VAR X = [diff]VAR K1 = [INDEX]RETURNIF ( X = BLANK (), BLANK (), POWER ( BN, K - K1 ) * ABS ( X ) ))
RETURNROUND(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 焦棚子
焦棚子的文章目录
126_Power BI中使用DAX计算股票RSI及股票均线相关相关推荐
- power bi dax_M语言和Power BI中的DAX之间的差异
power bi dax Microsoft Power BI supports two different languages, M language and DAX (Data Analysis ...
- Power BI中使用DAX生动展现人员头像、动态标签——销售数据里的那些商业智能
目录 背景介绍 主要内容 数据预览 实现方案 头像展示 动态标签 总结 背景介绍 Power BI 作为一款强大的.生动的.且非常友好的商业智能软件,能帮助用户快速了解和分析数据.报表是可视化组件有机 ...
- bi power 两个日期挑较早的日期_功率 BI 中的时间智能:利用时间
概述 了解时间智能功能在 Power BI 中的重要性 通过简单示例在 Power BI 中实现时间智能函数 介绍时间是企业的资产,就像资源.材料和资金一样.企业使用累积时间计算(年到日期.月到日期或 ...
- Extreme DAX中文第1章 商业智能中的DAX
公众号:PowerBI生命管理大师学谦,同步更新,敬请关注 第1章 商业智能中的DAX 毫无疑问,信息是当今世界上任何一个组织最宝贵的资产之一.作为消费者,我们随时随地都可以感受到各种企业和平台正费尽 ...
- power bi 中计算_Power BI中的期间比较
power bi 中计算 Just recently, I've come across a question on the LinkedIn platform, if it's possible t ...
- 在Power BI中用DAX计算净现值NPV
净现值(NPV - Net Present Value)是会计学当中经常使用到的一个指标.净现值指未来现金流的折现值与现在投资成本之间的差额.用白话来讲,净现值其实就只现在的钱,用来投资之后,在未来所 ...
- 如何在 DAX 计算中隐藏未来日期?
本文翻译自国际Power BI大师Marco Russo的文章--<Hiding future dates for calculations in DAX>,该文介绍了未来日期的定义以及展 ...
- DAX基础3:简单介绍Power BI中的New Quick Measures
写基础比写分享麻烦很多.因为不知道要写到什么程度,写多了,信息量太大,接受困难,让人没有继续学下去的欲望.写少了,没啥干货,也不是我想要的.不忘初心,记住我是要干嘛的.哈哈哈,我是分享DAX的.其他的 ...
- POWER BI 中DAX函数的应用
POWER BI 中DAX函数的应用 什么是DAX函数 DAX 是公式或表达式中可用于计算并返回一个或多个值的函数.运算符或常量的集合. 简单来说,DAX 可帮助你通过模型中已有的数据来创建新信息. ...
最新文章
- asp.net中缓存的使用介绍一
- 2019牛客提前批一血:猝不及防的java实习面经
- nfs服务器与客户端配置
- 【总结】分类、聚类的评估指标
- asp.net core源码飘香:从Hosting开始
- Linux的slab和nginx的区别,Nginx核心知识100讲》nginx Slab管理器
- 正则表达式 Mather类的使用
- qt 背景和控件布局_Qt编写自定义控件26-平铺背景控件
- cnn风格迁移_愚蠢的CNN,换个马甲就认不出猫!但,这病能治 | ICLR Oral
- Java匹马行天下之学编程的起点——高级语言大锅烩
- 限流的简单使用及学习
- Atitit webservice发现机制 WS-Discovery标准的规范attilax总结
- MySQL Shell 教程
- c语言注释部分两侧的分界符号分别是,C语言程序设计基础教程 - 习题答案
- springboot 整合springsecurity
- CodeForces 1457C Bouncing Ball
- 配置GeeM2传奇登陆器详细图文教程
- magento 货币换算
- 水果店处理坏果,水果店卖不掉的水果如何处理
- ant-design vue input通过那个事件可以获得输入框变化的值_VUE使用百度地图教程
热门文章
- c#实现对sqlserver的增删改操做 1117
- dj电商-数据表的设计-用户表设计
- css-选择器-进阶-属性选择器-组选择器-nth选择器
- python三引号的作用及用法
- DirectX - dds图片格式(DDSURFACEDESC2)
- 7月31日云栖精选夜读 | 在浏览器上也能训练神经网络?TensorFlow.js带你玩游戏~...
- 编程算法 - 篱笆修理(Fence Repair) 代码(C)
- Fedora 22 Linux 系统将于 7月 19日停止支持
- java http的get,post请求
- Qt之QPropertyAnimation