python自动炒股 github(github 炒股)

项目地址:

原意

python自动炒股 github(github 炒股)

近期,受COVID-19疫情影响,股市接连下跌。作为一个小白菜小韭菜,居然想出了买底的大胆想法,把剩下的私房钱都花在了上面。

第二天,价格暴跌,我加仓了。

第三天又跌了,我就加仓了。

第三天又跌了,我又加仓了……

经过一些错误的操作,结果是灾难性的。第一次买股票的时候,我被股市狠狠地打了一顿,还被老婆无情地嘲笑了。痛定思痛后,我决定改变思路:如何利用深度强化学习来自动模拟股票交易?尝试验证您是否可以获得好处。

监督学习和强化学习的区别

监督学习可以根据各种历史数据预测未来的股票价格,判断股票会上涨还是下跌,帮助人们做出决策。

强化学习是机器学习的另一个分支,它在做出决策时采取适当的行动以最大化最终奖励。与预测未来价值的监督学习不同,强化学习根据当日的输入状态输出一系列动作,从而最大化最终收益,实现自动化交易。

OpenAIGym股票交易环境

观察

策略网络观察的是一只股票的各种参数,比如开盘价、收盘价、交易量等。有些值会是非常大的值,比如交易金额或者交易量,可能是几百万、几千万甚至更大。为了让网络在训练时收敛,当输入观察到的状态数据时,必须将其归一化并变换到区间[-1,1]内。

行动行动

假设交易有三个操作:买入、卖出和持有。将操作定义为长度为2的数组。

action[0]是操作类型;action[1]代表买入或卖出百分比;

注意,当动作类型action[0]=3时,表示既不买入也不卖出股票。此时,action[1]的值就没有实际意义了。在网络的训练过程中,Agent会慢慢学习这些信息。

报酬

奖励函数的设计对于强化学习的目标至关重要。在股票交易的背景下,最应该关心的是当前的盈利情况,因此采用当前的盈利作为奖励函数。即当前本金股票价值-初始本金=利润。

#profitreward=self.net_worthINITIAL_ACCOUNT_BALANCEreward=1如果奖励0否则奖励=-100

为了使网络更快地学习盈利策略,当盈利为负时,给予网络较大的惩罚。

政策梯度

由于动作输出的值是连续的,因此采用基于策略梯度的优化算法,其中比较知名的是PPO算法。OpenAI和许多文献都使用PPO作为强化学习研究中的首选算法。PPO优化算法Python实现参考stable-baselines。

模拟实验

环境安装

#虚拟环境

virtualenv-ppython3.6venvsource./venv/bin/activate#安装库依赖pipinstall-rrequirements.txt

股票数据采集

股票证券数据集来自baostock,一个免费、开源的证券数据平台,提供PythonAPI。

pipinstallbaostock-

数据获取代码参考get_stock_data.py

pythonget_stock_data.py

将近20年的股票数据划分为训练集,最后1个月的数据作为测试集,验证强化学习策略的有效性。划分如下

验证结果

个股

初始本金10,000股票代码:sh.训练集:stockdata/train/sh.。招商银行.csv测试集:stockdata/test/sh.。招商银行.csv模拟运营20天,最终盈利400左右

多只股票

选择只股票进行训练,总盈利为:44.5%,既不亏损也不盈利:46.5%,亏损:9.0%

终于

StockGym环境主要是指Stock-Trading-Environment,对观察状态、奖励函数和训练集进行了修改。

我对股票完全陌生,所以难免会犯错误。欢迎指正!

数据和方法均来自网络,无法保证有效性。只是为了好玩!

书籍参考资料

Y.Deng、F.Bao、Y.Kong、Z.Ren和Q.Dai,“金融信号表示和交易的深度直接强化学习”,发表于IEEETransactionsonNeuralNetworksandLearningSystems,vol.28、没有。3,第653-664页,年3月。YuqinDai、ChrisWang、IrisWang、YilunXu,“外汇交易的强化学习”()ChienYiHuang。金融交易作为游戏:一种深度强化学习方法。arXiv预印本arXiv:.,。从头开始创建自定义健身房环境—股票市场示例()notadamking/Stock-Trading-环境()欢迎使用稳定基线文档!RL基线变得简单()

