ID:399899

使用tushare数据计算RPS指标

什么是RPS指标

RPS/RS指标,又称为股价相对强度指标,由美国的美国著名的成长性企业的投资大师,威廉·欧奈尔提出并首先运用于美国早期股票市场的分析。

RPS指标是指在一段时间内,个股涨幅在全部股票涨幅排名中的位次值。

比如,某个市场共有1000只股票,若某个股票的月涨幅在1000只股票中排名第100位,那么该股的RPS值就是:(1-100/1000)*100=90。

RPS指标衡量了某一给定股票在过去一段时间,相对市场中其他股票的表现。市场内每只股票都被指定了1-00范围内的某一数值,100代表相对强度最高

RPS=100

表示该股票在价格方面表现比其他的公司都更为优秀

RPS=70

表示该股票比其他70%公司表现好

如果你选择的股票RPS数值低于70,说明它目前的涨幅落后于股市中30%其他表现更好的股票。

根据欧奈尔的统计,从20世纪50年代早期到2008年,表现最好的股票在其股票大涨前的平均RS值为87。

因此,欧奈尔认为:PRS值为80或90以上,是买入一只股票前的必要筛选条件

如何计算RPS指标

首先剔除次新股 次新股的定义可以根据自己需求设定 我这里是一年以内为次新。
剔除次一个原因是:计算RPS指标时 例如 RPS120 120天为周期计算 前120条数据是只能计算出一个值。也就是前一百二十天 所有股票的涨幅情况。所以适当地选中次新可以避免程序无法运行。
其余不再赘述,如下代码 (下面以十日为周期作为示例)有对应提示:

the_day = '20210820'  #截至计算时间
#先引入后面可能用到的library
import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import time
from statistics import mean
%matplotlib inline   #使用之前先输入token,可以从个人主页上复制出来,
#每次调用数据需要先运行该命令
ts.set_token('这里是自己的token码 可以在tushare个人主页找到')
pro = ts.pro_api()#正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False#数据来源于tushare,首先使用stock_basic获取当前交易日的所有股票代码。截至2021年8月20日,一共有4444只股票。
##########################################################
df = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
print(len(df))
#########################################################
#考虑到A股新股上市交易的情况,上市后前一段时间往往会一字涨停,然后出现下跌调整。为了剔除新股次新股的影响,这里选择2020年8月1日前上市的股票作为分析样本,共得到3893只股票。#排除掉新股次新股,这里是只考虑2020年8月1日以前上市的股票###########################################################
# df=df[df['list_date'].apply(int).values<2020801]
df = df[df['list_date'] < '20200801']
print(len(df))
##########################################################
#输出结果:3893
#获取当前所有非新股次新股代码和名称
codes=df.ts_code.values
names=df.name.values
#构建一个字典方便调用
code_name=dict(zip(names,codes))#使用tushare获取上述股票周价格数据并转换为周收益率
#设定默认起始日期为2020年06月01日,结束日期为2021年08月20日
#日期可以根据需要自己改动
def get_data(code,start='20200601', end='20210820'):df=pro.daily(ts_code=code, start_date=start, end_date=end,fields='trade_date,close')#将交易日期设置为索引值df.index=pd.to_datetime(df.trade_date)df=df.sort_index()#计算收益率return df.close#构建一个空的dataframe用来装数据
data=pd.DataFrame()n = 0
for name,code in code_name.items():print(n)n += 1data[name]=get_data(code)time.sleep(0.1)  #避免调用过快 引发调用限制 在这里使用sleep函数data = data.fillna(method='bfill')   #补充缺失值
#计算收益率
def cal_ret(df,w=5):'''w:周5;月20;半年:5; 一年250'''df=df/df.shift(w)-1return df.iloc[w:,:].fillna(0)ret10=cal_ret(data,w=10) #计算RPS
def get_RPS(ser):df=pd.DataFrame(ser.sort_values(ascending=False))df['n']=range(1,len(df)+1)df['rps']=(1-df['n']/len(df))*100return df
#计算每个交易日所有股票滚动w日的RPS
def all_RPS(data):dates=(data.index).strftime('%Y%m%d')RPS={}for i in range(len(data)):RPS[dates[i]]=pd.DataFrame(get_RPS(data.iloc[i]).values,columns=['收益率','排名','RPS'],index=get_RPS(data.iloc[i]).index)  return RPS  rps10=all_RPS(ret10)
#获取所有股票在某个期间的RPS值
def all_data(rps,ret):df=pd.DataFrame(np.NaN,columns=ret.columns,index=ret.index)for date in ret.index:date=date.strftime('%Y%m%d')d=rps[date]for c in d.index:df.loc[date,c]=d.loc[c,'RPS']return df#构建一个以前面收益率为基础的空表
df_new=pd.DataFrame(np.NaN,columns=ret10.columns,index=ret10.index)
for date in df_new.index:print(date)date=date.strftime('%Y%m%d')d=rps10[date]                                    for c in d.index:df_new.loc[date,c]=d.loc[c,'RPS']def plot_rps(stock):plt.subplot(211)data[stock][10:].plot(figsize=(16,16),color='r') plt.title(stock+'股价走势',fontsize=15)plt.yticks(fontsize=12)plt.xticks([])ax = plt.gca()  ax.spines['right'].set_color('none') ax.spines['top'].set_color('none') plt.subplot(212)df_new[stock].plot(figsize=(16,8),color='b')plt.title(stock+'RPS相对强度',fontsize=15)my_ticks = pd.date_range('2020-11-1',the_day,freq='m')plt.xticks(my_ticks,fontsize=12)plt.yticks(fontsize=12)ax = plt.gca()  ax.spines['right'].set_color('none') ax.spines['top'].set_color('none')plt.show()

