版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44580977/article/details/102215439
使用tushare 获取所有上市股票, 通过daily函数获取股票信息, 再使用np.rad2deg()方法转换为角度值
import tushare as ts
token='......'
#初始化pro接口
pro = ts.pro_api(token)
#查询当前所有正常上市交易的股票列表
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
print(data.head())
"""
ts_code symbol name area industry list_date
0 000001.SZ 000001 平安银行 深圳 银行 19910403
1 000002.SZ 000002 万科A 深圳 全国地产 19910129
2 000004.SZ 000004 国农科技 深圳 生物制药 19910114
3 000005.SZ 000005 世纪星源 深圳 环境保护 19901210
4 000006.SZ 000006 深振业A 深圳 区域地产 19920427
"""
print(list(data.ts_code)[:20])#只打印20个股票代码
"""
['000001.SZ', '000002.SZ', '000004.SZ', '000005.SZ', '000006.SZ', '000007.SZ', '000008.SZ', '000009.SZ', '000010.SZ', '000011.SZ', '000012.SZ', '000014.SZ', '000016.SZ', '000017.SZ', '000018.SZ', '000019.SZ', '000020.SZ', '000021.SZ', '000023.SZ', '000025.SZ']
"""
code_data = pro.daily(ts_code=code, start_date=start, end_date=end)
code_data.fillna(method='bfill', inplace=True) # 后一个数据填充NAN1
code_data.index = pd.to_datetime(code_data.trade_date)
code_data.sort_index(inplace=True)
code_data.drop(axis=1, columns='trade_date',inplace=True)
# 计算走势角度 , 就是斜率对应的度数
def stocks_data_to_deg(stocklist,start,end):
deg_data={}
for code in stocklist:
code_data = pro.daily(ts_code=code, start_date=start, end_date=end)
code_data.fillna(method='bfill', inplace=True) # 后一个数据填充NAN1
code_data.index = pd.to_datetime(code_data.trade_date)
code_data.sort_index(inplace=True)
code_data.drop(axis=1, columns='trade_date',inplace=True)
print(code_data.head())
print(code_data.info())
try:
y_arr = code_data.close.values
x_arr = np.arange(0, len(y_arr))
x_b_arr = sm.add_constant(x_arr) # 添加常数列1
model = regression.linear_model.OLS(y_arr, x_b_arr).fit() # 使用OLS做拟合
rad = model.params[1] # y = kx + b :params[1] = k
deg_data[code] = np.rad2deg(rad) # 弧度转换为角度
except:
pass
return deg_data
all_data = stocks_data_to_deg(list(data.ts_code),'20181001','20190401')
print(all_data)
#截取部分数据
"""
{'000001.SZ': 1.0748324272579852, '000002.SZ': 3.39547471012723, '000004.SZ': 1.5199149426182201, '000005.SZ': 0.48470466772102005, '000006.SZ': 0.6827509040282749, '000007.SZ': -0.2520083986815976, '000008.SZ': 0.2210732091541942, '000009.SZ': 1.0666473158989738, '000010.SZ': -0.5253119599667251, '000011.SZ': 0.8463307217664522, '000012.SZ': 0.6486313122116967, '000014.SZ': 1.163285490089819, '000016.SZ': 0.7006226825688889, '000017.SZ': 0.4274007275784671, '000018.SZ': 0.3153512046323943, '000019.SZ': 0.17441713367513342, '000020.SZ': 0.9886561800484499, '000021.SZ': 1.6740796902283464, '000023.SZ': 2.61835428690094, '000025.SZ': 2.5748214089900228}
"""
print(all_data['000002.SZ'])
#3.39547471012723