ai金融工具如何炒股 (ai金融机构选股公式)

学习了一段时间python代码,对金融知识也有了一定的沉淀,那就开始进入AI金融实战吧!今天给大家介绍一下大盘指数的预测。

python深度学习股市预测,最好的股票量化技术分析库python

程序功能如下

  1. 通过Tushare 接口,获取大盘指数数据。
  2. 从开盘价、收盘价、最高价、最低价、成交量、成交金额等指标选取相关特征
  3. 选择模型,评估模型准确度

下面就开始分析解读代码了。有感兴趣的可以自己去跑跑试试,有问题的话欢迎留言交流。

第一部分:获取大盘指数数据

这次的研究对象是上证指数(000001.SH),采用的接口是Tushare,非常好用的一个接口。注册之后,申请一下口令(set_token),就可以调用Tushare的股票数据API接口了。

python深度学习股市预测,最好的股票量化技术分析库python

#!/usr/bin/python
# -*- coding: utf-8 -*-
""" 获取指数数据"""
import tushare as ts
import pandas as pd
ts.set_token('3d74e171f2af452cd*******************95bcc6d7b1759ce')
pro = ts.pro_api()
#查询当前所有正常上市交易的股票列表
index_data = pro.index_daily(ts_code='000001.SH', start_date='20180101', end_date='20181227')
index_data['trade_date'] = index_data.trade_date.apply(lambda x: pd.to_datetime(x))

其中: pro.index_daily,获取指数数据的接口,输入参数(指标编码,开始时间,结束时间);pd.to_datetime,可以将文本时间戳转换为时间格式。

第二部分:获取大盘涨跌相关特征

本文仅是通过对时间和大盘的开盘价、收盘价、最高价、最低价、成交量、成交金额等指标处理,获得大盘涨跌特征,后续这块可以慢慢扩充特征。

"""特征获取"""
def get_prev_days(x, quota, n_days):
 '''计算前几日指标函数'''
 pday = pd.Timedelta('1 day')
 try:
 lo = index_data[index_data.trade_date == x - n_days*pday][quota].values[0]
 except:
 lo = index_data[index_data.trade_date == x][quota].values[0]
 return lo
#获取指数相关特征
index_data['dow'] = index_data.trade_date.apply(lambda x: x.dayofweek)
index_data['doy'] = index_data.trade_date.apply(lambda x: x.dayofyear)
index_data['day'] = index_data.trade_date.apply(lambda x: x.day)
index_data['month'] = index_data.trade_date.apply(lambda x: x.month)
index_data['close_B1D'] = index_data.trade_date.apply(get_prev_days, args=('close', 1,))
index_data['close_B2D'] = index_data.trade_date.apply(get_prev_days, args=('close', 2,))
index_data['open_B1D'] = index_data.trade_date.apply(get_prev_days, args=('open', 1,))
index_data['open_B2D'] = index_data.trade_date.apply(get_prev_days, args=('open', 2,))
index_data['high_B1D'] = index_data.trade_date.apply(get_prev_days, args=('high', 1,))
index_data['high_B2D'] = index_data.trade_date.apply(get_prev_days, args=('high', 2,))
index_data['low_B1D'] = index_data.trade_date.apply(get_prev_days, args=('low', 1,))
index_data['low_B2D'] = index_data.trade_date.apply(get_prev_days, args=('low', 2,))
index_data['vol_B1D'] = index_data.trade_date.apply(get_prev_days, args=('vol', 1,))
index_data['vol_B2D'] = index_data.trade_date.apply(get_prev_days, args=('vol', 2,))
index_data['amount_B1D'] = index_data.trade_date.apply(get_prev_days, args=('amount', 1,))
index_data['amount_B2D'] = index_data.trade_date.apply(get_prev_days, args=('amount', 2,))
index_data['up_or_dowm'] = index_data['close'] >= index_data['close_B1D']
#模型数据选取
x = index_data[['dow', 'doy', 'day', 'month', 'close_B1D', 'close_B2D', 'open_B1D', 'open_B2D',
'high_B1D', 'high_B2D', 'low_B1D', 'low_B2D', 'vol_B1D', 'vol_B2D', 'amount_B1D', 'amount_B2D']]
y = index_data['up_or_dowm']

时间相关特征:

  • `dow`: 一个星期中的第几天 (integer 0-6);
  • `doy`: 一年中的第几天 (integer 0-365);
  • `day`: 一月中的第几天 (integer 1-31);
  • `woy`: 一年中第几周 (integer 1-52);
  • `month`: 一年中第几月(integer 1-12)。

