背景介绍:

搭建程序化交易平台的过程需要研究技术指标。

环境:

OS:mac

PYTHON: 3.8

IDE: pycharm

步骤:

第一步:加载库

import pandas as pd
import pandas_datareader as web
from datetime import datetime, timedelta
import talib
import matplotlib.pyplot as plt
from mplfinance.original_flavor import candlestick_ohlc
import matplotlib.ticker as ticker

pandas: 处理股票数据

pandas_datareader:行情数据获取api,也可以用tushare或者从新浪等网站获取

datetime:获取日期

talib:生成技术指标

candlestick_ohlc: 绘制蜡烛图

matplotlib.ticker: 设置x轴刻度,如果不设置,matplotlib会将没有交易的日期也显示出来

第二步:获取数据

def stock(stock_code): #stock_code是股票代码,例子:上市 "600036.ss", 深市 "000001.sz"start_date = "2019-12-01"  #起始日期today = datetime.date(datetime.now())  #截止日期stock_info = web.get_data_yahoo(stock_code, start_date, today)  #获取行情数据,返回dataframestock_info = stock_info.reset_index()  #默认index是日期,这里要重置一下,为后面绘图做准备stock_info = stock_info.astype({"Date": str})    #将Date列的类型设置为str,为绘图做准备return stock_info

以下是获取招商银行(股票代码 "600036.ss") 的返回结果,一共6列,Date, High, Low, Open, Close, Volumn, Adj Close

第三步:获取技术指标数据

def get_indicators(stock_code):# 创建dataframedata = stock(stock_code)#获取macddata["macd"], data["macd_signal"], data["macd_hist"] = talib.MACD(data['Close'])#获取10日均线和30日均线data["ma10"] = talib.MA(data["Close"], timeperiod=10)data["ma30"] = talib.MA(data["Close"], timeperiod=30)#获取rsidata["rsi"] = talib.RSI(data["Close"])return data

talib有各种各样的技术指标,这里只获取了均线,macd和rsi,返回dataframe。

第四步:绘图

def plot_chart(data, title):fig = plt.figure()  #创建绘图区,包含四个子图fig.set_size_inches((20, 16))ax_candle = fig.add_axes((0, 0.72, 1, 0.32))   #蜡烛图子图ax_macd = fig.add_axes((0, 0.48, 1, 0.2), sharex=ax_candle)  #macd子图ax_rsi = fig.add_axes((0, 0.24, 1, 0.2), sharex=ax_candle)  #rsi子图ax_vol = fig.add_axes((0, 0, 1, 0.2), sharex=ax_candle)   #成交量子图ohlc = []   #存放行情数据,candlestick_ohlc需要传入固定格式的数据row_number = 0for date, row in data.iterrows():date, highp, lowp, openp, closep = row[:5]ohlc.append([row_number, openp, highp, lowp, closep])row_number = row_number+1date_tickers = data.Date.values #获取Date数据def format_date(x, pos=None):# 由于前面股票数据在 date 这个位置传入的都是int# 因此 x=0,1,2,...# date_tickers 是所有日期的字符串形式列表if x < 0 or x > len(date_tickers) - 1:return ''return date_tickers[int(x)]#绘制蜡烛图ax_candle.plot(data.index, data["ma7"], label="MA7")ax_candle.plot(data.index, data["ma8"], label="MA8")ax_candle.plot(data.index, data["ma25"], label="MA25")candlestick_ohlc(ax_candle, ohlc, colorup="g", colordown="r", width=0.8)ax_candle.xaxis.set_major_formatter(ticker.FuncFormatter(format_date))ax_candle.xaxis.set_major_locator(ticker.MultipleLocator(6)) #设置间隔为6个交易日ax_candle.grid(True)ax_candle.set_title(title, fontsize=20)ax_candle.legend()#绘制MACDax_macd.plot(data.index, data["macd"], label="macd")ax_macd.bar(data.index, data["macd_hist"] * 3, label="hist")ax_macd.plot(data.index, data["macd_signal"], label="signal")ax_macd.set_title('MACD')ax_macd.legend()#绘制RSIax_rsi.set_ylabel("(%)")ax_rsi.plot(data.index, [70] * len(data.index), label="overbought")ax_rsi.plot(data.index, [30] * len(data.index), label="oversold")ax_rsi.plot(data.index, data["rsi"], label="rsi")ax_rsi.set_title('KDJ')ax_rsi.legend()#绘制成交量ax_vol.bar(data.index, data["Volume"] / 1000000)ax_vol.set_ylabel("(Million)")#保存图片到本地fig.savefig("/Users/answer/Desktop/investment/photos/" + title + ".png", bbox_inches="tight")#这里个人选择不要plt.show(),因为保存图片到本地的#plt.show()

第五步:批量绘制

def industry(dict):for key, value in dict.items():# d.iteritems: an iterator over the (key, value) itemsstock_info = get_indicators(key)plot_chart(stock_info, value)

这里传进去的参数是字典,预先定义了目标股票代码。用字典的好处是,能够把股票名称也传进去。

finance_list = {"600036.ss": "Zhaoshang Yinhang","002142.sz": "Ningbo Yinhang","000001.sz": "Pingan Yinhang","601318.ss": "Zhongguo Pingan"
}

