首页 存档 技术 查看内容

教程 | 如何用Python和机器学习炒股赚钱?

2018-3-30 13:00 |来自: 互联网 455 0

摘要: 选自Hackernoon 作者:Gatan Rickter 机器之心编译 参与:熊猫 相信很多人都想过让人工智能来帮你赚钱,但到底该如何做呢?瑞士日内瓦的一位金融数据顾问 Gatan Rickter 近日发表文章介绍了他利用 Python 和机器学习 ...

选自Hackernoon

作者:Gatan Rickter

机器之心编译

参与:熊猫

相信很多人都想过让人工智能来帮你赚钱,但到底该如何做呢?瑞士日内瓦的一位金融数据顾问 Gatan Rickter 近日发表文章介绍了他利用 Python 和机器学习来帮助炒股的经验,其最终成果的收益率跑赢了长期处于牛市的标准普尔 500 指数。虽然这篇文章并没有将他的方法完全彻底公开,但已公开的内容或许能给我们带来如何用人工智能炒股的启迪。机器之心对本文进行了编译介绍,代码详情请访问原文。


我终于跑赢了标准普尔 500 指数 10 个百分点!听起来可能不是很多,但是当我们处理的是大量流动性很高的资本时,对冲基金的利润就相当可观。更激进的做法还能得到更高的回报。


这一切都始于我阅读了 Gur Huberman 的一篇题为《Contagious Speculation and a Cure for Cancer: A Non-Event that Made Stock Prices Soar》的论文。该研究描述了一件发生在 1998 年的涉及到一家上市公司 EntreMed(当时股票代码是 ENMD)的事件:


「星期天《纽约时报》上发表的一篇关于癌症治疗新药开发潜力的文章导致 EntreMed 的股价从周五收盘时的 12.063 飙升至 85,在周一收盘时接近 52。在接下来的三周,它的收盘价都在 30 以上。这股投资热情也让其它生物科技股得到了溢价。但是,这个癌症研究方面的可能突破在至少五个月前就已经被 Nature 期刊和各种流行的报纸报道过了,其中甚至包括《泰晤士报》!因此,仅仅是热情的公众关注就能引发股价的持续上涨,即便实际上并没有出现真正的新信息。」


在研究者给出的许多有见地的观察中,其中有一个总结很突出:


「(股价)运动可能会集中于有一些共同之处的股票上,但这些共同之处不一定要是经济基础。」


我就想,能不能基于通常所用的指标之外的其它指标来划分股票。我开始在数据库里面挖掘,几周之后我发现了一个,其包含了一个分数,描述了股票和元素周期表中的元素之间的「已知和隐藏关系」的强度。


我有计算基因组学的背景,这让我想起了基因和它们的细胞信号网络之间的关系是如何地不为人所知。但是,当我们分析数据时,我们又会开始看到我们之前可能无法预测的新关系和相关性。


选择出的涉及细胞可塑性、生长和分化的信号通路的基因的表达模式


和基因一样,股票也会受到一个巨型网络的影响,其中各个因素之间都有或强或弱的隐藏关系。其中一些影响和关系是可以预测的。


我的一个目标是创建长的和短的股票聚类,我称之为「篮子聚类(basket clusters)」,我可以将其用于对冲或单纯地从中获利。这需要使用一个无监督机器学习方法来创建股票的聚类,从而使这些聚类之间有或强或弱的关系。这些聚类将会翻倍作为我的公司可以交易的股票的「篮子(basket)」。


首先我下载了一个数据集:http://54.174.116.134/recommend/datasets/supercolumns-elements-08.html,这个数据集基于元素周期表中的元素和上市公司之间的关系。


然后我使用了 Python 和一些常用的机器学习工具scikit-learn、numpy、pandas、matplotlib 和 seaborn,我开始了解我正在处理的数据集的分布形状。为此我参考了一个题为《Principal Component Analysis with KMeans visuals》的 Kaggle Kernel:https://www.kaggle.com/arthurtok/principal-component-analysis-with-kmeans-visuals


import numpy as np
import pandas as pd
from sklearn.decomposition
import PCA
from sklearn.cluster
import KMeans
import matplotlib.pyplot as plt
import seaborn as sb np.seterr(divide='ignore', invalid='ignore')
# Quick way to test just a few column features

# stocks = pd.read_csv('supercolumns-elements-nasdaq-nyse-otcbb-general-UPDATE-2017-03-01.csv', usecols=range(1,16))

stocks = pd.read_csv('supercolumns-elements-nasdaq-nyse-otcbb-general-UPDATE-2017-03-01.csv') print(stocks.head()) str_list = []
for colname, colvalue in stocks.iteritems():
if type(colvalue[1]) == str: str_list.append(colname)
# Get to the numeric columns by inversion

num_list = stocks.columns.difference(str_list) stocks_num = stocks[num_list] print(stocks_num.head())


输出:简单看看前面 5 行:



概念特征的皮尔逊相关性(Pearson Correlation)。在这里案例中,是指来自元素周期表的矿物和元素:


stocks_num = stocks_num.fillna(value=0, axis=1)

X = stocks_num.values
from sklearn.preprocessing import StandardScaler X_std = StandardScaler().fit_transform(X) f, ax = plt.subplots(figsize=(12, 10)) plt.title('Pearson Correlation of Concept Features (Elements
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部