提示:文章内买卖点不构成交易依据,请根据情况自行决策。

教你用python绘制带有买卖点的股票K线图(附带鳄鱼指标、顾比均线指标、dataframe格式化输出)

  • 前言
  • 一、自己绘图,是不是疯了?
  • 二、分步说明
    • 1. 准备工作
      • 1.1 安装必要的包
      • 1.2 获取日K数据
      • 1.3 下载MyTT文件
    • 2. 代码分段说明
      • 2.1 代码变编码
      • 2.2 表格美化输出
    • 3. 新增鳄鱼指标与顾比均线指标
      • 3.1 鳄鱼指标(摘自MT5)
      • 3.2 顾比均线
    • 4. 绘制K线图(封装成函数,方便调用)
  • 三、完整代码
  • 总结

前言

快速绘制一张属于自己的量化交易图,是研判指标和交易策略的有效工具。下图是个人将MT5的鳄鱼指标移植到python代码里,并通过绘图函数进行了绘制。其中红色箭头为买入标志,绿色箭头为卖出标志。当然如果要进行实盘,还需要再增加条件进行细化。这里只是抛砖引玉,故有兴趣的朋友可自行实践,也欢迎在评论区留言交流。


提示:以下是本篇文章正文内容,下面案例仅供参考

一、自己绘图,是不是疯了?

有人说,交易软件这么发达,也可以自己写指标,还要用Python自己写代码,是不是疯了。多此一举!

事实是,要对量化策略买卖点进行研判,以修改和再评估,绘图这种直观的方式必不可少。有多少人,只能在策略的黑匣子里琢磨,改来改去却又不知道为何修改,怎么修改?于是越改越晕…

下面咱们就来尝试自己撸代码,搞个私人定制的绘图工具。

二、分步说明

1. 准备工作

1.1 安装必要的包

安装matplotlib,mplfinance模块

pip install matplotlib
pip install mplfinance

1.2 获取日K数据

为了方便,这里我们使用 Ashare包,小巧方便,只一个文件。下载Ashare.py并将其也和测试代码放在同一目录即可。

计算指标,先得有数据,采集数据可考文章《一文学懂通过Tushare、AKshare、baostock、Ashare、Pytdx获取股票行情数据(含代码)》
https://blog.csdn.net/popboy29/article/details/125815775

1.3 下载MyTT文件

访问https://github.com/mpquant/MyTT,下载MyTT文件放到运行Python的目录即可,下面会用到,需要提前准备好。了解更多指标计算可参考下文:

【指标计算】老妈再也不担心我的指标算不好了(教你用MyTT、TA-Lib、Pandas TA计算股票指标,附源代码)_IT里的交易员的博客-CSDN博客_python股票指标计算库
https://blog.csdn.net/popboy29/article/details/125826838

2. 代码分段说明

下面是分段解释,熟悉的朋友可以跳过,看不懂完整代码的再回过来看也不迟。由于这里需要引用的东西比较多,所以还是逐个给大家解释下,免得后面晕菜。

2.1 代码变编码

将6为数字代码,如“600000”转化为“sh.600000”,方便Ashare调用。

def code2symbol(code,kind="sh.code"):'''根据code代码开头数字转为为标准的symbol'''if len(code) == 6 and kind == "sh.code":if code[0] == "6" or code[0] == "9":  #上证股票return "sh"+codeif code[0] == "0" or code[0] == "3" or code[0] == "2":  #深证股票return "sz"+codeif code[0] == "4" or code[0] == "8":  #北证股票return "bj"+code

2.2 表格美化输出

很多人使用print输出pandas的dataframe,打印中少行少列,数据还对不齐,确实对数据分析不方便,这里咱们增加一个小工具(也是我博客的常见菜),需要对代码稍稍加工下,整段函数复制即可。

为了方便数据展示,需要调用prettytable包,请测试前提前安装,以免报错。安装语句如下:

pip install -U prettytable

格式化输出函数代码如下:

