我用python3.8做量化,每个品种大概200以内行数,大概2000次循环
计算因子已经从20分钟提高到19秒,用的是mplfinance包保存图片,感觉现在保存图片是我的程序的最大瓶颈。
请问,有哪些Python 包可以快速保存图片?或者把因子计算好,存盘后,用什么python包能在查询数据的时候快速生成图片?
频繁的 “创建→清除” 会拖慢你的代码运行速度的。只创建一个 figure 对象,在画下一个图之前,使用 plt.clf() 清理掉 axes,这样可以复用 figure
import tushare as ts
import mplfinance as mpf
import matplotlib as mpl # 用于设置曲线参数
from cycler import cycler # 用于定制线条颜色
import pandas as pd # 导入DataFrame数据
from time import time
# import talib
import os
import shutil
import matplotlib.pyplot as plt
import datetime
import numpy as np
def Save_picture(df, path, end_date, count, symbol, d_month, futures_model, lines):
start = time()
df = pd.DataFrame.from_records(df, index=pd.to_datetime(df['trade_date']))
# df=df[['trade_date','open','high','low','close','oi'] + lines].reset_index(drop=True)
df.rename(
columns={
'trade_date': 'Date', 'open': 'Open',
'high': 'High', 'low': 'Low',
'close': 'Close', 'oi': 'Volume'},
inplace=True)
# 设置基本参数
# type:绘制图形的类型,有candle, renko, ohlc, line等
# 此处选择candle,即K线图
# mav(moving average):均线类型,此处设置7,30,60日线
# volume:布尔类型,设置是否显示成交量,默认False
# title:设置标题
# y_label:设置纵轴主标题
# y_label_lower:设置成交量图一栏的标题
# figratio:设置图形纵横比
# figscale:设置图形尺寸(数值越大图像质量越高)
# 设置marketcolors
# up:设置K线线柱颜色,up意为收盘价大于等于开盘价
# down:与up相反,这样设置与国内K线颜色标准相符
# edge:K线线柱边缘颜色(i代表继承自up和down的颜色),下同。详见官方文档)
# wick:灯芯(上下影线)颜色
# volume:成交量直方图的颜色
# inherit:是否继承,选填
mc = mpf.make_marketcolors(
up='red',
down='#54ffff',
edge='i',
wick='i',
volume='in',
inherit=True)
# 设置图形风格
# gridaxis:设置网格线位置
# gridstyle:设置网格线线型
# y_on_right:设置y轴位置是否在右
s = mpf.make_mpf_style(
gridaxis='both',
facecolor='black',
gridstyle='-.',
y_on_right=False,
marketcolors=mc)
# 设置均线颜色,配色表可见下图
# 建议设置较深的颜色且与红色、绿色形成对比
# 此处设置七条均线的颜色,也可应用默认设置
mpl.rcParams['axes.prop_cycle'] = cycler(
# color=['white', 'yellow',
# '#ff00ff'])
color=['white', 'yellow',
'#ff00ff', '#00ff00', '#c0c0c0', 'darkorange',
'indigo'])
# 设置线宽
mpl.rcParams['lines.linewidth'] = 1
kwargs = dict(
type='candle',
# mav=(5, 21 ),
volume=True,
title='\nStock_index_futures %s candle_line (%s),d_month: %s, enddate:%s' % (
symbol, futures_model, d_month, end_date),
ylabel='Candles',
ylabel_lower='oi',
figratio=(15, 10),
figscale=1.5)
add_plot = mpf.make_addplot(df[lines], secondary_y=False)
# 图形绘制
# 绘制ema
# show_nontrading:是否显示非交易日,默认False
# savefig:导出图片,填写文件名及后缀
mpf.plot(df,
**kwargs,
addplot=add_plot,
style=s,
show_nontrading=False,
savefig=path + '\\%03d_%s_%s_candle_line' % (count, symbol, futures_model) + '.jpg')
# 是否显示图像
# plt.show()
plt.close('all')
stop = time()
global savepicturetime
savepicturetime = savepicturetime + stop - start
return
数据量大的话用pandas模块,真的很好用的,你可以学一学
pyecharts+qt5貌似感觉不错,我先试试