如何用Python和机器学习炒股赚钱

相信很多人都想过让人工智能帮你赚钱,但是怎么做呢?瑞士日内瓦的金融数据顾问GatanRickter最近发表了一篇文章,介绍了他使用Python和机器学习帮助股票交易的经验。最终的结果是回报率跑赢了一直处于长期牛市的标普500指数。虽然这篇文章没有完全公开他的方法,但公开的内容或许可以给我们如何利用人工智能炒股带来启示。

我终于跑赢了标准普尔500指数10个百分点!听起来可能不多,但当我们处理大量高流动性资本时,对冲基金的利润可能相当可观。更积极的方法也可以产生更高的回报。

这一切都始于我读到古尔休伯曼(GurHuberman)发表的一篇论文,题为《传染性投机和癌症治愈方法:一个让股价飙升的非事件》。该研究描述了年发生的一起涉及上市公司EntreMed的事件:

“周日《纽约时报》上一篇有关新癌症治疗方法潜力的文章,导致EntreMed股价从周五收盘价的12.063飙升至周一收盘价的52点和周五收盘价的52点。在接下来的三周内,其股价均高于收盘价。”30.这种投资热情也给其他生物科技股带来了溢价。然而,这一癌症研究可能取得的突破至少五个月前就已经在《自然》杂志和各种热门报纸上报道过,甚至《泰晤士报》!光是公众如此热烈的关注就可以引发一场即使没有真正的新信息出现,股价也会持续上涨。”

在研究人员做出的许多富有洞察力的观察中,有一个总结脱颖而出:

“走势可能集中在具有共同点的股票上,但这些共同点不一定是经济基本面。”

我想知道是否可以根据常用指标以外的指标来划分股票。我开始在数据库中进行挖掘,几周后,我发现一个数据库包含一个分数,该分数描述了元素周期表中的股票和元素之间“已知和隐藏的关系”的强度。

我有计算基因组学背景,这让我想起人们对基因与其细胞信号网络之间的关系知之甚少。但当我们分析数据时,我们开始看到我们以前可能没有预测到的新关系和相关性。

参与细胞可塑性、生长和分化的信号通路的选定基因的表达模式

与基因一样,股票也受到巨大网络的影响,因素之间存在着强弱的隐藏关系。其中一些影响和关系是可以预测的。

我的目标之一是创建多头和空头股票集群,我将其称为“篮子集群”,我可以将其用于对冲或简单地从中获利。这需要使用无监督的机器学习方法来创建股票集群,以便集群之间存在强或弱关系。这些集群将兼作我公司可以交易的股票“篮子”。

首先,我下载了一个数据集:上市公司隐藏关系发现。该数据集基于元素周期表中的元素与上市公司之间的关系。

然后我使用了Python和一些常见的机器学习工具——scikit-learn、numpy、pandas、matplotlib和seaborn,我开始了解我正在使用的数据集的分布形状。为此,我参考了一个名为“PrincipalComponentAnalysiswithKMeansVisuals”的KaggleKernel:PrincipalComponentAnalysiswithKMeansVisuals

importnumpyasnpimportpandasaspdfromsklearn.decompositionimportPCAfromsklearn.clusterimportKMeansimportmatplotlib.pyplotaspltimportseabornassbnp.seterr(divide=ignore,invalid=ignore)#测试少数列特征的快速方法#stocks=pd.read_csv(supercolumns-elements-nasdaq-nyse-otcbb-general-UPDATE--03-01.csv,usecols=range(1,16))stocks=pd.read_csv(supercolumns-elements-nasdaq-nyse-otcbb-General-UPDATE--03-01.csv)print(stocks.head())str_list=[]forcolname,colvalueinstocks.iteritems():iftype(colvalue[1])==str:

str_list.append(colname)#通过反转获取数字列num_list=stocks.columns.difference(str_list)stocks_num=stocks[num_list]print(stocks_num.head())

输出:快速浏览一下前5行:

zack@twosigma-戴尔-Precision-M:/home/zack/hedge_pool/baskets/hcluster$./hidden_relationships.py

