摘要:金融领域一向都是与数学和统计高度相关的行业,今天数学建模已经成为金融行业的发展动力和竞争力表现,人才需求旺盛。

金融领域一向都是与数学和统计高度相关的行业,今天数学建模已经成为金融行业的发展动力和竞争力表现,人才需求旺盛。特别是近年来大数据和计算机技术的发展,算法成为投资领域的重要决策手段之一,算法交易也成为重要的股票交易技术,特别是高频交易(HFT),量化投资等依赖机器算法的模型越来越流行。

恰巧看到一篇国外博客介绍Python在股票投资的应用,俺模仿看看如何玩玩股票投资组合的模型建模方法。第一讲先讲讲如何获取数据和可视化。后面一篇文章讲如何进行投资组合建模。

第一部分先介绍如何获取股票数据和可视化分析,移动平均的分析。

第一步:获取股票数据

我们需要安装一个python包:pip install pandas_datareader

包的相关说明:https://pandas-datareader.readthedocs.io/en/latest/

包可用通过API直接获取yahoo财经,Google 财经,world bank等数据接口提供的股票数据,这里我们用雅虎财经——yahoo finance的股票接口数据。

假设我们要获得沪市贵州茅台(600519.SS)——才有股票代码加沪深SS或SZ。

定义了股票开始日期和截止日期(系统今日时间)后

这样就获得了2010-1-1至2016-12-13日(今天)的贵州茅台股票基本数据。

可用看到很快就得到了沪市A股贵州茅台的近7年的股价数据。

接下来我们进行一系列可视化图表分析

这里用到了标准的matplotlib库,将输出结果呈现在Jupther上。

对于股票类型数据,High、Low、Open、Close、Adj Close如何在一张图上表现,最常用的叫阴阳烛图candlestick_ohlc。

为了阅读方便,画阴阳烛图的Python函数代码在文章最后...

pandas_candlestick_ohlc(maotai)

如果是多只股票的可视化如何表现呢?我们再多抓几只股票数据(同一周期)

我们增加同仁堂600085.SS和全聚德002186.SZ两只股票

看看走势图

我们发现因为三只股票的股价不同,坐标尺度不统一造成可视化不清晰。考量不同股票的股价不同,坐标标度有显著尺度差异,可用考虑用双轴标度可视化。

坐标尺度考虑是一方面,我们也可以考虑采用基期2010-1-4日股价作为基点进行对标或标准化股票指数化。

可视化趋势图

从趋势上看,从2010年第一个交易日开始,这三只股票基本上都是增长趋势,特别是同仁堂股价增长变动较大。

我们还可以计算各种股价的增长或变化,用:

或者:

我先展示用log变化:

最后,在可视化部分我们来看移动平均的趋势图。

在Python中实现q-day的移动平均(moving average)是比较方便的

我们下面分别指定20d、50d和200d的窗口期分析移动平均的走势图

至此我们完成了沪市或深市A股选择的股票交易数据下载,并采用各种可视化和标准化方法,以及给出了移动平均的趋势图的可视化。

当然这不是我玩的目的,只是告诉大家获取数据的方便性,以及Python的各种包的易用性,如果将股票数据下载后导入Tableau或其他软件也可以进行各种分析,特别是R语言有很多股票分析模型。

其实本篇文章的重点是接下来我要描述如何在固定投资金额比如100万,预期收益率10%,止损率20%的条件下如何进行多只股票组合投资的buy-sell模型。

如果您也在玩的话,可以先看看移动平均曲线,以及不同周期移动平均的交叉点的含义。

说实话,俺对股票也是一窍不通的,多头和空头,长线和短线,看空看多的投资策略都影响模型的建立和落实。

大家可以拷贝这段代码:pandas_candlestick_ohlc(maotai)

from matplotlib.dates import DateFormatter, WeekdayLocator, DayLocator, MONDAY

from matplotlib.finance import candlestick_ohlc

def pandas_candlestick_ohlc(dat, stick = "day", otherseries = None):

