【Python量化投资】基于技术分析研究股票市场
一
金融专业人士以及对金融感兴趣的业余人士感兴趣的一类就是历史价格进行的技术分析。维基百科中定义如下,金融学中,技术分析是通过对过去市场数据(主要是价格和成交量)的研究预测价格方向的证券分析方法。
下面,我们着重对事后验证过去市场数据的研究,而不是过多低关注对未来股价变动的预测。我们选取的研究目标是标准普尔(S&P)500指数,这是美国股票市场有代表性的指标,包括了许多著名公司的股票,代表着高额的市场资本,而且,该指数也具有高流动性的期货和期权市场。
二
我们将从Web数据来源读取历史指数水平信息,并未一个基于趋势信号的交易系统实现简单的事后验证。但是,首先需要数据才能开始工资,这里我们主要靠pandas库,因为NumPy库比较常用,所以还是把该库导入。
(PS:除NumPy和SciPy,pandas也是Python的重要库之一)


这里DataReader函数来自pandas.io.data,可以用来从不同数据来源,尤其是雅虎财经网站上获取金融数据。
这里我们读取了从2000年的第一个交易日到结束日期的S&P500指数事件序列数据,而且自动地用TimeStamp对象生成一个时间索引。
收盘价的时间序列图如下:


所以先在pandas DataFrame对象上添加一个新列,用于两个趋势之间的差值。
此处的趋势策略是基于两个月(42个交易日)和一年(252个交易日)的趋势(也就是两种期间指数水平的移动平均数)。Pandas可以高效地生成各个时间序列。
首先先生成趋势数据:

三
现在数据已经已经完整,开始设计一条规则来生成趋势信号。规则如下:
买入信号(多头):
42天趋势第一次高于252天趋势SD点。
等待(持币):
42天趋势在252天趋势的+/-SD点范围内。
卖出信号(空头):
42天信号第一次低于252天趋势SD点。
Pandas数值运算通常以向量方式进行,这样可以取两列的全部差值:

在最后一个可用交易日上,42日趋势线远远高于252趋势线。尽管两个趋势列中的项目数量不相等,pandas通过在相应的指数位置放入NaN处理这种情况:

现在生成我们的投资机制,此处假定信号阈值为50:

即在1489个交易日中,42日趋势线高于252日趋势线SD个点以上,1232个交易日中,42日趋势线低于252日趋势线SD个点以上。所以,如果短期趋势线与长期趋势线交叉,它很可能在持续一段时间,即所谓的投资机制。图形如下:



四
至此,测试基于信号投资策略所需的数据都已准备就绪。为简化,假定投资者可以直接投资于指数或者直接做空指数,现实中要通过指数基金、交易所交易基金或者指数期货完成。这也会造成一些交易成本。因为不打算频繁交易,所以此处忽略交易成本。
根据投资机制,投资者可以选择做空、做多市场指数,或者持币观望。这种简化策略使我们只注意市场收益。当投资者做多时形成市场收益(1),做空时形成负的市场收益(-1),持币时不行成任何市场收益(0)。所以,需要先计算对数收益率。其中,shift方法按照所需指数输入项数量移动时间序列----这里,每移动一个交易日,就能得到每日的对数收益率:
而基于趋势的投资策略的收益,将Regime列乘以下一天的Returns列(用“昨天”的头寸得出今天的收益):


所以比较指数累计持续收益和我们所用策略的累积持续收益即可:

【Python量化投资】基于技术分析研究股票市场的更多相关文章
- Python量化投资知识总结贴
Ricequant 量化社区的初衷让各位爱好量化的人士可以碰撞思维,在分享和争辩中学习到有用且实战的量化知识.有赖于各位在社区中贡献满满的干货以及有质量的讨论,从编程入门教学到技术指标再到多因子选股. ...
- 量化投资技术分析工具---ipython使用
量化投资实际上就是分析数据从而做出决策的过程python数据处理相关模块NumPy:数组批量计算pandas:灵活的表计算Matplotlib:数据可视化 学习目标:用NumPy+pandas+Mat ...
- 推荐学习《Python与量化投资从基础到实战》PDF及代码+《量化投资以Python为工具》PDF及代码
利用python分析量化投资问题是现在研究的热点,推荐两份资料用于学习 <Python与量化投资:从基础到实战>主要讲解如何利用Python进行量化投资,包括对数据的获取.整理.分析挖掘. ...
- Python与金融量化分析----金融与量化投资
一:金融了解 金融:就是对现有资源进行重新的整合之后,进行价值和利润的等效流通. 金融工具: 股票 期货 黄金 外汇 基金 ............. 股票: 股票是股份公司发给出资人多的一种凭证,股 ...
- Python金融应用编程(数据分析、定价与量化投资)
近年来,金融领域的量化分析越来越受到理论界与实务界的重视,量化分析的技术也取得了较大的进展,成为备受关注的一个热点领域.所谓金融量化,就是将金融分析理论与计算机编程技术相结合,更为有效的利用现代计算技 ...
- 《Python与量化投资:从基础到实战》PDF高清完整版-PDF|网盘下载附提取码
本书主要讲解如何利用Python进行量化投资,包括对数据的获取.整理.分析挖掘.信号构建.策略构建.回测.策略分析等.本书也是利用Python进行数据分析的指南,有大量的关于数据处理分析的应用,并将重 ...
- 基于802.11Fuzz技术的研究
转自安全客 关于无线的Fuzz最开始接触了解时,国内基本毛线都搜不到.经过几个月的资料搜集和学习,将大约全网的fuzz资料整理翻译分析并读懂写下,就为填补国内空白,也希望无线爱好者能多多交流. 在各个 ...
- 1、量化投资—为什么选择Python?
Python在量化领域的现状 就跟Java在web领域无可撼动的地位一样,Python也已经在金融量化投资领域占据了重要位置,从各个业务链条都能找到相应的框架实现. 在量化投资(证券和比特币)开源项目 ...
- python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据
python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...
随机推荐
- IDEA创建的Web项目配置Tomcat并启动Maven项目
点击如图所示的地方,进行添加Tomcat配置页面 弹出页面后,按照如图顺序找到,点击+号 tomcat Service -> Local 注意,这里不要选错了哦,还有一个TomE ...
- 8.1 服务器开发 API 函数封装,select 优化服务器和客户端
#include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <ne ...
- 谨慎使用 FileInfo.Exists 实例方法,而是使用 File.Exists 静态方法替代
如果你在代码中使用了 FileInfo.Exists 实例方法来判断一个文件是否存在,也许会发现此方法可能错误地判断来一个文件是否真的存在.这是一个坑. 本文将介绍坑的原因,并提供填坑的办法. 本文内 ...
- 视觉惯性里程计Visual–Inertial Odometry(VIO)概述
周围很多朋友开始做vio了,之前在知乎上也和胖爷讨论过这个问题,本文主要来自于知乎的讨论. 来自https://www.zhihu.com/question/53571648/answer/13772 ...
- 移动端 元素外面使用伪类after加边框 导致其内部元素无法选中
解决方法:给内部元素增加属性 position: relative; z-index: 3; 这样就能选中其内部元素了.
- Eclipse使用前准备(转)
Eclipse的发布流程 M1 08/19/2009 M2 09/30/2009 M3 11/11/2009 M4 12/16/2009 M ...
- repo学习笔记
1. 遍历所有的git仓库,并在每个仓库执行-c所指定的命令(被执行的命令不限于git命令,而是任何被系统支持的命令,比如:ls . pwd .cp 等 . $ repo forall -c &quo ...
- stenciljs 学习八 组件测试
测试对于框架来说比较重要,对于web 组件的测试同样很重要,类似的jest 很方便,stenciljs也是基于jest 开发的 包含两个核心api render(), flush() 测试配置 pac ...
- kettle--window开发环境和linux运行环境的迁移
首先要做的是将kettle在linux下搭建好. 一.搭建linux的kettle环境 1.1解压 (my_python_env)[root@hadoop26 ~]# .zip -d /usr/loc ...
- DllPlugin、DllReferencePlugin 可以提取的第三方库列表
DllPlugin.DllReferencePlugin 可以提取的第三方库列表: 'vue/dist/vue.esm.js', // 'vue/dist/vue.common.js' for web ...