def df_table(df,index):import prettytable as pt#利用prettytable对输出结果进行美化,index为索引列名:df_table(df,'market')tb = pt.PrettyTable()df = df.reset_index(drop = True)tb.add_column(index,df.index)for col in df.columns.values:#df.columns.values的意思是获取列的名称tb.add_column(col, df[col])print(tb)

3. 新增鳄鱼指标与顾比均线指标

3.1 鳄鱼指标(摘自MT5)

MT5是啥?问度娘。
鳄鱼指标?鳄鱼指标有蓝、红、绿三条。蓝线,是鳄鱼的颚。红线,是鳄鱼的牙齿。绿线,是鳄鱼的上唇。基本上,无论实时价格往任何方向移动,鳄鱼线扮演着使我们的交易保持正当方向的罗盘角色。

def Alligator(CLOSE, HIGH, LOW, FAST=5, MID=8, SLOW=13):''' 鳄鱼指标 '''MP    = (HIGH + LOW)/2 # 中间价# MP    = (CLOSE + HIGH + LOW)/3 # 中间价LIPS  = SMA(MP,FAST) #鳄鱼的嘴唇TEETH = SMA(MP,MID)  #鳄鱼的牙齿JAW   = SMA(MP,SLOW) #鳄鱼的下巴return LIPS,TEETH,JAW

3.2 顾比均线

顾比均线又叫顾比移动复合平均线,由澳大利亚的投资家戴若-顾比先生发明。顾比均线由短期线束:3、5、8、10、12、15均线,和 长期线束:30、35、40、45、50、60组成。用短期线束和长期线束来判断短长线的趋势,很好的过滤了单一的均线产生的骗线的问题。

def Guby(CLOSE, SHORT_MA = [3,5,8,10,12,15], LONG_MA = [30,35,40,45,50,60] ):'''顾比均线'''# 短期线束SHORT0 = EMA(CLOSE,SHORT_MA[0]);SHORT1 = EMA(CLOSE,SHORT_MA[1]);SHORT2 = EMA(CLOSE,SHORT_MA[2]);SHORT3 = EMA(CLOSE,SHORT_MA[3]);SHORT4 = EMA(CLOSE,SHORT_MA[4]);SHORT5 = EMA(CLOSE,SHORT_MA[5]);    # 长期线束LONG0 = EMA(CLOSE,LONG_MA[0]);LONG1 = EMA(CLOSE,LONG_MA[1]);LONG2 = EMA(CLOSE,LONG_MA[2]);LONG3 = EMA(CLOSE,LONG_MA[3]);LONG4 = EMA(CLOSE,LONG_MA[4]);LONG5 = EMA(CLOSE,LONG_MA[5]); return SHORT0,SHORT1,SHORT2,SHORT3,SHORT4,SHORT5,LONG0,LONG1,LONG2,LONG3,LONG4,LONG5

4. 绘制K线图(封装成函数,方便调用)

这里以鳄鱼指标进行演示,顾比均线大家有兴趣自己修改玩。有问题可在评论区留言。
传入参数df为dataframe格式数据,必须包含open,high,low,close,volume,需要在主图添加指标的,将指标也作为一列即可。如鳄鱼指标的’LIPS’,‘TEETH’,‘JAW’。

这里对每一行进行了注释,就是方便大家修改代码,实现自己的需要。不过代码坑比较多,建议直接使用。笔者在这里折腾的时间比做指标还要长几倍!

