【K线绘图】教你用python绘制带有买卖点的股票K线图(附送鳄鱼指标、顾比均线指标、dataframe格式化输出)
提示:文章内买卖点不构成交易依据,请根据情况自行决策。
教你用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格式化输出)相关推荐
- 用python画皇冠_手把手教你用 Python 绘制酷炫的桑基图!
原标题:手把手教你用 Python 绘制酷炫的桑基图! 作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看! ...
- python画50个图-Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢?
Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢? 可视化图表,有相当多种,但常见的也就下面几种,其他比较复杂一点,大都也是基于如下几种进行组合,变换出来的.对于初学者来说,很容易被这官网上 ...
- python数据科学包(七)—— matplotlib实战之绘制球员能力图和股票K线图
1.球员能力图 # -*- coding: utf-8 -*- import numpy as np import pandas as pd import matplotlib.pyplot as p ...
- 圣诞节到了,教大家用 Python 绘制几棵圣诞树~
大家好,我是大飞 今天是圣诞节,先在这里祝大家圣诞节快乐~~,用英语来表达就是 Merry Christmas ~~, 为了贴合这个氛围,今天分享五种用 Python 绘制圣诞树的方法,从基础到高级, ...
- 手把手教你用 Python 绘制酷炫的桑基图!
作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" ...... 笔者本没有 ...
- python 桑基图 地理坐标_手把手教你用Python绘制酷炫的桑基图
最近 ,不止一次收到小伙伴的截图追问: "这个图叫什么 ? ? ?" "这个图真好看 ! ! !怎么画啊 ?" ...... 笔者本没有干货 ,问的人多了 ,也 ...
- python画图宽度_手把手教你用 Python 绘制酷炫的桑基图!
作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" ...... 笔者本没有 ...
- 手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)
点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 位卑未敢忘忧国,事定犹须待阖棺. ...
- python进行数据分析流程图_利用Python绘制诱人的特定流程图:桑基图
大家好,我是小z~ 最近,不止一次收到群里小伙伴的截图追问: "这个图叫什么???" "这个图真好看!!!怎么画啊?" 小z本没有干货,问的人多了,也便有了干货 ...
- python绘制黑白棋盘_生成黑白棋盘标定图和单目相机标定(python+opencv实现)
学习记录. 事实上很早就接触过视觉定位这东西,但是到现在才返回头学习一下相机的标定,真是可耻啊!我把想法和过程记录一下. 相机成像 相机的成像原理--小孔成像 然而,在实际由于设计工艺问题.相机安装环 ...
最新文章
- 关于B站除夕夜被攻击
- python调用命令行获取pid_python 使用标准库根据进程名获取进程的pid
- Cento7 PHP5.6 升级 PHP7.0.0
- 知识图谱实践篇(五):KBQA Demo
- wxWidgets:wxWizardEvent类用法
- android下升级软件介绍
- Python版九九乘法表
- C++多态讲解以及常见面试题
- delphi 通过句柄获取exe文本框内容_实战经验:通过NotifyAddrChange侦测网络变化
- Java中的资源文件加载方式
- python字符串追加字符_Python字符串追加
- win10下驱动级套节字通信(ksocket)
- Win10系统禁用驱动程序强制签名
- 全国省市区行政编码数据表 sql格式
- java 发送邮件怎么抄送_javaMail发送qq邮件(二):可发送抄送密送多人,支持附件...
- 前端工程师简历怎么写
- 2020 博客之星评选【票数排行榜】每日更新
- jQuery 效果 - fadeIn() 方法
- RS232转RS485的接口原理图(附图)
- c语言海报,竞选海报 c语言
热门文章
- 深度学习(16) GAN(4)
- servlet实现统计网站访问量
- 笔记本 安装Linux系统
- 第512章 河系量子计算机,分身投胎万界(猛虎道长著)_第512章、河系量子计算机_历史军事小说_笔趣阁...
- mac移除下载镜像的quarantine
- vtigerCRM 是作为一种开源CRM软件
- 全球与中国冲压空气涡轮行业调查与未来发展趋势研究报告
- 【寒江雪】Go实现单例模式
- 设置低电平有效,即取反
- 计算机影视后期试题,(完整版)《影视后期制作》期末考试试题