ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

使用tushare大数据平台对几种股票因子进行计算

2022-03-20 14:02:55  阅读:205  来源: 互联网

标签:tushare plt ADR RSI 几种 因子 超卖 data 超买


写在前面


去年七月,笔者开始接触买入股票,近一年下来,投入的的钱亏了一半,股票市场不是基金市场,其中的残酷给我这个初来乍到的年轻人上了一课。当时,我就在想,买卖股票是否能够赚钱,关键就在一个信息。内部的人有内部的消息,总是能赚大量的钱。我作为一个学生,家里边也没有背景,不可能获取到公司内部的消息。在我计算机水平还一般的时候,我一直想做一个东西,把市面上公开的股票信息进行合理的分析,获得一些我们原先看不出来的信息,这样,在我们掌握信息之后,就可以在一定程度上减少我们的损失。

几个有趣的因子


  • 原先,我所了解的因子仅仅局限于k线,每日涨跌幅度等比较浅显的数据。最近我刚刚认识了几个值
  1. ADR值

取值范围:
一般而言,由ADR的数值大小可以把大势分为几个区域。
(1)ADR数值在0.5——1.5之间是ADR处在正常区域内。当ADR处在正常区域内时,表明多空双方势均力敌,大盘的走势波动不大、比较平稳,股市大势属于一种盘整行情。这个区域是ADR数值经常出现的区域。
(2)当ADR数值在0.3——0.5之间或1.5——2之间是ADR处在非正常区域内。
当ADR处在1.5——2之间的非正常区域时,表明多头力量占据优势,大盘开始向上一路上涨,股市大势属于一种多头行情;
而当ADR处在0.3——0.5之间的非正常区域时,表明空头力量占据优势,大盘开始一路下跌,股市大势属于一种空头行情。这两个区域是ADR数值比较少出现的区域。
(3)当ADR值是在0.3以下或2以上时是ADR处在极不正常区域内。当ADR处在极不正常区域时,主要是突发的利多、利空消息引起股市暴涨暴跌的情况。此时,股市大势属于一种大空头或大多头行情。

计算公式

  1. RSI值

RSI运用法则
(1) 受计算公式的限制,不论价位如何变动,强弱指标的值均在0与100之间。
(2) 强弱指标保持高于50表示为强势市场,反之低于50表示为弱势市场。
(3) 强弱指标多在70与30之间波动。当六日指标上升到达80时,表示股市已有超买现象,如果一旦继续上升,超过90以上时,则表示已到严重超买的警戒区,股价已形成头部,极可能在短期内反转回转。
(4) 当六日强弱指标下降至20时,表示股市有超卖现象,如果一旦继续下降至10以下时则表示已到严重超卖区域,股价极可能有止跌回升的机会。
(5) 每种类型股票的超卖超买值是不同的。
   在牛市时,通常蓝筹股的强弱指数若是80,便属超买,若是30便属超卖,至于二三线股,强弱指数若是85至90,便属超买,若是20至25,便属超卖。 但我们不能硬性地以上述数值,拟定蓝筹股或二三线股是否属于超买或超卖,主要是由于某些股票有自己的一套超买/卖水平,即是,股价反覆的股票,通常超买的 数值较高(90至95),而视作超卖的数值亦较低(10至15)。至于那些表现较稳定的股票,超买的数值则较低(65至70),超卖的数值较高(35至 40)。因此我们对一只股票采取买/卖行动前,一定要先找出该只股票的超买/超卖水平。至于衡量一只股票的超买/超卖水平,我们可以参考该股票过去12个 月之强弱指标记录。
(6) 超买及超卖范围的确定还取决于两个因素。第一是市场的特性,起伏不大的稳定的市场一般可以规定70以上超买, 30以下为超卖。变化比较剧烈的市场可以规定80以上超买,20以下为超卖。第二是计算RSI时所取的时间参数。例如,对于9日RSI,可以规定80以上 为超买,20以下为超卖。对于24日RSI,可以规定70以上为超买,30以下为超卖。应当注意的是,超买或超卖本身并不构成入市的讯号。有时行情变化得 过于迅速,RSI会很快地超出正常范围,这时RSI的超买或超卖往往就失去了其作为出入市警告讯号的作用。例如在牛市初期,RSI往往会很快进入80以上 的区域,并在此区域内停留相当长一段时间,但这并不表示上升行情将要结束。恰恰相反,它是一种强势的表现。只有在牛市未期或熊市当中,超买才是比较可靠的 入市讯号。基于这个原因,一般不宜在RSI一旦进入非正常区域就采取买卖行动。最好是价格本身也发出转向信号时再进行交易。这样就可以避免类似于上面提到 的RSI进入超买区但并不立即回到正常区域那样的“陷井”。在很多情况下,很好的买卖讯号是:RSI进入超买超卖区,然后又穿过超买或超卖的界线回到正常 区域。不过这里仍然要得到价格方面的确认,才能采取实际的行动。这种确认可以是:
  ①趋势线的突破;
  ②移动平均线的突破;
  ③某种价格型态的完成。