def draw_kline(df):# 调用make_marketcolors函数,定义K线颜色,'i'表示根据K线颜色mc = mpf.make_marketcolors(up="red",  # 上涨K线的颜色down="green",  # 下跌K线的颜色edge='i',  # 蜡烛图箱体的颜色,'i'表示跟随K线颜色volume='i',  # 成交量柱子的颜色,'i'表示跟随K线颜色wick='i',  # 蜡烛图影线的颜色,'i'表示跟随K线颜色)# 调用make_mpf_style函数,自定义图表样式 ,函数返回一个字典,查看字典包含的数据,按照需求和规范调整参数style = mpf.make_mpf_style(base_mpl_style="ggplot", marketcolors=mc,rc={'font.family': 'SimHei', 'axes.unicode_minus': 'False'})# 添加单个指标示例# add_plot=[# mpf.make_addplot(df.LIPS),# mpf.make_addplot(df.TEETH),# mpf.make_addplot(df.JAW)]# 鳄鱼指标(后两行为多空标记)    add_plot=[mpf.make_addplot(df[['LIPS','TEETH','JAW']]),mpf.make_addplot(df['duo'].values, scatter=True, markersize=20, marker='^', color='r'),mpf.make_addplot(df['kong'].values, scatter=True, markersize=20, marker='v', color='g'),]# # 顾比均线# add_plot=[mpf.make_addplot(df[['SHORT0','SHORT1','SHORT2','SHORT3','SHORT4','SHORT5','LONG0','LONG1','LONG2','LONG3','LONG4','LONG5']])]       # 开始绘图mpf.plot(data=df,type="candle",title="K线图",addplot=add_plot,ylabel="价格",style=style,volume=True,figratio=(20,14),figscale=1)

三、完整代码

绘制带有鳄鱼指标及多空方向K线图(下方是成交量)完整代码。具体多空点没有进行细化研究,故不要作为买卖依据,实盘请再细化。

