量化投资学习笔记88——实现量化交易经典策略:多因子选股(改进3,完结)

这次采用机器学习的分类算法,主要用感知机、支持向量机、逻辑回归等几个算法。
基本思路就是把股票数据分成盈利和亏损两类,根据回测年化收益率来给股票数据打标签,再进行训练。
先给数据打标签。

1
2
3
4
5
6
# 对数据打标签
def addItem(data):
data["res"] = 0
data.loc[data.ar > 0.0, "res"] = 1
data.loc[data.ar <= 0.0, "res"] = 0
return data

再用感知机模型看看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 感知机模型分析
def doPerceptron(data):
x = data.iloc[:, 3:21]
y = data.loc[:, ["res"]]
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2, random_state = 631)
clf = Perceptron(fit_intercept = False, n_iter = 30, shuffle = False)
clf.fit(x_train, y_train.astype("int"))
print("感知机得分:", clf.score(x_test, y_test))
pred = clf.predict(x_test)
# print(pred)
plt.figure()
plt.scatter(range(len(pred)), y_test, c = "b", label="predict")
plt.scatter(range(len(pred)), pred, c = "r", label="test")
plt.savefig("感知机模型分类.png")
plt.close()
# 保存模型
joblib.dump(clf, "Perceptron.m")
return clf

结果很差
感知机得分: 0.2403560830860534
再画散点图看看

回测下试试。

结果很差了,年化7%。
支持向量机


结果居然一模一样。
逻辑回归

回测结果完全一样。
应该是我的程序有问题。
最后再来试一下聚类算法,用KNN吧。


终于有一个不一样的了。年化收益率3%。
下面,再试试深度学习?这是我第一次写深度学习的程序。
完全照这个来: https://zhuanlan.zhihu.com/p/59403493
写了半天没调通,好像是数据类型不对。先摆着吧。
另外关于一些股票代码不足六位的,知乎上有网友说是深市的代码省略了前面的“00”和“000”。我想办法加上吧。
折腾了一晚上,改好了,股票池数量增加到2600多。

再运行之前的回测程序,年化收益率有了变化。

顺着看了一下,多元线性回归的年化收益率是31.4%,二项式回归是39.7%,随机森林回归是35.5%,感知机是-1.8%,支持向量机是-1.8%,逻辑回归是-1.8%,KNN是7%。深度学习回归模型没调出来。所以收益率最高的是二项式回归的。输出股票代码看一下。

接下来是不是就该实盘了?嘿嘿。

模拟炒股,实盘才发现,选的股票除了建设银行以外全是百元以上的股票!总共100万,大体上是每只股票10万左右,全仓买入。摆着,一个月,一年以后来看吧。
这里必须来个免责声明:本文是我自己瞎折腾的结果,不作为投资建议。照此投资,风险自担。股市有风险,入市须谨慎。
感觉我就是所谓的“调包侠”,把数据喂给各种算法鼓捣出结果来。真的要实盘像我这样是肯定不行的。接下来打算一个算法一个算法的仔细学一下。

具体代码看: https://github.com/zwdnet/MyQuant/tree/master/48
策略文件为facts.py。

我发文章的三个地方,欢迎大家在朋友圈等地方分享,欢迎点“在看”。
我的个人博客地址:https://zwdnet.github.io
我的知乎文章地址: https://www.zhihu.com/people/zhao-you-min/posts
我的微信个人订阅号:赵瑜敏的口腔医学学习园地

欢迎打赏!感谢支持!