Symbol_update--04-01氢氦锂铍硼\

0A0.00..00.00.0

1AA0.00..00.00.0

2AAAP0.00..00.00.0

3AAC0.00..00.00.0

4阿卡伊0.00..00.00.0

碳氮氧氟…镄钔\

00..00..0…0..

10..00..0…0..

20..00..0…0..

30..00..0…0..

40..00..0…0..

诺贝尔劳伦斯卢瑟福杜布尼姆西博吉姆博赫姆哈西姆\

00....00.00.00.0

10....00.00.00.0

20....00.00.00.0

30....00.00.00.0

40....00.00.00.0

梅特纳

00.0

10.0

20.0

30.0

40.0

[5行110列]

锕铝镅锑氩砷砹\

00..00.00....0

10..00.00....0

20..00.00....0

30..00.00....0

40..00.00....0

钡锫铍…锡钛钨铀\

00.00..0…0.00..00.

10.00..0…0.00..00.

20.00..0…0.00..00.

30.00..0…0.00..00.

40.00..0…0.00..00.

钒氙镱钇锌锆

00..00.00...0

10..00.00...0

20..00.00...0

30..00.00...0

40..00.00...0

[5行109列]

zack@twosigma-戴尔-Precision-M:/home/zack/hedge_pool/baskets/hcluster$

概念特征的皮尔逊相关性。在这种情况下,元素周期表中的矿物质和元素:

stock_num=stock_num.fillna(value=0,axis=1)X=stocks_num.valuesfromsklearn.preprocessingimportStandardScalerX_std=StandardScaler().fit_transform(X)f,ax=plt.subplots(figsize=(12,10))plt.title(概念特征的皮尔逊相关性)#使用seabornsb.heatmap(stocks_num.astype(float).corr(),linewidths=0.25,vmax=1.0,square=True,cmap='YlGnBu'绘制热图,linecolor=black,annot=True)sb.plt.show()

输出:。看看元素周期表中的元素与上市公司的关系真的很有趣。在某些时候,我想使用这些数据根据其与相关元素或材料的相关性来预测公司可能的突破。

测量“解释方差”和主成分分析(PCA)

解释方差=总方差-残差方差。应该感兴趣的PCA投影分量的数量可以通过解释方差度量来指导。SebastianRaschka关于PCA的文章对此进行了很好的描述,请参阅:主成分分析

#计算Cov的特征向量和特征值matirxmean_vec=np.mean(X_std,axis=0)cov_mat=np.cov(X_std.T)eig_vals,eig_vecs=np.linalg.eig(cov_mat)#创建(特征值)的列表,特征向量)tupleseig_pairs=[(np.abs(eig_vals[i]),eig_vecs[:i])foriinrange(len(eig_vals))]#从高到低排序.sort(key=lambdax:x[0],verse=True)#根据特征值计算解释方差stot=sum(eig_vals)var_exp=[(i/tot)*100foriinsorted(eig_vals,reverse=True)]cum_var_exp=np.cumsum(var_exp)#累积解释方差#方差plotmax_cols=len(stocks.columns)1plt.figure(figsize=(10,5))plt.bar(range(max_cols),var_exp,alpha=0.,align=center,label=individual解释方差,颜色=g)plt.step,cum_var_exp,其中=mid,标签=累积解释方差)plt.ylabelplt.xlabelplt.legendplt。展示

输出:

从该图中我们可以看到大量方差来自预测主成分的前85%。这是一个很高的数字,所以让我们从低端开始,仅对几个主要组件进行建模。有关分析合理数量的主成分的更多信息,请参阅:主成分分析直观解释

使用scikit-learn的PCA模块,让我们设置n_components=9。第二行代码调用fit_transform方法,该方法使用标准化电影数据X_std拟合PCA模型,并向该数据集应用降维。

pca=PCA(n_components=9)

x_9d=pca.fit_transform(X_std)

plt.figure(figsize=(9,7))

plt.scatter(x_9d[:0],x_9d[:1],c=金棒,alpha=0.5)

plt.ylim(-10,30)

plt.show()

