提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
原创|使用教程|编辑:龚雪|2017-04-20 14:02:01.000|阅读 436 次
概述: 本篇文章是"Python股市数据分析"两部曲中的第一部分,主要介绍金融数据分析的背景以及移动均线等方面的内容。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
文|Curtis Miller
本文内容基于我在犹他州立大学MATH 3900 (Data Mining)课程上的一次讲座。在这些文章中,我将介绍一些关于金融数据分析的基础知识,例如,使用pandas获取雅虎财经上的数据,股票数据可视化,移动均线,开发一种均线交叉策略,回溯检验以及基准测试。第二篇文章会介绍一些实践中可能出现的问题,而本篇文章着重讨论移动平均线。
注意:本篇文章所涉及的看法、意见等一般性信息仅为作者个人观点。本文的任何内容都不应被视为金融投资方面的建议。此外,在此提供的所有代码均无法提供任何保证。选择使用这些代码的个人需自行承担风险。
高等数学与统计学已在金融领域应用了一段时间。 在20世纪80年代以前,银行业和金融界以"枯燥乏味"而闻名;投资银行与商业银行不同,银行的主要职责在于处理"简单的"(至少与今天相比)金融商品,如贷款。里根政府的放松管制,再加上一大批数学天才,将整个行业从"枯燥的"银行业务转变成了今天这个样子,而且,从那时起,金融便融入了其他自然学科,激励着数学领域的研究与发展。比如,近期数学领域最大的成就之一,便是公式的推导,这一成果可用于股票期权(一种赋予持有人以特定价格向期权发行商购买或出售股票权利的合约)的定价。可以说,
近几年来,为了在买卖金融资产的过程中赚取利润,计算机科学也同高等数学一起,参与到了金融与贸易领域的变革当中。最近几年,计算机主导着贸易的进行;算法相比人类能够更快速地做出交易决策(如此之迅速,以至于)。此外,,而且以后也可能会继续这样下去。实际上,大部分的算法交易都属于高频交易(HFT)。尽管算法的表现可能超过人类,但是这项技术并不成熟,应用的领域又充满着高风险与动荡。高频交易导致了年与年市场的闪电崩盘,其中,2013年的崩盘是由一条所引发的。
然而,本篇文章并不会讨论如何使用糟糕的数学模型和交易算法使股市崩盘。相反,我打算向大家介绍一些用于处理和分析股市数据的Python工具。我还将讨论移动均线、如何使用移动均线来构建交易策略、如何在进入仓位时制定退出策略以及如何使用回溯检验评估交易策略等方面的内容。
声明:这不是关于金融投资的建议!!!而且,我从未从事过交易员等工作(许多这方面的知识我都是在盐湖城社区学院中一门为期一学期的股市交易课程中接触到的)!这些只是单纯的入门级知识,并不足以读者在股市中进行实际的交易操作。股市有风险,入市需谨慎!
在我们处理股票数据之前,我们首先需要通过一些可行的途径获取它们。股票数据可以从、或者其他数据源中获得,而pandas可以轻松访问雅虎财经、谷歌财经以及其他来源中的数据。在本篇文章中,我们从雅虎财经获取股票数据。
以下代码演示了直接创建一个包含股票信息的DataFrame对象的过程。(你可以在了解更多关于远程数据访问的信息。)
让我们简单介绍一下。开盘价是指股票在交易日开市时的股价(并不一定是前一交易日的收盘价格),最高价是指在交易日当天股价的最高价格,最低价是指在交易日当天股价的最低价格,收盘价是指股票在交易日收盘时的股价。交易量表示被交易股票的数量。调整收盘价是根据公司行为调整后的股票收盘价格。尽管我们认为大多数股票的价格是由交易员设定的,但是股票分割(公司将当前的一张股票拆分成价值一半的两张股票)和派付股息(为每份股份支付公司红利)仍然会影响到股票的价格,这些情况我们都应该考虑进来。
既然我们现在有了股票数据,我们可以通过可视化的形式展示它。我首先演示如何使用matplotlib来可视化股票数据。注意,名为apple的DataFrame对象有一个很方便的方法plot(),这个函数使创建图表更加容易。
折线图是很不错,但是每个日期都至少包含四个变量(开盘价、最高价、最低价、收盘价),我们希望有一些可视化的方法能够同时展示这四个变量,而不是简单地画四条折线。金融数据通常以日本蜡烛图(即K线图)的形式绘制,这种图表最早在18世纪由日本米市商人命名。matplotlib可以绘制这样的图表,但操作起来比较复杂。
我实现了一个函数,你可以更容易地在pandas数据框架中创建蜡烛图,并使用它绘制我们的股票数据。(代码基于,你可以在找到相关函数的文档)
在蜡烛图中,黑色蜡烛表示交易日当天收盘价高于开盘价(盈利),而红色蜡烛表示交易日当天开盘价高于收盘价(亏损)。烛芯表示最高价与最低价,蜡烛体则表示开盘价与收盘价(颜色用来区分哪一侧为开盘价,哪一侧为收盘价)。蜡烛图在金融领域很受欢迎,根据图表中蜡烛的形状、颜色以及位置,中的一些策略可以使用它来制定交易策略。但在这里我不会介绍有关这类策略的内容。
我们可能希望在同一张图表中绘制多个金融商品的数据;我们可能想要对比股票,将它们与市场进行比较,或者看看其他证券,。之后,我们可能还想看看如何根据一些指标,如移动均线,来绘制金融商品。对于这种情况,你最好使用折线图而不是蜡烛图。(如何将多个蜡烛图相互叠加在一起而不使图表混乱?)
在下面的代码中,我获取了一些其他科技公司的股票数据,并把它们的调整收盘价格绘制在了一起。
这张图有什么问题?尽管绝对价格很重要(昂贵的股票很难购买,这不仅影响着这类股票的价格波动,也影响着你交易这类股票的能力),但是在交易过程中,相比绝对价格,我们更加关心资产的相对变化。谷歌的股票比苹果和微软的股票贵得多,这种差异使得苹果和微软股票的波动看起来比实际情况小得多。
一种解决方案是在绘制图表时使用两种不同的尺度;一种尺度用于苹果和微软的股票,另一种尺度用于谷歌股票。
然而,一个"更好的"解决方案是,仅在图表中绘制我们真正想要的信息:股票的回报。这就需要我们根据需求将数据转换成更有用的形式。这里有几种我们可以应用的转换。 一种方式是考虑股票自利息周期开始以来的回报。换句话说,我们绘制:
正如我下面演示的这样,这意味着转换stocks对象中的数据。
这样的图表就更有用了。现在,我们可以看到每只股票在周期开始以来的盈利。而且,我们还能发现这些股票密切相关;它们通常朝同一个方向发展,在其他的图表中很难发现这样的事实。
除此之外,我们还可以绘制每只股票在每一个交易日的变化。比如,我们可以通过比较第t天与第t+1天的价格来绘制股票增长的百分比,公式如下:
但是这种变化也可以通过如下公式定义:
这些公式多少有些不同,可能会分析出不同的结论,但是还有另外一种对股票增长建模的方法:对数差值。
(这里的log为自然对数,我们的定义并不关心使用的是第t天与第t-1天的对数差值还是第t+1天与第t天的对数差值。)使用对数差值的好处在于,这种差值可以理解为股价的百分比变化,且不依赖于计算过程中分数的分母。 我们可以通过如下方式获取并绘制stocks对象中数据的对数差值:
你倾向于哪一种转换?关注股票以往的盈利情况会使得证券的整体趋势更加明显。但是,在对股票的行为模式建模时,更先进的方法实际考虑的是交易日间股价的变化。因此,我们不应该忽略这部分的信息。
图表是很非常有用的。实际上,一些交易员做出的策略几乎完全基于图表(他们属于"技术人员",因为基于在图表中查找模式的交易策略是被称为技术分析的贸易规则的一部分)。现在,让我们考虑如何才能找到股票的趋势。 对于序列xt以及时刻t,q天均线表示过去q天股价的均值:也就是说,如果MAtq表示t时刻的q天均线,那么:
移动均线平滑了数据序列,并有助于识别股市的发展趋势。q值越大,移动均线就越难反映序列xt中的短期波动。这里的想法是,移动均线过程能够从"噪声"中识别股市的发展趋势。短期均线具有较小的q值,比较紧密地跟随股票的趋势发展,而长期均线的q值较大,进而使得均线对股票波动的响应较小,而且更加平稳。
pandas提供了轻松计算移动均线的功能。下面的代码展示了这部分功能,我首先为苹果股票创建了一条20天(1个月)均线,随后,将其与股票数据一同绘制在图表中。
注意滚动均值是从什么时候开始的。只有在积累了20天的交易日数据之后,我们才能计算股票的20天均线。这个限制对于长期均线而言更加严重。如果我们想要计算股票的200天均线,我们需要多少苹果公司的股票数据才行?在这里,我们将主要关注2016年的股票走势。
你会注意到,移动均线要比实际的股票数据平滑得多。此外,这是一个难以处理的标志;股票需要在移动均线的上方或下方,以便改变股票走势的方向。因此,股票走势越过移动均线的情况表明了股票一种可能的走向,应该引起我们的注意。 交易员通常对多条移动均线感兴趣,比如20天均线、50天均线以及200天均线。同时检查多条移动均线也很容易。
其中,20天均线对局部变化最为敏感,而200天均线对局部变化最不敏感。在这里,200天均线表明股票整体呈熊市行情:股票随着时间的推移趋势向下。20天均线有时呈熊市行情,而在其他时候呈牛市行情,预期股票会出现积极的波动。你还可以看到,移动均线的交叉表示着股票趋势的变化。我们将这些交叉看作交易信号或指示器,表示金融证券正在改变趋势,我们可能从中获取利润。
文章的第二部分将介绍如何基于移动均线设计并测试一个交易策略。 文章为简译,更为详细的内容,请查看
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