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

写在前面


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

几个有趣的因子


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

  1. 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 nppro = 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 = 0down = 0x = list(x)for i in x:if i > 0:up += 1else:down += 1return 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:])

后记

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

本文链接:https://my.lmcjl.com/post/9842.html

展开阅读全文

4 评论

留下您的评论.