如何建股票推荐?
先说思路,再给代码(需要导入的模块和设置参数见最后) 思路:使用线性回归建立股票收益与日期、之前一周收益率、成交量、流通市值、BAV(Beta值)的数学模型,再用for循环将每月最后一个交易日作为自变量x,每日的收益作为因变量y进行回归,如果拟合效果较好,则可得到一个预测明日(本月最后一天)股价走势的公式;然后利用这个公式的正负来判断是否该买或该卖。 代码: from import linear_model import numpy as np import pandas as pd # 导入函数 from import forecast
# 导入数据data = pd.read_csv('CHINA_STOCK_ADJUSTED_CLOSE.csv') data['日期'] = pd.to_datetime(data['日期']) # 删除前20个数据(即1999年到2000年之间的数据) index = list(data.index)[-20:] data.drop(index, inplace=True) # 删除列'日期'及'代码' column = ['之前一周收益率','成交量','流通市值','BAV', '日期'] data = data[column] x = data[['之前一周收益率','成交量', '流通市值','BAV']] y = data['日期'] model =linear_model.LinearRegression().fit(x, y) print('R^2:', model.score(x, y)) 以上是用线性回归建立模型并得到系数的过程(此处为了便于显示系数,把数据缩放到了原始数据的千倍)。下面是用for循环验证模型的过程。注意这里我用了pd.DataFrame.apply()的方法,比在循环体内直接使用model.predict()要快一些!
预测值 = model.predict(x) 真实值 = y.values 预测结果 = [np.where(predicted > 0, 1, -1).astype(int)] 最终结果 = [list(real_result) + list(predicted_result) for real_result, predicted_result in zip(real_value, predict_value)] final_result = pd.DataFrame({'实际值': y, '预测值': final_result}) 最后得到的final_result数据框就是包含每笔交易(每个交易日的收盘价)的预测结果了。可以看到,虽然每笔交易预测的精确度不一样高,但整体上的预测效果还是不错的。用plot()方法画出真实数据和预测数据的散点图,也可以看到大多数情况下预测数据接近于真实数据。 需要注意的是:由于数据量的原因,某些股票的历史数据可能不够完整,这时就用不到这部分历史的收益和数据了。另外,考虑到每周的数据会有一定的滞后性,因此建议将时间序列至少设置为一周。