平安银行涨跌预测
数据介绍:通过开源的API获取到平安银行的股票132天的指数数据。
实验目的:根据前50天的历史数据,预测当天指数的涨跌。
获取数据的主体代码为下
#设置token,是一种权限设置
token='*******************************'#用你自己的token
#ts.set_token(token)
pro=ts.pro_api(token)#ts为开源金融API
#获取当前上市的股票代码,简称,等各类数据
basic=pro.stock_basic(list_status='L')#L是上市
#查看前五行数据
# a=basic.head(5)
# print(a)
#获取平安银行日行情数据
pa=pro.daily(ts_code='000001.SZ', start_date='20190101',end_date='20190720')
# print(type(pa))
def insert_csv(datas):
df = pd.DataFrame(datas)
file_name = '平安银行'
df.to_csv('{}.csv'.format(file_name),encoding = "GBK")
insert_csv(pa)
'''有可能出现写入csv文件,出现编码错误写入不了,可以修改编码:改成 gb18030编码。
如果要插入的数据字段不确定,可以进行追加的方式进行插入,追加插入必须要添加一个参数 modal = “a”'''
数据加载与数据预处理
data = pd.read_csv('data/平安银行.csv', encoding='gbk', parse_dates=[0], index_col=0)
data.sort_index(0, ascending=True, inplace=True)
dayfeature = 50#选取50天数据
featurenum = 5 * dayfeature#选取的5个特征*天数
x = np.zeros((data.shape[0] - dayfeature, featurenum + 1))#记录50天的5个特征值
y = np.zeros((data.shape[0] - dayfeature))#记录涨或跌
data.shape[0]-dayfeature意思是因为我们要用50天数据做训练,对于条目为132条的数据,只有82条数据是有前50天的数据来做训练的,所有训练集的大小就是132-50,对于每一条数据,特征是前50天的所有特征数据,即50*5,+1是将当天的开盘价引入作为一条特征数据
for i in range(0, data.shape[0] - dayfeature):
x[i, 0:featurenum] = np.array(data[i:i + dayfeature] \
[[u'open', u'high', u'low', u'close', u'vol']]).reshape((1, featurenum))
x[i, featurenum] = data.ix[i + dayfeature][u'open']
for i in range(0, data.shape[0] - dayfeature):
if data.ix[i + dayfeature][u'close'] >= data.ix[i + dayfeature][u'open']:
y[i] = 1#1为涨
else:
y[i] = 0#0为跌
创建SVM并进行交叉验证
clf = svm.SVC(kernel='rbf')
result = []
for i in range(5):#这里是5折
x_train, x_test, y_train, y_test = \
train_test_split(x, y, test_size=0.2)
#x和y的训练集和测试集,切分成80-20%
clf.fit(x_train, y_train)#开始训练
result.append(np.mean(y_test == clf.predict(x_test)))
#将预测数据和测试集的验证数据对比
print("svm classifier accuacy:")
print(result)