"""

:param dat: pandas DataFrame object with datetime64 index, and float columns "Open", "High", "Low", and "Close", likely created via DataReader from "yahoo"

:param stick: A string or number indicating the period of time covered by a single candlestick. Valid string inputs include "day", "week", "month", and "year", ("day" default), and any numeric input indicates the number of trading days included in a period

:param otherseries: An iterable that will be coerced into a list, containing the columns of dat that hold other series to be plotted as lines

This will show a Japanese candlestick plot for stock data stored in dat, also plotting other series if passed.

"""

mondays = WeekdayLocator(MONDAY)        # major ticks on the mondays

alldays = DayLocator()              # minor ticks on the days

dayFormatter = DateFormatter(%d)      # e.g., 12

# Create a new DataFrame which includes OHLC data for each period specified by stick input

transdat = dat.loc[:,["Open", "High", "Low", "Close"]]

if (type(stick) == str):

if stick == "day":

plotdat = transdat

stick = 1 # Used for plotting

elif stick in ["week", "month", "year"]:

if stick == "week":

transdat["week"] = pd.to_datetime(transdat.index).map(lambda x: x.isocalendar()[1]) # Identify weeks

elif stick == "month":

transdat["month"] = pd.to_datetime(transdat.index).map(lambda x: x.month) # Identify months

transdat["year"] = pd.to_datetime(transdat.index).map(lambda x: x.isocalendar()[0]) # Identify years

grouped = transdat.groupby(list(set(["year",stick]))) # Group by year and other appropriate variable

plotdat = pd.DataFrame(,

index = [group.index[0]]))

else:

raise ValueError(Valid inputs to argument "stick" include the strings "day", "week", "month", "year", or a positive integer)

# Set plot parameters, including the axis object ax used for plotting

fig, ax = plt.subplots()

fig.subplots_adjust(bottom=0.2)

if plotdat.index[-1] - plotdat.index[0] < pd.Timedelta(730 days):

weekFormatter = DateFormatter(%b %d)  # e.g., Jan 12

ax.xaxis.set_major_locator(mondays)

ax.xaxis.set_minor_locator(alldays)

else:

weekFormatter = DateFormatter(%b %d, %Y)

ax.xaxis.set_major_formatter(weekFormatter)

ax.grid(True)

# Create the candelstick chart

candlestick_ohlc(ax, list(zip(list(date2num(plotdat.index.tolist())), plotdat["Open"].tolist(), plotdat["High"].tolist(),

plotdat["Low"].tolist(), plotdat["Close"].tolist())),

colorup = "black", colordown = "red", width = stick * .4)

# Plot other series (such as moving averages) as lines

if otherseries != None:

if type(otherseries) != list:

otherseries = [otherseries]

dat.loc[:,otherseries].plot(ax = ax, lw = 1.3, grid = True)

ax.xaxis_date()

ax.autoscale_view()

plt.setp(plt.gca().get_xticklabels(), rotation=45, horizontalalignment=right)

plt.show()

pandas_candlestick_ohlc(maotai)