import time
from Ashare import *
# 加载指标计算库
from MyTT import *import matplotlib.pyplot as plt
import mplfinance as mpf# ===============表格美化输出===============
def df_table(df,index):import prettytable as pt#利用prettytable对输出结果进行美化,index为索引列名:df_table(df,'market')tb = pt.PrettyTable()df = df.reset_index(drop = True)tb.add_column(index,df.index)for col in df.columns.values:#df.columns.values的意思是获取列的名称tb.add_column(col, df[col])print(tb)def code2symbol(code,kind="sh.code"):'''根据code代码开头数字转为为标准的symbol'''if len(code) == 6 and kind == "sh.code":if code[0] == "6" or code[0] == "9":  #上证股票return "sh."+codeif code[0] == "0" or code[0] == "3" or code[0] == "2":  #深证股票return "sz"+codeif code[0] == "4" or code[0] == "8":  #北证股票return "bj"+codedef Alligator(CLOSE, HIGH, LOW, FAST=5, MID=8, SLOW=13):''' 鳄鱼指标 '''MP    = (HIGH + LOW)/2 # 中间价# MP    = (CLOSE + HIGH + LOW)/3 # 中间价LIPS  = SMA(MP,FAST) #鳄鱼的嘴唇TEETH = SMA(MP,MID)  #鳄鱼的牙齿JAW   = SMA(MP,SLOW) #鳄鱼的下巴return LIPS,TEETH,JAWdef Guby(CLOSE, SHORT_MA = [3,5,8,10,12,15], LONG_MA = [30,35,40,45,50,60] ):'''顾比均线'''# 短期线束SHORT0 = EMA(CLOSE,SHORT_MA[0]);SHORT1 = EMA(CLOSE,SHORT_MA[1]);SHORT2 = EMA(CLOSE,SHORT_MA[2]);SHORT3 = EMA(CLOSE,SHORT_MA[3]);SHORT4 = EMA(CLOSE,SHORT_MA[4]);SHORT5 = EMA(CLOSE,SHORT_MA[5]);    # 长期线束LONG0 = EMA(CLOSE,LONG_MA[0]);LONG1 = EMA(CLOSE,LONG_MA[1]);LONG2 = EMA(CLOSE,LONG_MA[2]);LONG3 = EMA(CLOSE,LONG_MA[3]);LONG4 = EMA(CLOSE,LONG_MA[4]);LONG5 = EMA(CLOSE,LONG_MA[5]); return SHORT0,SHORT1,SHORT2,SHORT3,SHORT4,SHORT5,LONG0,LONG1,LONG2,LONG3,LONG4,LONG5def draw_kline(df):# 调用make_marketcolors函数,定义K线颜色,'i'表示根据K线颜色mc = mpf.make_marketcolors(up="red",  # 上涨K线的颜色down="green",  # 下跌K线的颜色edge='i',  # 蜡烛图箱体的颜色volume='i',  # 成交量柱子的颜色wick='i',  # 蜡烛图影线的颜色)# 调用make_mpf_style函数,自定义图表样式 ,函数返回一个字典,查看字典包含的数据,按照需求和规范调整参数style = mpf.make_mpf_style(base_mpl_style="ggplot", marketcolors=mc,rc={'font.family': 'SimHei', 'axes.unicode_minus': 'False'})# 添加单个指标示例# add_plot=[# mpf.make_addplot(df.LIPS),# mpf.make_addplot(df.TEETH),# mpf.make_addplot(df.JAW)]# 鳄鱼指标(后两行为多空标记)    add_plot=[mpf.make_addplot(df[['LIPS','TEETH','JAW']]),mpf.make_addplot(df['duo'].values, scatter=True, markersize=20, marker='^', color='r'),mpf.make_addplot(df['kong'].values, scatter=True, markersize=20, marker='v', color='g'),]# # 顾比均线# add_plot=[mpf.make_addplot(df[['SHORT0','SHORT1','SHORT2','SHORT3','SHORT4','SHORT5','LONG0','LONG1','LONG2','LONG3','LONG4','LONG5']])]       # 开始绘图mpf.plot(data=df,type="candle",title="K线图",addplot=add_plot,ylabel="价格",style=style,volume=True,figratio=(20,14),figscale=1)if __name__ == "__main__":# 1.过Ashare获取数据print('开始提取K线数据')name = code = '300450' period = '1d'from  Ashare import *df = get_price(code2symbol(code),frequency=period,count=500)  #frequency='1d' 表是获取日K,count=1000,表示获取1000根K线# print('Ashare行情获取\n',df)# df_table(df.tail(20),'df')# 2. 测试计时开始,测试哪个就把if 后面的0改为1即可,其它改成0。time1 = time.time()print('开始计算指标')if 0:# 计算顾比均线df['SHORT0'],df['SHORT1'],df['SHORT2'],df['SHORT3'],df['SHORT4'],df['SHORT5'],df['LONG0'],df['LONG1'],df['LONG2'],df['LONG3'],df['LONG4'],df['LONG5'] = Guby(df['close'])df_table(df.tail(5),'df')if 1:# 计算鳄鱼指标df['LIPS'],df['TEETH'],df['JAW'] = Alligator(df['close'], df['high'], df['low'], FAST=5, MID=8, SLOW=13)df_table(df.tail(5),'df')if 1:df['duo'] = CROSS(df['LIPS'].values,df['JAW'].values)df['kong'] = CROSS(df['JAW'].values,df['LIPS'].values)df['duo']= df['duo'].apply(lambda x: 1 if x==True else None)df['kong'] = df['kong'].apply(lambda x: -1 if x==True else None)df_table(df.tail(20),'df')draw_kline(df.tail(120))time2 = time.time()print("计算指标并绘图耗时:",time2-time1,'秒')

经过测试,速度还是很快的,绘图也很快。最终截图在文章开头。


总结

写到这里已是深夜2点。不知道为什么,写文章,深夜效率很高,不过这么熬夜,也确实对身体不好。今天先写到这里。代码均调测无误,拿来就可以用。创作不易,欢迎评论收藏!

明天还有很多工作,抓紧睡觉去。