这样计算主体部分就写好了
然后调用函数查看一下情况

rps10['20210818']


这样就可以看到某一天的全盘股票RPS排行情况

调用上面的plot_rps函数可以查看 某只股票的股价变化以及他的RPS值变化

plot_rps('全柴动力')


好啦 我的介绍到这里 更多关于RPS值的使用 大家自行探索

计算RPS指标 Python实现相关推荐

  1. Python 中 pct_change 函数是一种非常实用的函数,它可以帮助我们计算一个时间序列的百分比变化率。在数据分析和金融领域中,我们经常需要计算某个指标...

    Python 中 pct_change 函数是一种非常实用的函数,它可以帮助我们计算一个时间序列的百分比变化率.在数据分析和金融领域中,我们经常需要计算某个指标相对于前一期的变化率,这时可以使用 pc ...

  2. Python 计算KDJ指标

    def QH_KDJ_20(qh_higt,qh_low,qh_close,qh_fastk_period = 9,qh_slowk_period = 3,qh_fastd_period = 3):& ...

  3. 计算风险指标:最大回撤、计算风险收益指标:夏普比率、利用最大回撤和夏普比筛选基金、比较3只股票的夏普指数

    接着上一次获取股票数据[实时更新股票数据.创建你的股票数据].计算交易指标[买入.卖出信号.计算持仓收益.计算累计收益率] - cexo - 博客园的量化交易往下学习. 计算风险指标:最大回撤 什么是 ...

  4. 股票量化分析工具QTYX使用攻略——RPS指标选取强势股(更新2.6.3)

    搭建自己的量化交易系统‍ 如果要长期在市场中立于不败之地!必须要形成一套自己的交易系统. 行情不等人!边学习边实战,在实战中学习才是最有效地方式.于是我们分享一个即可以用于学习,也可以用于实战炒股分析 ...

  5. 欧奈尔的RPS指标如何使用到股票预测

    前言 1988年,欧奈尔将他的投资理念写成了<笑傲股市How to Make Money in Stocks>.书中总结了选股模式CANSLIM模型,每一个字母都代表一种尚未发动大涨势的潜 ...

  6. 欧奈尔RPS指标选股!本地数据源快速遍历全市场!股票量化分析工具QTYX-V2.3.1...

    前言 对于RPS技术指标大家一定不会陌生.它是股价相对强度指标,根据一段时间内个股涨幅在全部股票涨幅排名中的位次值,选取出市场中的强势股. 以大家熟知的"马太效应"和"二 ...

  7. 【指标计算】老妈再也不担心我的指标算不好了(教你用MyTT、TA-Lib、Pandas TA计算股票指标,附源代码)

    教你用MyTT.TA-Lib.Pandas TA计算股票指标,附源代码 前言 一.目前Python流行的几款股票行情分析指标计算库 1. MyTT 2. Ta-lib 3. Pandas TA 二.指 ...

  8. 如何使用熵值法分组计算核心指标权重,并为项目打分

    计算核心指标权重是一种常见的分析方法,常见的计算权重的方法的原理及使用条件可参考https://baijiahao.baidu.com/s?id=1661019965038118642&wfr ...

  9. 获取股票数据【实时更新股票数据、创建你的股票数据】、计算交易指标【买入、卖出信号、计算持仓收益、计算累计收益率】

    在上一次获取股票数据[使用JQData查询行情数据.财务指标.估值指标]学习了使用JQData来查询股票相关数据, 这次则开始一点点构建咱们的量化交易系统了. 量化交易平台功能模块了解: 对于一个量化 ...

  10. 通达信欧奈尔RPS指标公式详解

    RPS相对强度指标,是国内的投资者根据威廉·欧奈尔所著书籍<笑傲股市>中的RS评级改进的. 根据书中介绍: RS评级衡量了某一给定股票在过去52周内相对股市中其他股票的表现.市场上每一只股 ...