下面是恒瑞医药的绘制效果。几个指标清晰可见。

其它:

绘图的时候最好把绘图独立窗口关掉

Reference:

那未必, 2017, 使用matplotlib绘制k线图(去掉空白日期), https://www.jianshu.com/p/c10e57ccc7ba

Melina Mackey, 2020, Building a Technical Analysis Chart with Python, https://medium.com/analytics-vidhya/building-a-technical-analysis-chart-with-python-17107b78b297

用Python绘制MACD、KDJ、布林线技术指标图相关推荐

  1. python画蜡烛致敬烈士_用python绘制股票图,用python绘制蜡烛线型k线图是用代码还是绘图工具...

    Q1:用python绘制蜡烛线型k线图是用代码还是绘图工具 import matplotlib.pyplot as plt from matplotlib.dates import DateForma ...

  2. python画蜡烛致敬烈士_「」matplotlib 股票-用python绘制蜡烛线型k线图是用代码还是绘图工具-TOP金融网...

    用python绘制蜡烛线型k线图是用代码还是绘图工具 import matplotlib.pyplot as plt from matplotlib.dates import DateFormatte ...

  3. Python绘制MACD指标图

    写在前面 MACD简介 用到的主要Python库 MACD详细介绍 Python代码 总结 参考文献 推荐阅读 2020.8.1更新 写在前面 最近正在研究算法交易,看了几本英文原版书.本文总结自Pa ...

  4. Python绘制简单版K线图

    不管是对量化分析师还是普通的投资者来说,K线图(蜡烛图)都是一种很经典.很重要的工具.在K线图中,它会绘制每天的最高价.最低价.开盘价和收盘价,这对于我们理解股票的趋势以及每天的多空对比很有帮助. 一 ...

  5. 用Python绘制专业的K线图【含源代码】

    使用Python绘制一幅专业的K线图,是量化投资和金融数据分析的必备功课. 下面我将从K线图简介.数据获取.K线图绘制及成交量绘制等方面,结合源代码,一步步实现专业K线图的绘制. K线图简介 K线图又 ...

  6. Pandas计算EMA、MACD、布林线

    1.获取K线数据 上一篇博客:OKEX获取期货k线数据 中已经介绍 2.计算EMA指标 import pandas as pddf = ****** #具体数据与格式见上篇文章 paras = [7, ...

  7. 用python绘制多组箱线图、柱状图、簇状图

    目录 箱线图 单组数据 多组数据 柱状图 数据叠加显示 数据分离显示 簇状图 箱线图 单组数据 只有一组数据时候用matplotlib就很方便实现,还可以对箱线图的格式进行调整,示例代码如下: imp ...

  8. 布林通道参数用20还是26_boll参数20还是26好?布林线与macd一招鲜。

    布林线和多空布林线有什么区别? 所有指标包括kd macd均线,是根据已有价格计算得出,看指标落后于看价格分析,也就是k线.而价格是根据成交量变化,看k线分析落后看成交量分析,而成交量根据盘.越详细越 ...

  9. Python绘制BOLL布林线指标图

    写在前面 布林线(BOLL)技术指标简介 BOLL公式详解 参数设置 用到的主要Python库 Python代码&详解 参考文献 推荐阅读 写在前面 本文代码部分总结自Packt出版社的< ...

最新文章

  1. return,break,continue三者区别
  2. (Mybatis)增删改查实现
  3. Mysql修改binlog日志过期时间
  4. Linux系统编程:pipe匿名管道的使用,实现linux命令下管道命令
  5. Fragment容器Activity
  6. 医院大数据中心建设要点分析
  7. Python模块下载常用地址
  8. Java面向对象练习题之银行卡类和用户类
  9. 开机预读快还是不预读快_启用预读为网页浏览提速
  10. 使用RX方式模拟DoubanFm的登陆
  11. subscript on non-array or too many dimensions
  12. zabbix===》微信报警、聚合图形、自动发现自动注册、监控NFS、MySQL、web服务、URL地址
  13. tftpd 安装和配置
  14. 父类,子类中方法的调用
  15. c++ opencv数字图像处理:访问图像像素,遍历图像像素
  16. 转发抽奖!蚂蚁区块链创新大赛深圳站报名进行中
  17. 如何批量转换gi至ko
  18. 【林间美女XP热门主题】
  19. [Vuforia]一.环境搭建与图像识别
  20. 计算机考研复试----技术前沿知识

热门文章

  1. 如何将word文档中的表格数据快速转化成sql语句添加到数据库中?——正则表达式
  2. [安卓]手机管家(十)正则表达式 号码归属地
  3. 详解CVE-2022-0847 DirtyPipe漏洞
  4. 2020腾讯Android岗初级到高级面试真题收录解析,七年老Android掏心分享
  5. Acwing第 68 场周赛【未完结】
  6. 网页设计大作业模板-网页设计大作业——丝绸之路网页设计(6页)
  7. 【微访谈】挖坑的热情似火,填坑的想方设法——对话中讯网联•孙浩
  8. Autojs 查找控件
  9. 【愚公系列】2022年11月 微信小程序-优购电商项目-商品收藏⻚⾯
  10. cpu飙升系统挂掉解决方案