输出:

在这里,我们甚至没有真正观察到聚类的最细微的轮廓,因此我们可能应该不断调整n_component的值,直到得到我们想要的结果。这是数据科学和艺术的“艺术”部分。

现在让我们尝试K均值,看看我们是否可以在下一节中可视化任何明显的聚类。

K均值聚类

我们将使用PCA来投影数据以实现简单的K均值。

使用scikit-learn的KMeans()调用和fit_predict方法,我们可以计算聚类中心并预测第一个和第三个PCA投影的聚类索引。然后我们可以定义自己的配色方案并绘制散点图,代码如下:

#设置3KMeans聚类

kmeans=KMeans(n_clusters=3)

#计算聚类中心和pr

edictclusterindices

X_clustered=kmeans.fit_predict(x_9d)#Defineourowncolormap

LABEL_COLOR_MAP={0:r,1:g,2:b}

label_color=[LABEL_COLOR_MAP[l]forlinX_clustered]

#Plotthescatterdigram

plt.figure(figsize=(7,7))

plt.scatter(x_9d[:,0],x_9d[:,2],c=label_color,alpha=0.5)

plt.show()

输出:

这个K-均值散点图看起来更有希望,好像我们简单的聚类模型假设就是正确的一样。我们可以通过这种颜色可视化方案观察到3个可区分开的聚类。

使用seaborn方便的pairplot函数,我可以以成对的方式在数据框中自动绘制所有的特征。我们可以一个对一个地pairplot前面3个投射并可视化:

#CreateatempdataframefromourPCAprojectiondata"x_9d"

df=pd.DataFrame(x_9d)

df=df[[0,1,2]]

df[X_cluster]=X_clustered

#CallSeabornspairplottovisualizeourKMeansclusteringonthePCAprojecteddata

sb.pairplot(df,hue=X_cluster,palette=Dark2,diag_kind=kde,size=1.85)

sb.plt.show()

输出:

构建篮子聚类

你应该自己决定如何微调你的聚类。这方面没有什么万灵药,具体的方法取决于你操作的环境。在这个案例中是由隐藏关系所定义的股票和金融市场。

一旦你的聚类使你满意了,你就可以设置分数阈值来控制特定的股票是否有资格进入一个聚类,然后你可以为一个给定的聚类提取股票,将它们作为篮子进行交易或使用这些篮子作为信号。你可以使用这种方法做的事情很大程度就看你自己的创造力以及你在使用深度学习变体来进行优化的水平,从而基于聚类或数据点的概念优化每个聚类的回报,比如shortinterest或shortfloat。

你可以注意到了这些聚类被用作篮子交易的方式一些有趣特征。有时候标准普尔和一般市场会存在差异。这可以提供本质上基于「信息套利」的套利机会。一些聚类则和谷歌搜索趋势相关。

看到聚类和材料及它们的供应链相关确实很有意思,正如这篇文章说的一样:Zoominginon10materialsandtheirsupplychains–Fairphone

我仅仅使用该数据集操作了Cobalt、Copper、Gallium和Graphene这几个列标签,只是为了看我是否可能发现从事这一领域或受到这一领域的风险的上市公司之间是否有任何隐藏的联系。这些篮子和标准普尔的回报进行了比较。

通过使用历史价格数据,然后你可以汇总价格数据来生成预计收益,其可使用HighCharts进行可视化:

我从该聚类中获得的回报超过了标准普尔相当一部分,这意味着你每年的收益可以比标准普尔还多10%。我还见过更加激进的方法可以净挣超过70%。现在我必须承认我还做了一些其它的事情,但因为我工作的本质,我必须将那些事情保持黑箱。但从我目前观察到的情况来看,至少围绕这种方法探索和包装新的量化模型可以证明是非常值得的,而其唯一的缺点是它是一种不同类型的信号,你可以将其输入其它系统的流程中。

生成卖空篮子聚类可能比生成买空篮子聚类更有利可图。这种方法值得再写一篇文章,最好是在下一个黑天鹅事件之前。