大盘指标相关特征:

  • 'close_B1D' : 前一天收盘价
  • 'close_B2D' : 前两天收盘价
  • 'open_B1D' : 前一天开盘价
  • 'open_B2D' : 前两天开盘价
  • 'high_B1D' : 前一天最高价
  • 'high_B2D' : 前两天最高价
  • 'low_B1D' : 前一天最低价
  • 'low_B2D' : 前两天最低价
  • 'vol_B1D' : 前一天成交量
  • 'vol_B2D' : 前两天成交量
  • 'amount_B1D' : 前一天成交金额
  • 'amount_B2D' : 前两天成交金额

预测目标:up_or_dowm(大盘涨跌)

第三模型评估及最佳模型选取

python深度学习股市预测,最好的股票量化技术分析库python

  • 首先使用sklearn.model_selection中的train_test_split对数据进行训练、测试划分,再通过 sklearn.preprocessing 中StandardScaler 进行归一化处理。
  • 第二,列举分类模型,主要包括集成方法类、广义线性分类器、K近邻分类器、
  • 第三,迭代运行模型,获取每种模型的准确的指标。
"""划分测试数据和训练数据"""
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.33, random_state=42)
"""数据归一化"""
from sklearn.preprocessing import StandardScaler
ss_x = StandardScaler() #初始化标准化器
x_train = ss_x.fit_transform(x_train)
x_test = ss_x.transform(x_test)
""" 模型筛选"""
# 集成方法分类器
from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import BaggingClassifier
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.ensemble import RandomForestClassifier
# 广义线性分类器
from sklearn.linear_model import PassiveAggressiveClassifier
from sklearn.linear_model import RidgeClassifier
from sklearn.linear_model import SGDClassifier
# K近邻分类器
from sklearn.neighbors import KNeighborsClassifier
#朴素贝叶斯分类器
from sklearn.naive_bayes import GaussianNB
# 神经网络分类器
from sklearn.neural_network import MLPClassifier
# 决策树分类器
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import ExtraTreeClassifier
# 支持向量机分类器
from sklearn.svm import SVC
from sklearn.svm import LinearSVC
# 建立模型
model = [
AdaBoostClassifier(),
BaggingClassifier(),
ExtraTreesClassifier(),
GradientBoostingClassifier(),
RandomForestClassifier(),
PassiveAggressiveClassifier(),
RidgeClassifier(),
SGDClassifier(),
KNeighborsClassifier(),
GaussianNB(),
MLPClassifier(),
DecisionTreeClassifier(),
ExtraTreeClassifier(),
SVC(),
LinearSVC()
]
# 依次为模型命名
classifier_Names = ['AdaBoost', 'Bagging', 'ExtraTrees', 'GradientBoosting', 'RandomForest',
'PassiveAggressive', 'Ridge', 'SGD', 'KNeighbors',
'GaussianNB', 'MLP', 'DecisionTree', 'ExtraTree', 'SVC', 'LinearSVC']
model_score = []
# 迭代模型
from sklearn.metrics import accuracy_score # 导入准确度评估模块
best_score = 0
for name, clf in zip(classifier_Names, model):
clf.fit(x_train, y_train) # 训练模型
pre_labels = clf.predict(x_test) # 模型预测
score = round(accuracy_score(y_test, pre_labels)*100, 2) # 计算预测准确度
#print('%s:%.2f' % (best_score, score))
if best_score <= score:
best_score = score
best_model = clf
model_score.append([name, score])
print('%s:%.2f' % (name, score)) # 输出模型准确度

划分训练和测试数据,本来一开始是用sklearn.cross_validation 这个方法,升级后方法就变为sklearn.model_selection,大家注意一下。

模型指标数据结果如下,后续会逐一介绍这些算法:

  • AdaBoost:63.75
  • Bagging:66.25
  • ExtraTrees:60.00
  • GradientBoosting:65.00
  • RandomForest:58.75
  • PassiveAggressive:55.00
  • Ridge:62.50
  • SGD:58.75
  • KNeighbors:61.25
  • GaussianNB:67.50
  • MLP:65.00
  • DecisionTree:61.25
  • ExtraTree:48.75
  • SVC:66.25
  • LinearSVC:65.00

输出最佳模型模型

print('最好的模型是{},模型得分:{}'.format(best_model, best_score))
  • 最好的模型是GaussianNB,模型得分:67.5