用python对股票进行可视化分析_股票分析 | 用Python玩玩A股股票数据分析-可视化部分...相关推荐

  1. python 3d大数据可视化软件_分享4个最受欢迎的大数据可视化工具

    想像阅读书本一样阅读数据流?这只有在电影中才有可能发生. 在现实世界中,企业必须使用数据可视化工具来读取原始数据的趋势和模式. 大数据可视化是进行各种大数据分析解决的最重要组成部分之一. 一旦原始数据 ...

  2. python审计分析_【干货】Python自动化审计及实现

    0x00 摘要 Python由于其简单,快速,库丰富的特点在国内使用的越来越广泛,但是一些不好的用法却带来了严重的安全问题,本文从Python源码入手,分析其语法树,跟踪数据流来判断是否存在注入点.0 ...

  3. python程序分析_如何分析Python脚本?

    如Chris Lawlor所示cProfile是一个很棒的工具,可以很容易地用于打印到屏幕上:python -m cProfile -s time mine.py 或提交:python -m cPro ...

  4. 消费者行为分析_消费者行为分析-是否点击广告?

    消费者行为分析 什么是消费者行为? (What is Consumer Behavior?) consumer behavior is the study of individuals, groups ...

  5. python在建筑施工方面的应用_有哪些关于 Python 在建筑中的应用和教程?

    2018.02.09更新 (發現距離上一次更新馬上就要兩年了--) 嗯,兩年間發生了很多事.我也莫名其妙跑到ETH來了. 做起了Fab的優化,python已經完全不能滿足效率和複雜度的要求,走上了C+ ...

  6. python基于水色图像的水质评价_零基础学习Python的学习路线及教程

    什么是Python? 在过去的2017年里,Python开发者在全球快速增长,国内小伙伴学习 Python 的热情一路高涨.同时,PYPL发布7月编程语言指数榜,Python 在今年5月首次超越 Ja ...

  7. python删除文件夹无法访问_人生苦短 我学Python——anaconda和Jupyter notebook安装使用...

    一.人生苦短 我学Python 为什么学习Python? 1.应用范围广 很多网站是用Python开发的,比如豆瓣,还有YouTube等等. 2.效率高,和其他编程语言对比,可以用少得多的代码写出相同 ...

  8. python 搜索引擎 实验楼的源码_【如何入门 Python 爬虫?】-看准网

    匿名用户 学会一门语言的捷径只有一个: Getting Started!¶ 起步阶段 任何一种编程语言都包含两个部分:硬知识和软知识,起步阶段的主要任务是掌握硬知识.°1 硬知识 "硬知识& ...

  9. 用python绘制一条红色蟒蛇_实例:用 Python 绘制一套“会跳舞”的动态图形

    (给Python开发者加星标,提升Python技能) 来源:机器之心 数据暴增的年代,数据科学家.分析师在被要求对数据有更深的理解与分析的同时,还需要将结果有效地传递给他人.如何让目标听众更直观地理解 ...

最新文章

  1. Java项目:考试管理系统(java+Springboot+Maven+Jpa+Vue+Mysql)
  2. Android中怎样使用Navicat可视化查看sqllite的数据库(查看db文件)
  3. html编写程序常用的,html编写简洁页面表单验证程序.doc
  4. java swing列表数据加监听,【Java Swing公开课|Java监听列表项选择事件怎么用,看完这篇文章你一定就会了】- 环球网校...
  5. 高精度:麦森数*(洛谷P1045)
  6. TFS 团队项目不能访问documents解决方案
  7. JS中的setInterval 函数体带参数f方法
  8. 使用apache benchmark(ab) 测试报错: apr_socket_recv: Connection timed out (110)
  9. python求素数代码_Python实现高效求解素数代码实例
  10. HTML、CSS学习总结
  11. python eel + vue开发桌面应用
  12. MySQL where in 用法详解
  13. 从零设计开发快递自动填写收发货地址功能
  14. Oracle 11g RAC CRS-4535/ORA-15077
  15. 基于openCV的视频人脸识别——演员的诞生视频人脸识别
  16. rviz-Ros Wiki官网教程学习笔记(1)-用户指南
  17. 计算机二级(二)仅学习
  18. 关于 chrome 谷歌浏览器 最小化后 页面被限制,不能运行的解决方案
  19. 如何多台电脑同时安装windows系统
  20. 美团CEO王兴:8年时间,我对商业的思考

热门文章

  1. SkyWalking仪表盘
  2. GoLang 调用 .so 文件
  3. 编译原理学习(一)词法分析器
  4. 人脸识别、语音识别系统
  5. double保留两位小数的方法
  6. ASp.net动态加载js和css文件
  7. unity暂停游戏,退出游戏
  8. 有效的括号(leetcode简单)
  9. python的itchat模块_Python itchat模块在微信上的各种小应用
  10. html页面中鼠标悬停更换图片