如果你使用机器学习,就可能在具有已知和隐藏关系的上市公司的寄生、共生和共情关系之上抢占先机,这是很有趣而且可以盈利的。最后,一个人的盈利能力似乎完全关乎他在生成这些类别的数据时想出特征标签)的强大组合的能力。

我在这类模型上的下一次迭代应该会包含一个用于自动生成特征组合或独特列表的单独算法。也许会基于近乎实时的事件,这可能会影响那些具有只有配备了无监督学习算法的人类才能预测的隐藏关系的股票组。

什么叫做深度学习框架,其作用是什么

目前是人工智能的时代,国内外像Google、微软、FaceBook、百度和华为等巨头公司纷纷投入较大的资源进行深度学习框架的研发和应用的拓展。表1列出了github上流行的深度学习框架的星数。

表1github上流行的深度学习框架的星数

下面有侧重地介绍一下上表中列出的一些深度学习框架。

(一)TensorFlow

TensorFlow是用C++语言开发的,支持C、Java、Python等多种语言的调用,目前主流的方式通常会使用Python语言来驱动应用。这一特点也是其能够广受欢迎的原因。利用C++语言开发可以保证其运行效率,Python作为上层应用语言,可以为研究人员节省大量的开发时间。

TensorFlow相对于其他框架有如下特点。

1、灵活

TensorFlow与CNTK、MXNET、Theano同属于符号计算构架,允许用户在不需要使用低级语言(如在Caffe中)实现的情况下,开发出新的复杂层类型。基于图运算是其基本特点,通过图上的节点变量可以控制训练中各个环节的变量,尤其在需要对底层操作时,TensorFlow要比其他框架更容易。当然它也有缺点,灵活的操作会增加使用复杂度,从而在一定程度上增加了学习成本。

2、便捷、通用

作为主流的框架,TensorFlow生成的模型,具有便捷、通用的特点,可以满足更多使用者的需求。TensorFlow可以适用于Mac、Linux、Windows系统上开发。其编译好的模型几乎适用于当今所有的平台系统,并提满足“开箱即用”的模型使用理念,使模型应用起来更简单。

3、成熟

由于TensorFlow被使用的情况最多,所以其框架的成熟度绝对是第一的。在Google的白皮书上写道,Google内部有大量的产品几乎都用到了TensorFlow,如搜索排序、语音识别、谷歌相册和自然语言处理等。有这么多在该框架上的成功案例,先不说能够提供多少经验技巧,至少可以确保学习者在研究的道路上,遇到挫折时不会怀疑是框架的问题。

4、超强的运算性能

虽然TensorFlow在大型计算机集群的并行处理中,运算性能仅略低于CNTK,但是,其在个人机器使用场景下,会根据机器的配置自动选择CPU或GPU来运算,这方面做得更加友好与智能化。

(二)Caffe

当年深度学习的老大。最初是一个强大的图像分类框架,是最容易测试评估性能的标准深度学习框架,并且提供很多预训练模型,尤其该模型的复用价值在其他框架的学习中都会出现,大大提升了现有模型的训练时间。但是现在的Caffe似乎停滞不前,没有更新。尽管Caffe又重新崛起,从架构上看更像是TensorFlow,而且与原来的Caffe也不在一个工程里,可以独立成一个框架来看待,与原Caffe关系不大。

(三)CNTK

CNTK是一个微软开发的深度学习软件包,以速度快著称,有其独有的神经网络配置语言BrainScript,大大降低了学习门槛。有微软作为后盾,CNTK成为了最具有潜力与TensorFlow争夺天下的框架。但目前其成熟度要比TensorFlow差太多,即便是发行的版本也会有大大小小的bug。与其他框架一样,CNTK具有文档资料不足的特点。但其与VisualStudio的天生耦合,以及其特定的MS编程风格,使得熟悉VisualStudio工具的小伙伴们从代码角度极易上手。另外,CNTK目前还不支持Mac操作系统。

关于深度学习的基础问题可以看下这个网页的视频教程,网页链接,希望我的回答能帮到你。

上一篇: 徐小明周二操作策略(2023年4月17日)(徐小明周二操作策略(2O23年7月17日))
下一篇: 中概股退市风险(中概股退市热潮)

相关资讯