(7) 强弱指标与股价或指数比较时,常会产生先行显示未来行情走势的特性,亦即股价或指数未涨而强弱指标先上升,股价或指数未跌而强弱指标先下降,其特性在股价的高峰与谷底反应最明显。
(8) 当强弱指标上升而股价反而下跌,或是强弱指标下降而股价反趋上涨,这种情况称之为“背驰”。当RSI在70至80上时,价位破顶而RSI不能破 顶,这就形成了“顶背驰”,而当RSI在30至20下时,价位破底而RSI不能破底就形成了“底背驰”。这种强弱指标与股价变动,产生的背离现象,通常是 被认为市场即将发生重大反转的讯号。
  和超买及超卖一样,背驰本背并不构成实际的卖出讯号,它只是说明市场处于弱势。实际的投资决定应当在 价格本身也确认转向之后才作出。虽然在行情确实发生反转的情况下,这个确认过程会使投资者损失一部分利润,可是却可以避免在行情后来并未发生反转的情况下 投资者可能做出过早卖出的错误决定。相对地说,这种错误会对投资者造成更大的损失,因为有时候行情会暂时失去动量然后又重新获得动量,而这时价格并不发生大 规模的转向。

计算公式

进行因子计算


首先,我们使用tushare把数据获取到,这里我相分析的股票是丽江股份(曾是我买过的股票之一),先把丽江股份的基础信息筛选出来
查询方式可以从这里获得:
https://tushare.pro/document/2?doc_id=25

import tushare as ts
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np


pro = ts.pro_api()
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
data.loc[data['name'].isin(['丽江股份'])]

丽江股份

我们从中获得了丽江股份的ts_code

df_data = pro.daily(ts_code='002033.SZ', start_date='20180701', end_date='20220318') # 获取每日详情信息
df_data = df_data[['trade_date', 'open', 'high', 'low', 'close']]  # 拿出来需要的几行数据

这里我们用一个小心机,把时间年月日用"-"隔开,方便转化成datetime格式,并把时间作为索引
时间转换
数据拿到手了,先算一下5日均线和30日均线两个重要数据

se_close = df_data['close'].reindex(df_data['close'].index[::-1])  # 先把数据进行反转,让更早的时间靠前
ma30 = se_close.rolling(30).mean()  # 30日均线
ma5 = se_close.rolling(5).mean()  # 5日均线



plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
plt.figure(figsize=(10, 10))
plt.plot(ma5[400:],label='5日均线')
plt.plot(ma30[400:],label='30日均线')
plt.legend()

均线图

短期均线上穿长期均线叫做“金叉”
反之就是死叉

可能我买的时候还是在金叉?(现在已经赔本卖出了,可见并不能完全信服)
那我们就再算一个ADR值

# ADR值
def ADR(x):
    up = 0
    down = 0
    x = list(x)
    for i in x:
        if i > 0:
            up += 1
        else:
            down += 1
    return up/down
ADR_info = pd.Series(data=zhang_info.rolling(10).apply(ADR))  # 十日ADR值


plt.figure(figsize=(10, 10))
plt.plot(df_data['ADR_val'][400:], label="ADR", color='black')
plt.legend(fontsize=20)
plt.axhspan(ymin=0.5, ymax=1.5, facecolor='g', alpha=0.5)
plt.axhspan(ymin=0.3, ymax=1.5, facecolor='y', alpha=0.5)
plt.axhspan(ymin=1.5, ymax=2, facecolor='y', alpha=0.5)
plt.axhspan(ymin=0, ymax=0.3, facecolor='r', alpha=0.5)
plt.axhspan(ymin=2, ymax=10, facecolor='r', alpha=0.5)

绘制一张十日ADR值图
根据不同的区域标注不用的颜色

从这张图里边可以看出,2021-7时的ADR值还是比较正常的
再计算RSI值

def RSI(x):
    x = list(x)
    up = []
    down = []
    for i in x:
        if i > 0:
            up.append(i)
        else:
            down.append((-1)*i)
    return (np.mean(up) * 100)/ (np.mean(down) + np.mean(up))
df_data['RSI_val'] = df_data['change'].rolling(10).apply(RSI)
plt.figure(figsize=(10, 10))
plt.plot(df_data['RSI_val'][400:])

RSI10日图

后记

现在接触的知识有限,更加上时间匆忙,我只能分析这两个因子。后续会考虑同机器学习结合,写一篇股票预测博客。

标签:tushare,plt,ADR,RSI,几种,因子,超卖,data,超买
来源: https://blog.csdn.net/ZYM66/article/details/123611110

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有