matplotlib画K线

实习期间帮公司的交易平台做K线图部分,看到了peakgao大佬的高仿同花顺的代码:https://blog.csdn.net/PeakGao/article/details/105634317

大佬没有直接使用mpl_finance,看上去效果很棒。我就在后面加了键鼠交互的内容。这不是用在公司平台上的版本,只是很粗糙的添加了交互功能,代码里还有不少问题。

增加功能:鼠标移动显示数值,鼠标滚轮缩小放大,方向键左右移动。

代码部分因为不需要所以把MACD和KDJ注释掉了:

# -*- coding:utf-8 -*-
import tushare as ts # 获取股票数据用
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker # 用于日期刻度定制
# import mpl_finance as mpf
# 注释了上面一行的旧版,新版是mplfinance,少了一个下划线,运行没警告,新版绘制蜡烛图性能应该更高,但是限得比较死,
# 不好加子图,后面我们把关键代码拿出来自己绘制
from mplfinance import original_flavor as mpf # 用新版库里面的旧版实现(跟mpl_finance一模一样)
from matplotlib import colors as mcolors  # 用于颜色转换成渲染时顶点需要的颜色格式
from matplotlib.collections import LineCollection, PolyCollection # 用于绘制直线集合和多边形集合
# import tools # 计算MACD和KDJ(没有使用talib,有缺陷)
 
# def calc_macd(df, fastperiod=12, slowperiod=26, signalperiod=9):
#     ewma12 = df['close'].ewm(span=fastperiod,adjust=False).mean()
#     ewma26 = df['close'].ewm(span=slowperiod,adjust=False).mean()
#     df['dif'] = ewma12-ewma26
#     df['dea'] = df['dif'].ewm(span=signalperiod,adjust=False).mean()
#     df['bar'] = (df['dif']-df['dea'])*2
#     # df['macd'] = 0
#     # series = df['dif']>0
#     # df.loc[series[series == True].index, 'macd'] = 1
#     return df

# def calc_kdj(df):
#     low_list = df['low'].rolling(9, min_periods=9).min()
#     low_list.fillna(value=df['low'].expanding().min(), inplace=True)
#     high_list = df['high'].rolling(9, min_periods=9).max()
#     high_list.fillna(value=df['high'].expanding().max(), inplace=True)
#     rsv = (df['close'] - low_list) / (high_list - low_list) * 100
#     df['k'] = pd.DataFrame(rsv).ewm(com=2).mean()
#     df['d'] = df['k'].ewm(com=2).mean()
#     df['j'] = 3 * df['k'] - 2 * df['d']
 
#     # df['kdj'] = 0
#     # series = df['k']>df['d']
#     # df.loc[series[series == True].index, 'kdj'] = 1
#     # # df.loc[series[(series == True) & (series.shift() == False)].index, 'kdjcross'] = 1
#     # # df.loc[series[(series ==
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值