最新文章

  1. JSP实现在线调查问卷系统
  2. cocos网络通信php,cocos2d-x网络编程 连接php服务器笔记2
  3. ASP.NET MVC系列:添加控制器
  4. tomcat服务器上https的SSL证书安装配置
  5. LeetCode——Longest Substring Without Repeating Characters
  6. oss导出数据为空时怎么处理_数据库导出时有空表导不出的解决方法
  7. 浅谈tomcat中间件的优化【转】
  8. Desktop: ERROR: Cannot set priority of namenode process 35122
  9. linux 查看进程_Linux怎么查看和监控每个进程的实时流量
  10. 创建线程时,需要创建的内容
  11. 转 fpga学习经验1
  12. 51单片机怎么显示当前时间_我电脑时间显示坏了,怎么修改不了?该怎么办?详细图文教你解决...
  13. 开源软件安全检查工具
  14. sam音高修正_Melodyneplugin音高修正插件使用入门(精)
  15. c语言编程排球队员站位问题,排球比赛的站位技巧介绍,在比赛过程中该如何与队友沟通呢?排球比赛常见的手势说明...
  16. 112.Android 简单的群发微信,群发文本和图片,一键群发
  17. 现在大火的低代码是怎么回事?从实现原理谈谈低代码
  18. 比较几种步进电机加减速控制方案
  19. KITTI数据集数据初体验
  20. linuxprobe

热门文章

  1. 什么是商业数据分析师?
  2. Python札记6_字典1
  3. 如何免费在本地播放flv格式的视频
  4. STM32驱动模数转换芯片ADS1120(PT100铂电阻测温度)第2篇
  5. 嵌入式linux调试dsi,DSI device tree configuration
  6. OpenNLP入门实验
  7. win10安装oracle18c,Win10 Oracle 18c 完全卸载
  8. 数据库——概念模型(CDM)、逻辑模型(LDM)、物理模型(PDM)
  9. Python常见低级错误/拼写错误
  10. WebRTC系列补充--native音量控制level