使用Python做股票市场数据分析的介绍(第1部分)

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

本文是由两部分组成,使用Python做股票市场数据分析的的介绍是第一部分,基于我给犹他大学数学3900(数据分析)学科的讲座。在这些帖子中,我将讨论基础知识,如使用pandas从雅虎财经获得数据,可视化股票数据,移动均线,开发一个移动均线交叉策略,回溯测试和标杆管理。第二篇文章将包括实践问题。本文讨论的主题到介绍移动均线为止。

注意:从作者的角度来看,这篇文章中的信息包含信息的一般性质和观点。本文的内容不是财务建议。此外,这里写的任何代码都没有提供任何形式的保证。选择使用它的人,自己承担风险。

简介

高等数学和统计学已经在金融学出现了一段时间。在1980年之前,银行业和金融业以“无聊”而闻名;投资银行与商业银行不同,该行业的主要作用是处理“简单”(至少与今天相比)的金融工具,如贷款。在里根总统执政时期的放松管制,再加上大量的数学天才,将该行业从处理“无聊”业务转变成今天这样,从那以后,金融学和其它学科一起成为了数学研究与进步的动力。例如,数学最新成就之一是Black-Scholes公式的推导,它促进了股票期权的定价(一份契约赋予它的持有者以特定价格购买或出售股票给期权发行人的权利)。不过,不好的统计模型,包括Black-Scholes公式,对2008金融危机要负部分责任

近年来,计算机科学也和高等数学一样,开始被用来革新金融和贸易,以及一切以盈利为目的金融资产买卖的行为。近年来,通过计算机贸易已经占主导地位;算法负责做比人工更快的快速瞬间的交易决策(非常迅速,这个速度的理论上限为光速)。此外,机器学习和数据挖掘技术在金融领域越来越受欢迎,并且可能会继续这样。事实上,大部分算法交易是高频交易(HFT)。虽然算法可能胜过人类,然而该技术仍然是新的混乱的高风险领域。HFT为有的情况负责,比如2010年闪电崩盘2013年闪电崩盘,这些崩盘仅仅因为美联社推特受到黑客入侵而发布了有关袭击白宫的消息。

然而,本讲不是关于如何用不好的数学模型或交易算法使股票市场崩溃。我打算为你提供用Python处理和分析股票市场数据的基本方法。我也将讨论移动均线,如何使用移动均线制定交易策略,如何制定进入位置的退出策略和如何用回溯测试评估一个策略。

免责声明:这不是财务建议!!!此外,作为交易者我有零经验(很多这方面的知识来自于我在盐湖社区学院一个学期的股票交易课程)!这纯粹是入门知识,不足以做活生生的股票交易。做赔钱股票交易,由你自己负责!

获取并可视化股票数据

使用pandas从雅虎财经获取数据

在我们玩股票数据之前,需要用一些可行的方式得到它。股票数据可以在雅虎财经谷歌财经,或者其它来源得到,并且pandas包提供对雅虎财经、谷歌财经和其它源数据的便捷访问,本讲我们从雅虎财经获得数据。

下面的代码演示如何直接创建一个包含股票信息的DataFrame对象。(访问这里,你可以阅读更多关于远程数据的信息。)

1.png

2.png

3.png

4.png

让我们简要地讨论一下。开盘价是交易日开始的股票价格(它未必是前一交易日的收盘价),最高价是该交易日股票的最高价格,最低价是该交易日股票的最低价格,收盘价是股票收盘时的价格。成交量表示有多少个股票被交易。复权收盘价是股东或监督委员会决议调整股票价格后的股票收盘价。虽然股票价格被认为主要由交易者设置,拆股(公司分割每一个现存的股票成等值两个且价格折半)和分红(公司每股利润派息)也影响股票价格,因此应该把它们考虑在内。

可视化股票数据

现在,我们有了股票数据,我们想可视化它。我首先演示使用matplotlib包该怎么做。注意apple DataFrame对象有一个便捷的方法plot(),该方法使创建plot更容易。

5.png

6.png

7.png

linechart很好,但是每天至少涉及四个变量(开盘价、最高价、最低价和收盘价),而且我们希望有一些可视化的方式来看所有的四个变量,不需要绘制四个独立的线。财务数据经常采用日本K线图来绘制,如此命名是因为它是由十八世纪的日本大米商首次创建。matplotlib可以创建这样的图表,虽然它需要相当大的努力。

我已经写了一个函数,欢迎你使用它从pandas数据帧更轻松创建K线图,并且使用它绘制我们的股票数据。(代码以这个例子为基础,并且在这里你可以阅读所涉及的功能文档)。

8.png

9.png

10.png

11.png

在K线图中,黑色柱体表示当天收盘价高于开盘价(收益),而红色柱体表示当天开盘价高于收盘价(亏损)。蜡烛芯表示最高价和最低价,并且柱体表示开盘价收盘价(用颜色来确定柱体的哪一端是开盘价,哪一端是收盘价)。K线图在金融界很受欢迎,并且技术分析中的一些策略使用它们根据形状,颜色,和蜡烛位置来做交易决策。我今天不会涉及这些策略。

