python怎么读取csv文件做股票成交量图-Python利用Numpy读取CSV文件绘制股票K线

时间:2024-03-17 10:11:01

今天测试了一下利用Python绘制股票K线的功能,网上有很多人已经分享了这方面的源码,直接拿来用就可以了,不过我在测试的过程中发现了几个问题:

一、matplotlib.finance的问题

网上的源码基本上都是这样写的:

from matplotlib.finance import quotes_historical_yahoo_ohlc, candlestick_ohlc

可是在我的电脑上运行都会提示:ModuleNotFoundError: No module named 'matplotlib.finance'

原因是:从matplotlib 2.2.0版本开始,matplotlib.finance已经从matplotlib中剥离了,如果你要使用的话,需要单独安装这个包。

安装方法:

pip install https://github.com/matplotlib/mpl_finance/archive/master.zip

安装后,就可以直接使用from mpl_finance import...导入了。

二、numpy从CSV导入数据

最开始导入的时候,老是提示我:ValueError: could not convert string to float: 'close'

后来才发现,原来是我放了一行标题栏在文件中,删除后就可以了。

或者使用skiprows=1跳过首行就可以了。当然这个skiprows还可以跳过其他的行。

附CSV文件的格式:

python怎么读取csv文件做股票成交量图-Python利用Numpy读取CSV文件绘制股票K线

三、最终源码

import datetime

import csv

import matplotlib.pyplot as plt

import mpl_finance as mpf

import matplotlib.dates as mpd

import numpy as np

str2date =lambda x: mpd.date2num(datetime.datetime.strptime(x, '%Y/%m/%d').date())

data_list = np.loadtxt("nmp.csv",str,delimiter=",", skiprows=1)

columns = data_list[0]

quotes = [[str2date(d[0])] + [float(v) for v in d[1:-1]] for d in data_list[1:]]

fig,ax = plt.subplots(figsize=(6,4), facecolor=(0.5, 0.5, 0.5))

fig.subplots_adjust(bottom=0.2)

mpf.candlestick_ohlc(ax,quotes,width=0.4,colorup='r',colordown='g')

plt.grid(False)

ax.xaxis_date()

ax.autoscale_view()

plt.setp(plt.gca().get_xticklabels(), rotation=30)

plt.title("Shanghai Index")

plt.xlabel("Date")

plt.ylabel("Price")

plt.show()

附:

原来的代码在这里:https://bbs.csdn.net/topics/392298365

我将它改成了利用numpy读取csv文件的形式。另外,我将日期那里由原来的%m/%d/%Y改成了:%Y/%m/%d,这样和我从ricequant下载的日期格式一致。

另外,还有读取特定列的功能:

https://blog.csdn.net/u012413551/article/details/87890989

四、成果展示:

python怎么读取csv文件做股票成交量图-Python利用Numpy读取CSV文件绘制股票K线

平安银行日K线:

python怎么读取csv文件做股票成交量图-Python利用Numpy读取CSV文件绘制股票K线

python怎么读取csv文件做股票成交量图-Python利用Numpy读取CSV文件绘制股票K线

五、待完善的地方

这个代码不能产生5分钟的K线图,需要完善。

六、升级版本

下面是通过聚宽平台直接获取日线数据,然后生成K线。

当然也可以获取分钟数据。

import pandas

import matplotlib

import mpl_finance

import matplotlib.pyplot as plt

from jqdatasdk import *

matplotlib.style.use('ggplot')

auth('138xxxxxxxx','a4')

stock_code = '600031.XSHG'

start_date = '2018-08-17'

end_date = '2019-08-17'

def getData():

"""通过聚宽平台获取数据"""

quotes = get_price(stock_code, start_date, end_date, frequency='daily',skip_paused=False,fq='pre')

return quotes

def stockPricePlot(df):

#获取ohlc,同样带了时间的index

ohlc = df[['open', 'high', 'low', 'close']]

ohlc.index.name = 'timestamp'

print(ohlc.head())

ohlc = ohlc.reset_index()

print(ohlc.head())

ohlc['timestamp'] = ohlc['timestamp'].map(matplotlib.dates.date2num)

#生成100天均线数据

df['100ma'] = df['close'].rolling(window=100,min_periods=0).mean()

ax1 = plt.subplot2grid((6,1),(0,0),rowspan=5,colspan=1)

ax2 = plt.subplot2grid((6,1),(5,0),rowspan=5,colspan=1,sharex=ax1)

mpl_finance.candlestick_ohlc(ax=ax1, quotes=ohlc.values, width=0.20, colorup='g', colordown='r')

ax1.plot(df.index,df['100ma'])

ax2.bar(df.index,df['volume'])

plt.show()

df = getData()

stockPricePlot(df)

python怎么读取csv文件做股票成交量图-Python利用Numpy读取CSV文件绘制股票K线

python怎么读取csv文件做股票成交量图-Python利用Numpy读取CSV文件绘制股票K线