写在前面
去年七月,笔者开始接触买入股票,近一年下来,投入的的钱亏了一半,股票市场不是基金市场,其中的残酷给我这个初来乍到的年轻人上了一课。当时,我就在想,买卖股票是否能够赚钱,关键就在一个信息。内部的人有内部的消息,总是能赚大量的钱。我作为一个学生,家里边也没有背景,不可能获取到公司内部的消息。在我计算机水平还一般的时候,我一直想做一个东西,把市面上公开的股票信息进行合理的分析,获得一些我们原先看不出来的信息,这样,在我们掌握信息之后,就可以在一定程度上减少我们的损失。(本人tushareID:496517)
几个有趣的因子
- 原先,我所了解的因子仅仅局限于k线,每日涨跌幅度等比较浅显的数据。最近我刚刚认识了几个值
- ADR值
- 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 评论