我们可能希望一起绘制多种金融产品;可能想比较股票,将它们与市场进行比较,或者看其它证券如交易所交易基金(ETFs)。随后,我们也想看到如何根据一些指标绘制一个金融产品,如一个移动平均线。对于这,你宁愿使用线图而不是K线图。(如何绘制多K线图在另一个之上不凌乱?)

下面,我获取其它一些技术公司的股票数据,并且将它们的复权收盘价绘制在一起。

12.png

13.png

14.png

15.png

这张图有什么问题?尽管绝对价格很重要(昂贵的股票很难购买,这不仅影响到他们的波动,而且影响你交易该股票的能力),当交易时,我们更多的是考虑资产的相对变化而不是它的绝对价格。谷歌的股票比苹果或微软的都贵得多,这种差异使得苹果和微软的股票看来比它们真正的波动性要小得多。

一个解决方案是在绘制数据时使用两个不同的尺度;一个尺度用于苹果和微软的股票,另一个用于谷歌。

16.png

17.png

然而,一个“更好的”解决方案是绘制我们实际需要的信息:股票的回报。这包括将数据转换成对我们而言更有用的东西。我们可以应用多种转换。

一种转变是考虑自利率期间开始股票的回报。换句话说,我们绘制:

18.png

这将需要转换stocks对象中的数据,我将在下一步做。

19.png

20.png

21.png

22.png

这是一个更有用的图。我们现在可以看到,每支股票自某时期开始以来如何盈利。此外,我们看到这些股票是高度相关的;它们的走势一般相同,这个事实在其它图表中很难看到。

另外,我们可以绘制每天每支股票的变化。这样做的一个方法是当比较$t$天和$t + 1$天时,绘制股票增加的百分比,公式如下:

23.png

但改变可以被认为是不同的:

24.png

这些公式是不同的,并且可以导致不同的结论,但有另外一种方法来为股票的增长建模:使用不同的log。

25.png

(这里,log是自然对数,并且我们的定义不强烈依赖于我们使用26.png还是27.png。)用不同的log的优势在于这种差异可以被解释为一个股票的百分比变化,但是不依赖于一小部分。

我们可以获取和绘制股票数据的不同log,如下:

28.png

29.png

30.png

31.png

你喜欢哪个转变?看到自期初开始的回报使讨论的证券整体趋势更明显。然而,实际考虑股票行为建模时,天之间的变化是更先进的方法。所以它们不应该被忽视。

移动均线

图表很有用。事实上,一些交易者的战略基本上完全基于图表(他们是“技术人员”,由于交易策略基于图表来发现模式是交易原则的一部分,它被称为技术分析)。现在让我们考虑,如何找到股票的趋势。

对于一个序列xt和时间点t,一个q日均线是过去$q$天的平均:即,如果32.png代表移动均线过程,那么:

33.png

移动均线平滑序列并有助于确定趋势。q越大,序列xt中的短期波动的移动均线过程反应越迟钝。其基本思想是移动平均过程有助于排除“噪音”确认趋势。快速均线具有较小的q并更密切跟踪股票,而慢速均线具有较大的q,从而导致它们对股票波动的反应较迟钝且比较稳定。

pandas提供了轻松地计算移动均线功能。通过对Apple数据创建一个20日(一个月)均线,演示它的使用,并在股票旁边绘制它。

34.png

35.png

注意移动平均开始有多晚。它不能被计算,直到20天过去。对于更长的移动均线,这种限制变得更严重。因为我想要能够计算200日均线,我要延长多少我们有的AAPL数据。不过,我们将很大程度上集中在2016年。

你会注意到移动均线比实际股票数据更平滑。此外,这是一个指示器;股票需要高于或低于移动平均线以改变方向。因此,穿越移动均线标志着走势可能改变,并应该引起注意。

交易者通常对多个移动均线感兴趣,例如20日均线、50日均线和200日均线。同时检查多个移动均线很容易。

36.png

37.png

20日均线对局部变化最敏感,而200日均线对局部变化最不敏感。此处,200日均线表示整体下跌趋势:股票随着时间的推移呈下降趋势。20日均线有时看跌,有时看涨,此处预期是上涨。你还可以看到,移动均线的交叉表明趋势的变化。这些交叉点是我们可以使用的交易信号,或者表示金融安全正在改变方向,而且交易可能会赚一笔钱。

下周来访阅读如何设计和测试一个使用移动均线的交易策略。

更新:这篇文章的早期版本建议算法交易是高频交易的同义词。正如评论中指出的那样,事实并非如此;算法可以用来识别交易,而不一定是高频率。高频交易是算法交易的一个大的子集,而不等于它。

英文原文:https://ntguardian.wordpress.com/2016/09/19/introduction-stock-market-data-python-1/
译者:蒲公英
 

2月15日11:00到13:00网站停机维护,13:00前恢复