【K线绘图】教你用python绘制带有买卖点的股票K线图(附送鳄鱼指标、顾比均线指标、dataframe格式化输出)相关推荐

  1. 用python画皇冠_手把手教你用 Python 绘制酷炫的桑基图!

    原标题:手把手教你用 Python 绘制酷炫的桑基图! 作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看! ...

  2. python画50个图-Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢?

    Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢? 可视化图表,有相当多种,但常见的也就下面几种,其他比较复杂一点,大都也是基于如下几种进行组合,变换出来的.对于初学者来说,很容易被这官网上 ...

  3. python数据科学包(七)—— matplotlib实战之绘制球员能力图和股票K线图

    1.球员能力图 # -*- coding: utf-8 -*- import numpy as np import pandas as pd import matplotlib.pyplot as p ...

  4. 圣诞节到了,教大家用 Python 绘制几棵圣诞树~

    大家好,我是大飞 今天是圣诞节,先在这里祝大家圣诞节快乐~~,用英语来表达就是 Merry Christmas ~~, 为了贴合这个氛围,今天分享五种用 Python 绘制圣诞树的方法,从基础到高级, ...

  5. 手把手教你用 Python 绘制酷炫的桑基图!

    作者 | 周志鹏 责编 | 郭   芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" ...... 笔者本没有 ...

  6. python 桑基图 地理坐标_手把手教你用Python绘制酷炫的桑基图

    最近 ,不止一次收到小伙伴的截图追问: "这个图叫什么 ? ? ?" "这个图真好看 ! ! !怎么画啊 ?" ...... 笔者本没有干货 ,问的人多了 ,也 ...

  7. python画图宽度_手把手教你用 Python 绘制酷炫的桑基图!

    作者 | 周志鹏 责编 | 郭   芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" ...... 笔者本没有 ...

  8. 手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 位卑未敢忘忧国,事定犹须待阖棺. ...

  9. python进行数据分析流程图_利用Python绘制诱人的特定流程图:桑基图

    大家好,我是小z~ 最近,不止一次收到群里小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" 小z本没有干货,问的人多了,也便有了干货 ...

  10. python绘制黑白棋盘_生成黑白棋盘标定图和单目相机标定(python+opencv实现)

    学习记录. 事实上很早就接触过视觉定位这东西,但是到现在才返回头学习一下相机的标定,真是可耻啊!我把想法和过程记录一下. 相机成像 相机的成像原理--小孔成像 然而,在实际由于设计工艺问题.相机安装环 ...

最新文章

  1. 关于B站除夕夜被攻击
  2. python调用命令行获取pid_python 使用标准库根据进程名获取进程的pid
  3. Cento7 PHP5.6 升级 PHP7.0.0
  4. 知识图谱实践篇(五):KBQA Demo
  5. wxWidgets:wxWizardEvent类用法
  6. android下升级软件介绍
  7. Python版九九乘法表
  8. C++多态讲解以及常见面试题
  9. delphi 通过句柄获取exe文本框内容_实战经验:通过NotifyAddrChange侦测网络变化
  10. Java中的资源文件加载方式
  11. python字符串追加字符_Python字符串追加
  12. win10下驱动级套节字通信(ksocket)
  13. Win10系统禁用驱动程序强制签名
  14. 全国省市区行政编码数据表 sql格式
  15. java 发送邮件怎么抄送_javaMail发送qq邮件(二):可发送抄送密送多人,支持附件...
  16. 前端工程师简历怎么写
  17. 2020 博客之星评选【票数排行榜】每日更新
  18. jQuery 效果 - fadeIn() 方法
  19. RS232转RS485的接口原理图(附图)
  20. c语言海报,竞选海报 c语言

热门文章

  1. 深度学习(16) GAN(4)
  2. servlet实现统计网站访问量
  3. 笔记本 安装Linux系统
  4. 第512章 河系量子计算机,分身投胎万界(猛虎道长著)_第512章、河系量子计算机_历史军事小说_笔趣阁...
  5. mac移除下载镜像的quarantine
  6. vtigerCRM 是作为一种开源CRM软件
  7. 全球与中国冲压空气涡轮行业调查与未来发展趋势研究报告
  8. 【寒江雪】Go实现单例模式
  9. 设置低电平有效,即取反
  10. 计算机影视后期试题,(完整版)《影视后期制作》期末考试试题